
RESTART:
JB START,$ ;第一次检测(检测的位置在抖动的过程中)
DELAY(延时程序) 延时消抖
JB START,RESTART再次检测(检测位置在稳定阶段)
……
第一次检测有可能会检测到抖动的波峰“尖点”处,信号为1,此时第一条语句会原地踏步,不往下执行,直到检测到波谷“地点”处,信号为0,才开始执行第二条语句,调用延时子程序,延时子程序会持续一段时间(当然这时间自己定,带笑大概就行),来到第三条御羡语句,再次检测信号(稳定阶段),信号为0(前后检测一致),继续往下执行……如果第二次检测是高电平1,说明(①按键没有被按下,只是信号单纯地抖动而已)或者(②延时太短,第二次检测的位置还在前沿抖动阶段)或者(③延时太长,检测位置在后沿抖动阶段)此时就执行跳转回RESTART,继续重新扫描信号,看按键有没有被按下。
看了n多解释,没有一个是我(新手)觉得通俗易懂的,想了很久才恍然大悟,虽然是18年提出的镇行拍问题,还是希望能帮助到不理解的同学。不喜勿喷,谢谢!
AA: MOV DX,C8255MOV AL,00H
OUT DX,AL 键盘行线困孝搭输出全"0"(3行汪拿)
MOV DX,B8255
INAL,DX 读慎镇入键盘列线(4列)
AND AL,0FH
CMP AL,0FH
JZAA 无键按下继续扫描
MOV CX,0000H
AA1: NOP
NOP
LOOP AA1 延时
INAL,DX
AND AL,0FH
CMP AL,0FH
JZAA 再次判断,无键按下继续扫描
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)