认真警告,拒绝眼瞎
while结尾不加分号,造成返回值出现问题,按键按下反应出现问题
按键按下后,灯不发生反转,需要加个延时
while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON) ;;;;;;;;;;;;;;;;分号
uint8_t KEY_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON)
{
while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON); //while结尾处分号
return KEY_ON;
}
else
{
return KEY_OFF;
}
}
在这里我们定义了一个 Key_Scan 函数用于扫描按键状态。 GPIO 引脚的输入电平可通
过 读 取 IDR 寄 存 器 对 应 的 数 据 位 来 感 知 , 而 STM32 标 准 库 提 供 了 库 函 数
GPIO_ReadInputDataBit 来获取位状态,该函数输入 GPIO 端口及引脚号,函数返回该引脚
的电平状态,高电平返回 1,低电平返回 0。 Key_Scan 函数中以 GPIO_ReadInputDataBit 的
返回值与自定义的宏“KEY_ON”对比,若检测到按键按下,则使用 while循环持续检测按
键状态,直到按键释放,按键释放后 Key_Scan 函数返回一个“KEY_ON”值
;若没有检测
到按键按下,则函数直接返回“KEY_OFF”。若按键的硬件没有做消抖处理,需要在这个
Key_Scan 函数中做软件滤波,防止波纹抖动引起误触发。