汇编更容易读出,
ALE BIT P2.6
ST BIT P2.3
OE BIT P2.7
EOC BIT P3.7
ADD1 BIT P2.2
ADD2 BIT P2.1
ADD3 BIT P2.0
ACC1 BIT P3.0
ACC2 BIT P3.1
ACC3 BIT P3.2
L2 BIT P3.5
L1 BIT P3.4
ORG 0000H
AJMP START
START:JNB L1,LOOP3
LJMP LOOP2
LOOP3:LCALL DELAY1
JNB L1,$
JMP LOOP1
LOOP1:JNB L1,START ;测试IN0
CLR ADD1
CLR ADD2
CLR ADD3
LCALL W1
LCALL DE
JNB L1,LOOP3
JNB L1,START ;测试IN1
CLR ADD1
CLR ADD2
SETB ADD3
LCALL W1
LCALL DE
JNB L1,LOOP3
JNB L1,START ;测试IN2
CLR ADD1
SETB ADD2
CLR ADD3
LCALL W1
LCALL DE
JNB L1,LOOP3
JNB L1,START ;测试IN3
CLR ADD1
SETB ADD2
SETB ADD3
LCALL W1
LCALL DE
JNB L1,LOOP3
JNB L1,START ;测试IN4
SETB ADD1
CLR ADD2
CLR ADD3
LCALL W1
LCALL DE
JNB L1,LOOP3
JNB L1,LOOP4 ;测试IN5
SETB ADD1
CLR ADD2
SETB ADD3
LCALL W1
LCALL DE
JNB L1,LOOP3
JNB L1,LOOP4 ;测试IN6
SETB ADD1
SETB ADD2
CLR ADD3
LCALL W1
LCALL DE
JNB L1,LOOP5
JNB L1,LOOP4 ;测试IN7
SETB ADD1
SETB ADD2
SETB ADD3
LCALL W1
LCALL DE
LJMP LOOP1
LOOP4:LJMP START
LOOP5:LJMP LOOP3
LOOP2:CLR ACC1
CLR ACC2
CLR ACC3
LCALL W1
LJMP START
W1: SETB ALE ;启动0809
CLR ST
CLR OE
SETB ST
CLR ST
JNB EOC,$
SETB OE
LOOP: MOV R1,#20H
SETB ACC1 ;初始设置
SETB ACC2
SETB ACC3
W2: CLR ACC1 ;显示第一位
CLR ACC2
MOV A,P0 ;将p0口和0809的各个数据口连接
MOV B,#51
DIV AB ;将二进制数转化成10进制数
MOV DPTR,#TAB
MOVC A,@A+DPTR
ANL A,#07FH
MOV P1,A
LCALL DELAY
MOV A,#0FFH
MOV P1,A
MOV A,B ;显示第二位
MOV B,#100
DIV AB
MOVC A,@A+DPTR
SETB ACC1
CLR ACC2
MOV P1,A
LCALL DELAY
MOV A,#0FFH
MOV P1,A
MOV A,B ;显示第三位
MOV B,#10
DIV AB
MOVC A,@A+DPTR
CLR ACC1
SETB ACC2
MOV P1,A
LCALL DELAY
MOV A,#0FFH
MOV P1,A
MOV A,B ;显示第四位
MOVC A,@A+DPTR
SETB ACC1
MOV P1,A
LCALL DELAY
DJNZ R1,W2
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DELAY: MOV R5,#29H ;延时1
D1: MOV R6,#1AH
DJNZ R6,$
DJNZ R5,D1
RET
DE: MOV R1,#0FFH ;延时2
D2: MOV R3,#0FH
DJNZ R3,$
DJNZ R1,D2
RET
DELAY1: MOV R6,#20 ;延时10ms子程序
C1: MOV R5,#248
DJNZ R5,$
DJNZ R6,C1
RET
END |