📄 scankey.asm
字号:
/*
;-----
;2x7
line0 equ p5.0
line1 equ p5.1
;-----
row0 equ p2.0
row1 equ p2.1
row2 equ p2.2
row3 equ p2.3
row4 equ p2.4
row5 equ p2.5
row6 equ p2.6
;-----
;loopj=2 loopi=7
*/
;**********************************************
;Name :mnkey
;Function:
;Input :loopi,loopj
;Output :aplcode
;Register Used:var1,var2
;***********************************************
mnkey:
call p2input
mov a,#11110000b
or p4,a
mov a,p5
and a,#11111100b
mov p5,a
call delay_10us
mov a,p2
and a,#01111111b
xor a,#01111111b
b0bts0 fz ;judge have key push or not
jmp mnkey80 ;no key push
;-----
b0bts0 keystatflag ;have key push,then delay 30ms~100ms
jmp delaytime
bset keystatflag
mov_ Keychat,#3
jmp mnkey90
;-----
delaytime:
b0bts0 getonekeyflag
jmp longpushjudge
mov a,Keychat
b0bts1 fz
jmp mnkey90
jmp checkpushkey
;-----
longpushjudge:
b0bts1 checktimeflag ;用于长按键的判定
jmp mnkey90
b0bts1 t1sflag
jmp mnkey90
bclr t1sflag
bset keyokflag
bclr checktimeflag
jmp mnkey90
;-----
;check which key push
checkpushkey:
bclr keystatflag
mov a,#7
mov loopi,a ;
;------
;line0
mov a,#11111110b
mov var1,a
scanline:
mov a,var1
and p5,a
call delay_10us
mov a,p2
mov var2,a ;save line value
;----
mov a,#2
mov loopj,a
;----
loopcheck:
rrcm var2
b0bts1 fc
jmp havekeypush
decms loopj
jmp loopcheck
;-----
bset fc
rlcm var1
decms loopi
jmp scanline
ret
;----------
havekeypush:
bset getonekeyflag
mov a,loopi
sub a,#1
mov loopi,a
;----
bclr fc ;aplcode=2x(loopi-1)+loopj
;// rlcm loopj
rlc loopi ;x2
mov aplcode,a
mov a,loopj
add aplcode,a
cmprs a,#9
jmp mnkey70
;-----
bset checktimeflag
mov_ timer1s,#100
bclr t1sflag
ret
;-----
mnkey70:
bset keyokflag
ret
;-----
mnkey80:
bclr keyokflag
bclr getonekeyflag
;-----
mnkey90:
bset line0
bset line1
ret
;*******************************************************
;*******************************************************
;*******************************************************
p2input:
clr p2m ;set p2 is input
mov_ p2ur,#0ffh ;set p2 have pull_up
jmp $+1
jmp $+1
ret
;-----------------
p2output:
mov_ p2m,#0ffh ;set p2 is output
clr p2ur ;clr p2 pull_up
jmp $+1
jmp $+1
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -