
RESTART:
JB START,$ ;第一次检测(检测的位置在抖动的过程中)
DELAY(延时程序) 延时消抖
JB START,RESTART再次检测(检测位置在稳定阶段)
……
第一次检测有可能会检测到抖动的波峰“尖点”处,信号为1,此时第一条语句会原地踏步,不往下执行,直到检测到波谷“地点”处,信号为0,才开始执行第二条语句,调用延时子程序,延时子程序会持续一段时间(当然这时间自己定,带笑大概就行),来到第三条御羡语句,再次检测信号(稳定阶段),信号为0(前后检测一致),继续往下执行……如果第二次检测是高电平1,说明(①按键没有被按下,只是信号单纯地抖动而已)或者(②延时太短,第二次检测的位置还在前沿抖动阶段)或者(③延时太长,检测位置在后沿抖动阶段)此时就执行跳转回RESTART,继续重新扫描信号,看按键有没有被按下。
看了n多解释,没有一个是我(新手)觉得通俗易懂的,想了很久才恍然大悟,虽然是18年提出的镇行拍问题,还是希望能帮助到不理解的同学。不喜勿喷,谢谢!
主要目的是为了提高按键输入可靠性,由于机械触点的d性振动,按键在按下时不会马上稳定地接通而在d起时也不能一下子
完全地断开,
因而在按键闭合和断开的瞬间均会出现一连串的抖动,
这称为按键的抖动干扰。
按键的抖动会造成按一次键产生的开关状态被
CPU
误掘让读几次。
为了使
CPU
能正确地读取按键
状态,必须在按键闭合或断开时,消除产生的前沿或后沿抖动。
去抖动的方法有硬件方法和软件方法两种。
硬件方法是设计一个滤波延时电路或单稳态电路
等硬件电路来避开按键的抖动时间。
软件方法判穗局是指编制一段时间大于
100ms
的延时程序,
在
第族梁一次检测到有键按下时,
执行这段延时子程序使键的前沿抖动消失后再检测该键状态,
如
果该键仍保持闭合状态电平,则确认为该键已稳定按下,否则无键按下,从而消除了抖动的
影响。
嘿嘿旅迹 俺来帮你解答1 按键处理的 *** 作流程:
当发现有键按下时, 为了消除按键的抖动需要软件延时5~10ms
经过延时后再读入按键的状态 如果按键有效 则进入相应的按键处理程序
否则(按键无效)可以视逗镇陵为干扰。
2 一般都是采用山戚软件延时(即调用一个延时子程序 延时5ms )
不要使用定时计数器来延时 会浪费单片机的硬件资源。
呵呵 满意 就选满意回答
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)