📄 chongdianqi.txt
字号:
读键子程序
;出口: KEY_NUM =键号值
;中间: KEY_DL =计数器
;说明:
/*
短击:键按下时间<500MS
长击:键按下时间>500MS
两次按键间隔时间<700MS
键号定义:
KEY_NUM="00000000": 无键按下
KEY_NUM="00000001": 无意义
KEY_NUM="00000010": 单次短击
KEY_NUM="00000011": 单次长击
KEY_NUM="00000100": 短击 + 短击
KEY_NUM="00000101": 短击 + 长击
KEY_NUM="00000110": 长击 + 短击
KEY_NUM="00000111": 长击 + 长击
...
...
KEY_NUM="11111110": 长击 + 长击 + 长击 + 长击 + 长击 + 长击 + 短击
KEY_NUM="11111111": 长击 + 长击 + 长击 + 长击 + 长击 + 长击 + 长击
*/
ZHBIT EQU 2 ;按键组合位(选择范围1~7)
;********************************
READKEY:
CLR KEY_NUM ;清键号
JKOFF READKEYF ;键未按下跳
BS KEY_NUM,0 ;"1" -> 键号低位
;=================
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
;=================
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -