单片机矩阵键盘汇编语言程序
51单片机4*4矩阵键盘汇编语言程序示例(原创)
,欢迎咨询
线反转法
ORG 00H
LJMP MAIN
MAIN:MOV R0,#00H
…
MOV R1,#00H
MOV R2,#00H
MOV R3,#00H
MOV A,#00H
AJMP KEYSCAN
KEYSCAN:MOV P3,#0F0H
MOV A,P3
ANL A,#0F0H
/
XRL A,#0F0H
JNZ DELAY
DELAY:MOV R2,#05H
LOOP1:MOV R3,#0FAH
LOOP2:DJNZ R3,LOOP2
DJNZ R2,LOOP1
MOV A,P3
ANL A,#0F0H
$
MOV R0,A
XRL A,#0F0H
JNZ KEYSCAN1
LJMP KEYSCAN
KEYSCAN1:MOV A,#00H MOV P3,#0FH
MOV A,P3
ANL A,#0FH
】
MOV R1,A
XRL A,#0FH
JNZ NUM
LJMP KEYSCAN
NUM:MOV A,R0
MOV B,R1
ORL A,B
MOV DPTR,#TAB
`
SJMP DISP0
DISP0:CJNE A,#0EEH,DISP1 MOV A,#00H
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
LJMP KEYSCAN
DISP1:CJNE A,#0EDH,DISP2 `
MOV A,#01H
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
LJMP KEYSCAN
DISP2:CJNE A,#0EBH,DISP3 MOV A,#02H
MOVC A,@A+DPTR
】
MOV P0,A
LCALL DELAY1
LJMP KEYSCAN
DISP3:CJNE A,#0E7H,DISP4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
'
LJMP KEYSCAN
DISP4:CJNE A,#0DEH,DISP5 MOV A,#04H
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
LJMP KEYSCAN
DISP5:CJNE A,#0DDH,DISP6 }
MOV A,#05H
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
LJMP KEYSCAN
DISP6:CJNE A,#0DBH,DISP7 MOV A,#06H
MOVC A,@A+DPTR
:
MOV P0,A
LCALL DELAY1
LJMP KEYSCAN
DISP7:CJNE A,#0D7H,DISP8 MOV A,#07H
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
~
LJMP KEYSCAN
DISP8:CJNE A,#0BEH,DISP9 MOV A,#08H
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
LJMP KEYSCAN
DISP9:CJNE A,#0BDH,DISPA ?
MOV A,#09H
MOVC A,@A+DPTR
MOV P0,A
LJMP KEYSCAN
DISPA:CJNE A,#0BBH,DISPB MOV A,#0AH
MOVC A,@A+DPTR
~
MOV P0,A
LCALL DELAY1
LJMP KEYSCAN
DISPB:CJNE A,#0B7H,DISPC MOV A,#0BH
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
`
LJMP KEYSCAN
DISPC:CJNE A,#07EH,DISPD MOV A,#0CH
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
LJMP KEYSCAN
DISPD:CJNE A,#07DH,DISPE >
MOV A,#0DH
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
LJMP KEYSCAN
DISPE:CJNE A,#07BH,DISPF MOV A,#0EH
MOVC A,@A+DPTR
|
MOV P0,A
LCALL DELAY1
LJMP KEYSCAN
DISPF:CJNE A,#077H,KEY MOV A,#0FH
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
`
LJMP KEYSCAN
DELAY1:MOV R2,#0FH
LOOP10:MOV R3,#0FAH
LOOP20:DJNZ R3,LOOP20
DJNZ R2,LOOP10
RET
KEY:LJMP MAIN
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H :
END
行扫描法
ORG 00H
LJMP MAIN
·
MAIN:
LCALL KEYJUDGE
LCALL KEYSCAN
LCALL DISP
LJMP MAIN
KEYJUDGE:
MOV P3,#0F0H
MOV A,P3
<
XRL A,#0F0H
JNZ DELAY
LJMP MAIN
DELAY:MOV R4,#08H
LOOP1:MOV R5,#0FAH
LOOP2:DJNZ R5,LOOP2
DJNZ R4,LOOP1
MOV P3,#0F0H
:
MOV A,P3
XRL A,#0F0H
JZ MAIN
RET
KEYSCAN:
MOV R0,#00H
MOV R1,#00H
MOV R2,#0FEH
{
MOV R3,#04H
MOV P3,R2
KEY0:JB ,KEY1
MOV R1,#00H
LJMP NUM
KEY1:
JB ,KEY2
`
MOV R1,#04H
LJMP NUM
KEY2:
JB ,KEY3
MOV R1,#08H
LJMP NUM
KEY3:
JB ,NEXT
$
MOV R1,#0CH
LJMP NUM
NEXT:
INC R0
MOV A,R2
RL A
MOV R2,A
DJNZ R3,KEY
LJMP NUM
NUM:
MOV A,R0
ADD A,R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV R6,A
RET
DISP:
MOV P0,R6
LCALL DELAY1
RET
DELAY1:
MOV R4,#0FH
LOOP10:MOV R5,#0FAH
LOOP20:DJNZ R5,LOOP20
DJNZ R4,LOOP10
RET
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H