使用stm32f103ze编写一个按键控制流水灯: 使用4个LED,三个按键 按键一控制正向流水灯 按键二控制反向流水灯 按键三控制流水灯的数量(1个,2个,3个) 
时间: 2023-05-17 10:05:52 浏览: 39
可以使用以下代码实现:
#include "stm32f10x.h"
#define LED1 GPIO_Pin_8
#define LED2 GPIO_Pin_9
#define LED3 GPIO_Pin_10
#define LED4 GPIO_Pin_11
#define KEY1 GPIO_Pin_0
#define KEY2 GPIO_Pin_1
#define KEY3 GPIO_Pin_2
void GPIO_Configuration(void);
void Delay(__IO uint32_t nCount);
int main(void)
{
GPIO_Configuration();
uint8_t led_num = 1;
uint8_t led_dir = 1;
uint8_t key1_state = 0;
uint8_t key2_state = 0;
uint8_t key3_state = 0;
while (1)
{
if (GPIO_ReadInputDataBit(GPIOA, KEY1) == 0 && key1_state == 0)
{
key1_state = 1;
led_dir = 1;
}
else if (GPIO_ReadInputDataBit(GPIOA, KEY1) == 1 && key1_state == 1)
{
key1_state = 0;
}
if (GPIO_ReadInputDataBit(GPIOA, KEY2) == 0 && key2_state == 0)
{
key2_state = 1;
led_dir = 0;
}
else if (GPIO_ReadInputDataBit(GPIOA, KEY2) == 1 && key2_state == 1)
{
key2_state = 0;
}
if (GPIO_ReadInputDataBit(GPIOA, KEY3) == 0 && key3_state == 0)
{
key3_state = 1;
led_num++;
if (led_num > 3)
{
led_num = 1;
}
}
else if (GPIO_ReadInputDataBit(GPIOA, KEY3) == 1 && key3_state == 1)
{
key3_state = 0;
}
if (led_dir == 1)
{
GPIO_SetBits(GPIOB, LED1 << (led_num - 1));
Delay(100000);
GPIO_ResetBits(GPIOB, LED1 << (led_num - 1));
}
else
{
GPIO_SetBits(GPIOB, LED4 >> (led_num - 1));
Delay(100000);
GPIO_ResetBits(GPIOB, LED4 >> (led_num - 1));
}
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED1 | LED2 | LED3 | LED4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = KEY1 | KEY2 | KEY3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void Delay(__IO uint32_t nCount)
{
for (; nCount != 0; nCount--);
}
相关推荐
















