ORG 00H
PORTA EQU 0FFFCH ;A口
PORTB EQU 0FFFDH ;B口
PORTC EQU 0FFFEH ;C口
CTRL EQU 0FFFFH ;控制字地址
SJMP START
ORG 30H
START:
MOV A,P1
ANL A,#00H
ORL A,#00AH ;片选CS3
MOV P1,A
MOV P2,#0FFH
MOV A,#82H ;方式0,PA,PC输出,PB输入
MOV DPTR,#CTRL
MOVX @DPTR,A
LINE_1: MOV A,#0FEH ;扫描第一行,PC0置0,其余置1
MOV DPTR,#PORTC
MOVX @DPTR,A ;输出C口
;LCALL READ_KEY
MOV DPTR,#PORTB
MOVX A,@DPTR ;读入B口
CPL A
JNZ K3
LINE_2: MOV A,#0FDH ;扫描第二行,PC1置0,其余置1
MOV DPTR,#PORTC
MOVX @DPTR,A ;输出C口
MOV DPTR,#PORTB
MOVX A,@DPTR ;读入B口
CPL A
JNZ K7
LINE_3: MOV A,#0FBH ;扫描第三行,PC2置0,其余置1
MOV DPTR,#PORTC
MOVX @DPTR,A ;输出C口
MOV DPTR,#PORTB
MOVX A,@DPTR ;读入B口
CPL A
JNZ KB
LINE_4: MOV A,#0F7H ;扫描第四行,PC3置0,其余置1
MOV DPTR,#PORTC
MOVX @DPTR,A ;输出C口
MOV DPTR,#PORTB
MOVX A,@DPTR ;读入B口
CPL A
JNZ KF1
LL: LJMP START
KF1: LJMP KF
K3: CJNE A,#80H,K2
MOV R0,#3
LCALL DIS
LJMP LL
K2: CJNE A,#40H,K1
MOV R0,#2
LCALL DIS
LJMP LL
K1: CJNE A,#20H,K0
MOV R0,#1
LCALL DIS
LJMP LL
K0: CJNE A,#10H,LINE_2
MOV R0,#0
LCALL DIS
LJMP LL
;----------------------------------
K7: CJNE A,#80H,K6
MOV R0,#7
LCALL DIS
LJMP LL
K6: CJNE A,#40H,K5
MOV R0,#6
LCALL DIS
LJMP LL
K5: CJNE A,#20H,K4
MOV R0,#5
LCALL DIS
LJMP LL
K4: CJNE A,#10H,LINE_3
MOV R0,#4
LCALL DIS
LJMP LL
;------------------------------------
KB: CJNE A,#80H,KA
MOV R0,#11
LCALL DIS
LJMP LL
KA: CJNE A,#40H,K9
MOV R0,#10
LCALL DIS
LJMP LL
K9: CJNE A,#20H,K8
MOV R0,#9
LCALL DIS
LJMP LL
K8: CJNE A,#10H,RE1
MOV R0,#8
LCALL DIS
LJMP LL
RE1: LJMP LINE_4
;------------------------------------
KF: CJNE A,#80H,KE
MOV R0,#15
LCALL DIS
LJMP LL
KE: CJNE A,#40H,KD
MOV R0,#14
LCALL DIS
LJMP LL
KD: CJNE A,#20H,KC
MOV R0,#13
LCALL DIS
LJMP LL
KC: CJNE A,#10H,RE2
MOV R0,#12
LCALL DIS
RE2: LJMP LL
;-------------------------------------
DIS: MOV DPTR,#TAB ;
MOV A,R0 ;
MOVC A,@A+DPTR ;
MOV P2,A ;
;INC R0 ;
CALL DELAY
;=====
CALL DELAY
LJMP START
DELAY: MOV R6,#0FFH
MOV R7,#0FFH
DELAYLOOP:
DJNZ R6,DELAYLOOP
DJNZ R7,DELAYLOOP
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
用得芯片是8255,还有89c51rc。谢谢大家
|