2013年9月21日 星期六

8051 keyScan (asm)

;*******************************************************
; KeyScan
;
;CPU: STC90C54RD+
;XTAL: 11.0592MHz
;PCB: HC6800E
;File: KEYSCAN.asm
;Date: 12_July_2011
;*******************************************************
;
DQBUF EQU 41H

START           EQU     100H

                ORG     0H
                AJMP START


;**************************************
                ORG     START
ACALL CLR_RAM
MOV P1,#0FFH ;Input Mode
MOV SP,#15
;
;**************************************
GET_DA:
CLR PSW.5 ;Reset the press key flag
S2A:
ACALL KSCAN
MOV A,20H
CJNE A,#0FH,S2B
AJMP GET_DA ;Return
S2B:
JNB PSW.5,S3C
MOV DQBUF,20H
ACALL DELAY20
S3C:
CLR PSW.5
ACALL KSCAN
JB PSW.5,S3C
ACALL DELAY20
MOV A,DQBUF
AJMP GET_DA
;
;***************************************
KSCAN:
JB PSW.5,S3
MOV R1,#07FH
MOV R4,#04H
MOV A,R1
MOV R2,#00H
COLLUM:
MOV P1,A
MOV R3,#03H
MOV A,P1
JUG2:
ANL A,#00001111B
MOV 20H,A
;
JUG:
JB ACC.1,NT1
MOV DQBUF,R2
SETB PSW.5
RET
NT1:
INC R2
RR A
DJNZ R3,JUG
MOV A,R1
RR A
MOV R1,A
DJNZ R4,COLLUM
RET
S3:
RET
;
;*************************************
CLR_RAM:
MOV R0,#10H
CLN:
MOV @R0,#0FFH
INC R0
CJNE R0,#0H,CLN
RET
;**************************************
DELAY20: ;Delay20mS
MOV R6,#179
DEL20A:
MOV R7,#50
DJNZ R7,$
DJNZ R6,DEL20A
RET
;**************************************

                END

沒有留言:

張貼留言