硬件消抖:
在按键个数较少时可用硬件方法消除键抖动。 硬件去抖常见的是使用RS触发器。
图为与非门 RS 触发器。当按键未按下时,输出为 0;当键按下时, 输出为 1。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开 B), 只要按键不返回原始状态 A,双稳态电路的状态不改变,输出保持为 0,不会产生抖动的波形。
即使 B 点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。
软件消抖:
方法一:按下键后,通过计数器计数到一定时间后(等抖动消除,按键完全按下,一般为30ms以上)再进行检测有效的按键信号;
方法二(推荐、避免浪费不必要的时间):若按键信号为低电平有效,则计数器在按键信号为低电平时计数,按键信号在高电平时清零,只有当按键信号保持低电平且计数器计数到20ms时,此时的低电平信号便是有效信号,可以拉高一个clk的flag信号来作为有效脉冲。
问题如下图,时间过长产生了多个有效信号,从而变得错误(只需要一个)?
解决:发现cnt_20ms计数器计数到999_998的次数只有一个,而且最接近999_999,在既保证去抖动时间的前提下使key_flag信号只产生一个脉冲信号。