You are on page 1of 2

;SCAN LINES P0.0 TO P0.

3
;RETURN LINES P0.4 TO P0.7
; LED P1

KEYPORT EQU P0

ORG 0000H
SJMP MAIN

ORG 0030H
MAIN: ;CLR A
; MOV P1, A

MOV KEYPORT, #0F0H ;MAKE RETURN LINE AS INPUT AND SCAN LINES ZERO
MOV A, KEYPORT
ANL A, #0F0H
CJNE A, #0F0H, CHECK1
SJMP MAIN

CHECK1: ACALL DELAY_20MS


MOV A, KEYPORT
ANL A, #0F0H
CJNE A, #0F0H, NEXT
SJMP MAIN

NEXT: MOV KEYPORT, #0FEH


MOV A, KEYPORT
ANL A, #0F0H
CJNE A, #0F0H, SCAN_R0W0

MOV KEYPORT, #0FDH


MOV A, KEYPORT
ANL A, #0F0H
CJNE A, #0F0H, SCAN_R0W1

MOV KEYPORT, #0FBH


MOV A, KEYPORT
ANL A, #0F0H
CJNE A, #0F0H, SCAN_R0W2

MOV KEYPORT, #0F7H


MOV A, KEYPORT
ANL A, #0F0H
CJNE A, #0F0H, SCAN_R0W3
SJMP MAIN

SCAN_R0W0: MOV DPTR, #R0W0


SJMP FIND_KEY

SCAN_R0W1: MOV DPTR, #R0W1


SJMP FIND_KEY

SCAN_R0W2: MOV DPTR, #R0W2


SJMP FIND_KEY

SCAN_R0W3: MOV DPTR, #R0W3


FIND_KEY: RLC A
JNC FOUND_KEY
INC DPTR
SJMP FIND_KEY

FOUND_KEY: CLR A
MOVC A, @A+DPTR
MOV P1, A
LJMP MAIN

DELAY_20MS: MOV R6,#20H


NEXT6: MOV R7,#0FFH
NEXT7: DJNZ R7,NEXT7
DJNZ R6, NEXT6
RET

R0W0: DB 0FFH, 0FEH, 0FDH, 0FCH


R0W1: DB 0FBH, 0FAH, 0F9H, 0F8H
R0W2: DB 0F7H, 0F6H, 0F5H, 0F4H
R0W3: DB 0F3H, 0F2H, 0F1H, 0F0H

END

You might also like