矩阵键盘线反转法
ISIS 仿真图
汇编源程序代码
ORG 0000H LJMP MAIN ORG 0100H
MAIN: ACALL KEYSCAN ; 调用子函数
MOV A,30H ; 从30H 单元取相应的数值 MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P2,A ACALL DELAY SJMP MAIN
KEYSCAN: MOV P3,#0FH ; 线反转法 MOV A,P3 ANL A,#0FH MOV B,A MOV P3,#0F0H MOV A,P3 ANL A,#0F0H ORL A,B
CJNE A,#0FFH,KEYPRO RET
KEYPRO: MOV B,A ;键值处理程序 MOV DPTR,#KEYVALUE MOV R3,#0FFH KEY1: INC R3 MOV A,R3
MOVC A,@A+DPTR CJNE A,B,KEY2 MOV A,R3 MOV 30H,A RET
KEY2: CJNE A,#00H,KEY1 ; 扫描键值结束标志 RET
DELAY: MOV R0,#20 ; 延时程序 NEXT1: MOV R1,#20 NEXT2: MOV R2,#248 DJNZ R2,$ DJNZ R1,NEXT2 DJNZ R0,NEXT1 RET
KEYVALUE: DB 77H,7BH,7DH,7EH ; 键值 DB 0B7H,0BBH,0BDH,0BEH DB 0D7H,0DBH,0DDH,0DEH DB 0E7H,0EBH,0EDH,0EEH DB 00H
TABLE: DB 0C0H,0F9H,0A4H,0B0H ;共阳数码管编码值 DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H DB 0C6H,0A1H,86H,8EH END
矩阵键盘线反转法
ISIS 仿真图
汇编源程序代码
ORG 0000H LJMP MAIN ORG 0100H
MAIN: ACALL KEYSCAN ; 调用子函数
MOV A,30H ; 从30H 单元取相应的数值 MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P2,A ACALL DELAY SJMP MAIN
KEYSCAN: MOV P3,#0FH ; 线反转法 MOV A,P3 ANL A,#0FH MOV B,A MOV P3,#0F0H MOV A,P3 ANL A,#0F0H ORL A,B
CJNE A,#0FFH,KEYPRO RET
KEYPRO: MOV B,A ;键值处理程序 MOV DPTR,#KEYVALUE MOV R3,#0FFH KEY1: INC R3 MOV A,R3
MOVC A,@A+DPTR CJNE A,B,KEY2 MOV A,R3 MOV 30H,A RET
KEY2: CJNE A,#00H,KEY1 ; 扫描键值结束标志 RET
DELAY: MOV R0,#20 ; 延时程序 NEXT1: MOV R1,#20 NEXT2: MOV R2,#248 DJNZ R2,$ DJNZ R1,NEXT2 DJNZ R0,NEXT1 RET
KEYVALUE: DB 77H,7BH,7DH,7EH ; 键值 DB 0B7H,0BBH,0BDH,0BEH DB 0D7H,0DBH,0DDH,0DEH DB 0E7H,0EBH,0EDH,0EEH DB 00H
TABLE: DB 0C0H,0F9H,0A4H,0B0H ;共阳数码管编码值 DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H DB 0C6H,0A1H,86H,8EH END