?? 鍵盤.asm
字號:
org 0000h
ajmp main
org 0030h
main:
setb p3.3 ;鍵盤掃描輸出點初始化
mov r2,#14h
m1:
clr p3.5 ;74LS164輸出端初始化置"1"
nop
nop
nop
nop
setb p3.5
nop
nop
nop
nop
djnz r2,m1
m2:
mov dptr #tab ;將表頭防入DPTR ICALLKEY;調用鍵盤掃描程序
clr p3.3 ;輸出0電平進行初始化掃描
mov r2,#14h ;共20個按鍵
mov r3,#00h ;鍵值初始化置"0"
m3:
clr p3.5 ;移位時鐘脈沖開始
nop
nop
nop
setb p3.5
nop
nop
setb p3.3
nop
nop ;每移一位,鍵盤接收端檢測一次
key:
jnb p3.4,delay2 ;檢測接收端是否為"0",如是去抖程序
lcall delay2 ;再次調用去抖程序
jnb p3.4,k1 ;如是轉向K1
inc r3
djnz r2,m3 ;否則轉向M3
ljmp m2
k1:
mov a,r3
add a,a ;指令為二個字節
jmp @a+dptr ;轉向鍵值入口地址表
tab:
ajmp opr1
ajmp opr2
ajmp opr3
ajmp opr4
ajmp opr5
ajmp opr6
ajmp opr7
ajmp opr8
ajmp opr9
ajmp opr10
ajmp opr11
ajmp opr12
ajmp opr13
ajmp opr14
ajmp opr15
ajmp opr16
ajmp opr17
ajmp opr18
ajmp opr19
ajmp opr20
opr1:
ljmp m1 ;一鍵輪空
opr2:
lcall display
lcall start
ljmp m1
opr3:
lcall display
lcall putin
ljmp m1
opr4:
jnb psw.5,n0
lcall display
lcall key0
n0:
ljmp m1
opr5:
lcall display
lcall exit
ljmp m1
opr6:
ljmp m1
opr7:
lcall display
lcall enter
ljmp m1
opr8:
jnb psw.5,n1
lcall display
lcall key1
n1:
ljmp m1
opr9:
jnb psw.5,n2
lcall display
lcall key2
n2:
ljmp m1
opr10:
jnb psw.5,n3
lcall display
lcall key3
n3:
ljmp m1
opr11:
ljmp m1
opr12:
lcall display
lcall scanf
ljmp m1
opr13:
jnb psw.5,n4
lcall display
lcall key4
n4:
ljmp m1
opr14:
jnb psw.5,n5
lcall display
lcall key5
n5:
ljmp m1
opr15:
jnb psw.5,n6
lcall display
lcall key6
n6:
ljmp m1
opr16:
ljmp m1
opr17:
lcall display
lcall clean
ljmp m1
opr18:
jnb psw.5,n7
lcall display
lcall key7
n7:
ljmp m1
opr19:
jnb psw.5,n8
lcall display
lcall key8
n8:
ljmp m1
opr20:
jnb psw.5,n9
lcall display
lcall key9
n9:
ljmp m1
delay2: ;去抖延時程序
mov r5,#08h
l7:
mov r6,#0fah
l8:
djnz r6,l8
djnz r5,l7
ret
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -