分析按键去抖流程

分析按键去抖流程,第1张

在键数较少时可用硬件方法消除键抖动。上图所示的RS触发器为常用的硬件去抖。图中两个“与非”门构成一个RS触发器。当按键按下时,输出为0当键按下时,输出为1。此时即使用按键的机械性能,使按键因d性抖动而产生瞬时断开(抖动跳开B),只要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。这一点通过分析RS触发器的工作过程很容易得到验证。如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。一般来说,软件消抖的方法是不断检测按键值,直到按键值稳定。实现方法:假设未按键时输入1,按键后输入为0,抖动时不定。可以做以下检测:检测到按键输入为0之后,延时5ms~10ms,再次检测,如果按键还为0,那么就认为有按键输入。延时的5ms~10ms恰好避开了抖动期。

RESTART:

JB    START,$        ;第一次检测(检测的位置在抖动的过程中)

DELAY(延时程序)        延时消抖

JB    START,RESTART再次检测(检测位置在稳定阶段)

……

第一次检测有可能会检测到抖动的波峰“尖点”处,信号为1,此时第一条语句会原地踏步,不往下执行,直到检测到波谷“地点”处,信号为0,才开始执行第二条语句,调用延时子程序,延时子程序会持续一段时间(当然这时间自己定,大概就行),来到第三条语句,再次检测信号(稳定阶段),信号为0(前后检测一致),继续往下执行……如果第二次检测是高电平1,说明(①按键没有被按下,只是信号单纯地抖动而已)或者(②延时太短,第二次检测的位置还在前沿抖动阶段)或者(③延时太长,检测位置在后沿抖动阶段)此时就执行跳转回RESTART,继续重新扫描信号,看按键有没有被按下。

看了n多解释,没有一个是我(新手)觉得通俗易懂的,想了很久才恍然大悟,虽然是18年提出的问题,还是希望能帮助到不理解的同学。不喜勿喷,谢谢!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11463054.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存