按键控制灯的亮灭

发布时间 2023-11-19 23:10:26作者: 京多安

1.写两个按键的驱动文件

image

2.进行按键引脚的初始化,注意这里是输入模式,设置为浮空输入

image

3.再写一个按键检测函数

//按键检测 uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) { if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==1)//读取引脚的输入 { //松手检测,如果按着不放,则一直在这里循环 while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==1); return 1; }else return 0; }

4.在灯的头文件里面写一个灯的引脚电平翻转程序

#define LED_B_TOGGLE {GPIOB->ODR ^= GPIO_Pin_1;}
灯的引脚为PB1,其中GPIO_Pin_1为0x0002,ODR寄存器每次与该引脚异或都会改变输出电平。所以按一次按键灯的状态改变一次。

5.最后主程序控制代码如下

int main(void) { GPIO_LED_Config(); KEY_Config(); while(1) { if(Key_Scan(GPIOA,GPIO_Pin_0)==1)//判断是否按下按键且松手 LED_B_TOGGLE; } }
按键的引脚为PA0,每次检测引脚是否被按下,如按下则引脚输入了高电平,灯电平翻转一次。