现在在搞单片机stm32的流水灯和闪烁切换,要求按下按键模式不变,松开才变,
你在主循环里扫描按键就行,然后开启一个1ms的定时器定时,当按键第一次按下用一个防抖时间标致计时,在定时器中断里计时,每次扫描按键如果按下而且时间超过10ms仍旧按键说明按键有效保存键值,主循环扫描按键释放,扫描到释放执行按键处理程序
最后我把其他东西全扔一堆,还是用全局变量,不过全局变量方另外一个c里面了,成了,不过我还是想知道大佬们说的按键扫描函数是什么
其实C工程里有个东西是全局的,只是没留意而已,所有函数都是全局的,好好利用一下吧
int key_scan()
{
if(BUTTON1==1 || BUTTON2==1 || BUTTON3==1 || BUTTON4==1)
{
HAL_Delay(10);
if(BUTTON1==1) return button1;
else if(BUTTON2==1) return button2;
else if(BUTTON3==1) return button3;
else if(BUTTON4==1) return button4;
}
}
这里的BUTTON属宏定义,当然也可以直接写成HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);读取引脚电平,通过返回的值来判断按键状态。