STM32按键FIFO
主要思想就是:
1.先配置按键的初始计数值为滤波值。如,滤波为40ms,则配置该值为固定初始值,如10(假如扫描周期为10ms),每间隔一定时间(上面说的10ms)去检测一次按键的状态,如按键按下则增加该值,按键松开就减少该值。检测该按键的计数值,如大于初始值+滤波值(10+4),则认为是确实按下了,就压栈该按键的按下状态值;如小于初始值-滤波值(10-4),则认为该按键松开了,就压栈该按键的松开状态值。长按也是一样的,如按下1秒确认为长按,则长按的滤波值为100,如检测到该按键的状态值大于初始值+滤波值(10+100),则认为按键长按有效了,就压栈该按键长按状态值。
2.栈FIFO,先进先出的概念,主循环里一直检测(或者如果要求不用很及时响应则可以用定时器定时检测)栈里是否有值,如有就处理该按键值对应的功能。
具体参见代码