單片機(jī)鍵盤程序設(shè)計(jì)小結(jié)
在圖示電路中,用 P1 口接一個(gè) 4 X 4 鍵盤。設(shè): SO-S9 為數(shù)字鍵,鍵值為 0-9 ,用于向單片機(jī)系統(tǒng)輸入數(shù)據(jù); S10-S15 為命令鍵,鍵值為 A-F ,用于對(duì)計(jì)算機(jī)系統(tǒng)送操作命令;每鍵只 1 個(gè)功能;行線接 P1 口的高 4 位;列線接 P1 口的低 4 位。
1)鍵盤掃描子程序
KEY: MOV A, #0F 0H
MOV P1,A
XRL A,P1
JZ KEYR ;無鍵按下返回
ACALL DELAY ;延時(shí)去抖動(dòng)
MOV 30H,P1 ;讀閉合鍵行位置
MOV P1,#0FH ;反轉(zhuǎn)
MOV A,P1 ;讀閉合鍵列位置
ORL 30H,A ;合成鍵盤位置碼
LOOP: MOV A,P1 ;等待鍵釋放
XRL A, #0FH
JNZ LOOP
ACALL DELAY ;延時(shí)去抖動(dòng)
KEYR : RET
2)鍵值轉(zhuǎn)換
鍵盤矩陣中各鍵的位置碼的特點(diǎn)是:對(duì)應(yīng)該鍵行、列的位為“ 0 ” ,其他各位均為“ 1 ” 。例如: S7 鍵的位置碼是: 11010111B = 0D7H ; S12 鍵的位置碼是: 01111110B = 7EH 。將各鍵的位置碼順序排列成鍵值表,用查表法進(jìn)行鍵值轉(zhuǎn)換。
鍵值轉(zhuǎn)換子程序
TRAN: MOV DPTR,#KEYTAB ; DPTR 指向鍵值表
MOV R2,#0 ;鍵值初值送 R2
MOV R3,#10H ;循環(huán)次數(shù)送 R3
LOOPT: MOV A,R2
MOVC A, @A+DPTR ;讀鍵值表
XRL A,30H ;與位置碼比較
JZ KTR ;相等返回,鍵值在 R2 中
INC R2 ;鍵值 +1
DJNZ R3,LOOPT
KTR: RET ;若返回時(shí) R2=10H 為錯(cuò)
KEYTAB: DB 0EEH,0EDH,0EBH,0E7H ;鍵值表
DB 0DEH,0DDH,0DBH,0D7H
DB 0BEH,0BDH,0BBH,0B7H
DB 7EH,7DH,7BH,77H
編輯:admin 最后修改時(shí)間:2019-08-09