第1个回答 2010-06-28
CLK BIT P0.0
DAT BIT P0.1
STR BIT P0.2
S1 BIT P2.4
S2 BIT P2.5
S3 BIT P2.6
S4 BIT P2.7
ORG 0000H
MAIN:CLR 20H.0
MOV R0,#0FFH ;11111111
MOV R1,#04H ;00000100
LOOP:MOV C,20H.0
LOOP1: MOV A,R0
RRC A ;01111111-c(0)-
MOV R0,A ;01111111
MOV P2,A ;01111111
MOV A,P2 ;01111101
CPL A ;10000010
ANL A,#0FH ;00000010
JNZ NEXT
DJNZ R1,LOOP1
AJMP MAIN
NEXT:;LCALL DELAY2
MOV 20H.0,C
CLR C
JB ACC.0,K4
JB ACC.1,K3
JB ACC.2,K2
JB ACC.3,K1
K4:MOV A,R1 ;A=4
SUBB A,#01H ;A=3
MOV B,#04H ;B=00000100
MUL AB ;AB=12;=0BH A=0BH B=0
AJMP LOOP0
K3:MOV A,R1 ;A=4
SUBB A,#01H ;A=3
MOV B,#04H ;
MUL AB ;AB=12
ADD A,#01H ;A=0CH B=0
AJMP LOOP0
K2:MOV A,R1
SUBB A,#01H ;
MOV B,#04H
MUL AB
ADD A,#02H
AJMP LOOP0
K1:MOV A,R1
SUBB A,#01H ;
MOV B,#04H
MUL AB
ADD A,#03H
LOOP0:
ADD A,#01H ;(要显示的数)
MOV B,#0AH
DIV AB
SETB S1
SETB S2
CLR S3
SETB S4
ACALL DISP
LCALL DELAY1
MOV A,B
SETB S1
SETB S2
SETB S3
CLR S4
ACALL DISP
LCALL DELAY1
MOV A,#0
SETB S1
SETB S2
SETB S3
SETB S4
ACALL DISP
LCALL DELAY1
DJNZ R1,LOOP
AJMP MAIN
DISP: MOV DPTR,#TABLE
MOVC A,@A+DPTR
CPL A
SEND_ACC:
MOV R2, #8
CLR STR
S_LOOP:
RRC A ;A中的最低位移动到C
MOV DAT, C ;移动到D口
NOP
CLR CLK ;P0.1输出一个脉冲
NOP
NOP
SETB CLK
DJNZ R2, S_LOOP
SETB STR
CLR STR
RET
DELAY1: MOV R7,#50
DIP: MOV R5,#50
DJNZ R5,$
DJNZ R7, DIP
RET
/*DELAY2:MOV R6,#100
DIP2:MOV R4,#100
DJNZ R4,$
DJNZ R6,DIP2
RET*/
TABLE:DB 0F5H,05H,0E3H,67H,17H,76H,0F6H,25H
DB 0F7H,77H
END
显示送4094
proteus图我也有