
单个按键多次击键的检测方法.pdf
5页更多精彩文章,尽在《匠人的百宝箱》网址:http://cxjr.21ic.org 如果你的‘芯’是一座作坊,我愿做那不知疲倦的程序匠…… 《匠人手记》之十二 单个按键多次击键的检测方法 作者:程序匠人 出处: 《匠人的百宝箱》 1. 前言 匠人早年曾经写过一篇关于单个按键多次击键的检测方法现抽空重新整理一下这“重新整理”的另一种说法就是“炒冷饭”,呵呵) 在某些设计中,我们可能要用一个按键来输入多种信息如:单击/双击/三击、短击/长击、还有各种组合击键方式为了实现这种需要,匠人设计了这个读键子程序 本文的正式发布版本为PDF格式,欢迎转载匠人唯一的要求是,转载者不可对文件中的任何内容(包括作者和出处信息)进行修改转载者有义务保证此文档的完整性 2. 设计思路 在这个读键子程序中,定义了三个常数 1) 长击时间常数=500ms 用于识别短击/长击 null 如果按键闭合时间500ms,判断为一次长击(用“1”代表) 2) 两次击键时间间隔常数=700ms 用于判别击键动作是否完成 null 两次击键时间间隔应500MS 两次按键间隔时间 键号低位 ;================= READKEYA: CLR KEY_DL ;清计数器 READKEYB: CALL DL10MS INC KEY_DL MOV A,@50 SUB A,KEY_DL JBC R3,C JMP READKEYC ;计数器溢出跳 JKON READKEYB ;键未释放跳 BC R3,C ;C=0 JMP READKEYD ;================= 更多精彩文章,尽在《匠人的百宝箱》。
网址:http://cxjr.21ic.org 如果你的‘芯’是一座作坊,我愿做那不知疲倦的程序匠…… READKEYC: WDTC ;喂狗 JKON READKEYC ;键未释放跳 BS R3,C ;C=1 READKEYD: RLLC KEY_NUM ;键号左移一位,C -> 键号低位 JBC KEY_NUM,ZHBIT ;按键检测未完成继续 RET ;================= CLR KEY_DL ;清计数器 READKEYE: CALL DL10MS INC KEY_DL MOV A,@70 SUB A,KEY_DL JBC R3,C READKEYF: RET ;计数器溢出返回 JKOFF READKEYE ;键未按下跳 JMP READKEYA ;再次检测 ;================= ;键闭合跳(宏) ;================= JKON MACRO ADDRESS JBS R5,KEY ;键断开跳 FJMP ADDRESS ;键闭合跳 CALL DL10MS ;延时去抖动 JBS R5,KEY ;键断开跳 FJMP ADDRESS ;键闭合跳 ENDM ;================= ;键断开跳(宏) ;================= JKOFF MACRO ADDRESS JBC R5,KEY ;键闭合跳 FJMP ADDRESS ;键断开跳 CALL DL10MS ;延时去抖动 JBC R5,KEY ;键闭合跳 FJMP ADDRESS ;键断开跳 ENDM 5. 参考文章 点击《KEY(按键)应用》大全( )可以访问相应文章。
或者,您也可以到《匠人的百宝箱》(http://cxjr.21ic.org)搜索更多相关内容。