ORG 0000H
MAIN: MOV P2,#0F0H ;4×4矩阵连接P2
MOV A,P2 ;进行列扫描
CJNE A,#0F0H,NEXT1 ;判断是否有按键按下
AJMP MAIN
NEXT1: MOV R0,A ;列值赋给A
MOV P2,#0FH
MOV A,P2 ;进行行扫描
CJNE A,#0FH,NEXT2 ;判断是否有按键按下
AJMP MAIN
NEXT2: ACALL DELY ;延时去抖,再次读P2口赋给A
MOV A,P2
CJNE A,#0FH,NEXT3 ;判断是否有按键按下
AJMP MAIN
NEXT3: ORL A,R0 ;行列值求或得到按键值
MOV R0,A
MOV DPTR,#TABLE1 ;指向键值表
MOV R1,#0
MOV 30H,R0
COOR: MOV A,R1
MOVC A,@A+DPTR
CJNE A,30H,NEXT4 ;按键值与按键表中一一对应
AJMP NEXT5
NEXT4: INC R1 ;计数判断具体按键对应的位置
AJMP COOR
NEXT5: MOV A,R1
MOV DPTR,#TABLE2 ;指向数码管的显示表
MOVC A,@A+DPTR
MOV P0,A ;将值送入P0口
AJMP MAIN
DELY: MOV R7,#50
DLY0: MOV R6,#100 ;延时10ms
DLY1: DJNZ R6,DLY1
DJNZ R7,DLY0
RET
TABLE1: DB 0EEH,0DEH,0BEH,7EH
DB 0EDH,0DDH,0BDH,7DH
DB 0EBH,0DBH,0BBH,7BH
DB 0E7H,0D7H,0B7H,77H
TABLE2: DB 0C0H,0F9H,0A4H,0B0H
DB 99H,92H,82H,0F8H
DB 80H,90H,88H,83H
DB 0C6H,0A1H,86H,8EH
END
4*4按键就是扫描式程序。但是要加入延时去抖。