📄 light_mnkey.asm
字号:
;***********************************************************************************************
;File name :light_mnkey.asm
;Author :guangyu_yang
;Purpose :Training
;Data :2/8/2007
;Dscription :按键子程序
;Version: v1.1
;Hardware&IDE: m2 1.14
;Copyright(C).SONIX TECHNOLOGY CO.,Ltd.
;*************************************************************************************************
mn_key:
call keyin ;键盘扫描程序
call keychk ;去抖处理
call keycvt ;按键结果转换
ret
keyin:
;读取p1.0,p1.1,p1.2的值,存入keyinbuf
; CLR P1M
mov a,P1 ;读扫描结果
and a,#0Eh
mov keyinbuf,a ;将结果存进keyinbuf中
keyin90:
ret
/*****************************************************************
Subroutine: keychk
Description: 去抖处理
Output: keycvtbuf
;****************************************************************/
keychk:
mov a,keyinbuf ;比较扫描结果和上次是否一样
cmprs a,keychkbuf ;
jmp keychk10 ;不一样,则更新keychkbuf
keychk00: ;每个口扫描结果都和上次一样
b0bts1 fkey_in ;是否处于消抖中
jmp keychk90
mov a,keychat ;是否处理完毕
cmprs a,#00h
jmp keychk90 ;没有则退出
keychk01: ;处理完毕,则接下来处理这组按键结果
mov a,keyinbuf ;更新keycvtbuf
b0mov keycvtbuf,a
b0bclr fkey_in
b0bset fkeycvt
jmp keychk90
keychk10: ;有键按下,准备进入消抖处理
mov a,keyinbuf
b0mov keychkbuf,a
b0bset fkey_in
mov a,#keydelaytime ;delay 50ms
b0mov keychat,a
jmp keychk90
keychk90:
ret
/*****************************************************************
Subroutine: keycvt
Description: 将按键结果转换并存储
Output: keyresult
;****************************************************************/
keycvt:
b0bts1 fkeycvt ;是否有按键需要处理
jmp keycvt90 ;没有则退出
b0bclr fkeycvt ;有按键要处理,清按键处理标志位
mov a,keycvtbuf ;比较处理结果和上次是否一样
cmprs a,keyoldbuf
jmp keycvt10 ;不一样,判断是哪个BUTTON并更新keyoldbuf
jmp keycvt90 ;一样则跳出
keycvt10:
mov a,keycvtbuf
cmprs a,#00001100b
jmp keycvt11
mov a,#01h
jmp keycvt20
keycvt11:
cmprs a,#00001010b
jmp keycvt12
mov a,#02h
jmp keycvt20
keycvt12:
cmprs a,#00000110b
jmp keycvt80
mov a,#03h
jmp keycvt20
keycvt20:
mov keyresult,a
mov a,keycvtbuf ;更新keyoldbuf的值
JMP KEYCVT90
KEYCVT80:
b0mov keyoldbuf,a
keycvt90:
ret
dkeychat: ;按键消抖时间处理
b0mov a,keychat
b0bts0 fz
jmp dkeychat90
decms keychat
NOP
jmp dkeychat90
dkeychat90:
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -