(1)键盘扫描子程序
KEY: MOV A, #0F 0H
MOV P1,A
XRL A,P1
JZ KEYR ;无键按下返回
ACALL DELAY ;延时去抖动
MOV 30H,P1 ;读闭合键行位置
MOV P1,#0FH ;反转
MOV A,P1 ;读闭合键列位置
ORL 30H,A ;合成键盘位置码
LOOP: MOV A,P1 ;等待键释放
XRL A, #0FH
JNZ LOOP
ACALL DELAY ;延时去抖动
KEYR : RET
(2)键值转换
键盘矩阵中各键的位置码的特点是:对应该键行、列的位为“ 0 ” ,其他各位均为“ 1 ” 。例如: S7 键的位置码是: 11010111B = 0D7H ; S12 键的位置码是: 01111110B = 7EH 。将各键的位置码顺序排列成键值表,用查表法进行键值转换。
键值转换子程序
TRAN: MOV DPTR,#KEYTAB ; DPTR 指向键值表
MOV R2,#0 ;键值初值送 R2
MOV R3,#10H ;循环次数送 R3
LOOPT: MOV A,R2
MOVC A, @A+DPTR ;读键值表
XRL A,30H ;与位置码比较
JZ KTR ;相等返回,键值在 R2 中
INC R2 ;键值 +1
DJNZ R3,LOOPT
KTR: RET ;若返回时 R2=10H 为错
KEYTAB: DB 0EEH,0EDH,0EBH,0E7H ;键值表
DB 0DEH,0DDH,0DBH,0D7H
DB 0BEH,0BDH,0BBH,0B7H
DB 7EH,7DH,7BH,77H