废话不多说,直接上代码:
ORG 0000H
LJMP MAIN
MAIN:
MOV P0,#0FFH ;初始化P0、P1
MOV P1,#0FFH
KEYDOWN: ;延时,消除按键抖动
MOV P1,#0F0H
LCALL DELAY
MOV A,P1
CJNE A,#0F0H,KEYSCAN
LJMP KEYDOWN
KEYSCAN: ;判断按键所在列
MOV A,P1
CJNE A,#70H,N1
MOV R4,#00H
LJMP NEXT
N1: CJNE A,#0B0H,N2
MOV R4,#04H
LJMP NEXT
N2: CJNE A,#0D0H,N3
MOV R4,#08H
LJMP NEXT
N3: CJNE A,#0E0H,NEXT
MOV R4,#0CH
LJMP NEXT
NEXT: ;判断按键所在行
MOV P1,#00FH
MOV A,P1
CJNE A,#07H,N4
MOV R3,#03H
LJMP NEXT
N4: CJNE A,#0BH,N5
MOV R3,#02H
LJMP NEXT
N5: CJNE A,#0DH,N6
MOV R3,#01H
LJMP NEXT
N6: CJNE A,#0EH,DISPLAY
MOV R3,#00H
LJMP DISPLAY
DISPLAY: ;确定按键值并输出
MOV A,R4
ADD A,R3
MOV DPTR,#LEDTAB
MOVC A,@A+DPTR
MOV P0,A
LJMP KEYDOWN
DELAY: ;延时函数
MOV R6,#25
D2: MOV R7,#100
DJNZ R7,$
DJNZ R6,D2
RET
LEDTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
下面是proteus仿真图