基于状态机的按键消抖
课程重点:学会分析状态
理想中认为是,上面的状态,但是实际可能是下面的状态。
首先按键分为几个工作状态:
1 没有被按下,空闲静止态,高电平
2 按下过程中,抖动过程,会高低电平多次变化
3 按下过后,抖动结束,处于按下静止态,输出低电平
4 释放过程中,抖动过程,会高低电平多次变化,最终稳定在高电平
按下过后开始计时,如果在没有达到20ms的情况下,出现了上升沿、高电平。就认为这是一次抖动直到低电平持续时间超过20ms,才认为按键稳定了,抖动结束了。
- 空闲态,等待按键按下(等待下降沿),一旦出现下降沿,就开始20ms的计时
- 按下消抖状态:20ms的计时状态,在这个状态里,一边计时,一边检测有没有出现上升沿,如果有出现上升沿,回到空闲态;如果计时满20ms,没有出现上升沿,发出按键按下的通知信号。
- 等待释放:等待按键释放(等待上升沿),一旦出现上升沿,就开始20ms的计时。
- 释放消抖状态:20ms的计时状态,在这个状态里,一边计时,一边检测按键有没有出现下降沿,如果出现下降沿,则回到等待释放状态;如果计时满20ms没有出现下降沿,发出按键释放的通知信号。
状态转移图绘制: