以下代码不是采用中断方式,并且使用了74HC573,给你参考。
SEG_C BIT P1.4 ;/段控制位定义
BIT_C BIT P1.5 ;/位控制位定义
DISPLAY_BUFF EQU 30H;显示缓存30H-37H,8字节
COUN_WEI EQU 3CH ;/显示位存储区
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV SP,#60H
MOV COUN_WEI,#0
;初始化显示缓存
MOV DISPLAY_BUFF,#4
MOV DISPLAY_BUFF+1,#2
MOV DISPLAY_BUFF+2,#6
MOV DISPLAY_BUFF+3,#7
MOV DISPLAY_BUFF+4,#2
MOV DISPLAY_BUFF+5,#1
MOV DISPLAY_BUFF+6,#8
MOV DISPLAY_BUFF+7,#5
LOOP: CALL DISPLAY_0
JMP LOOP
;/显示DISPLAY_BUFF(8字节)中的数据
DISPLAY_0:
CLR SEG_C ;/关显示
CLR BIT_C ;[]
MOV P0,#0ffh;[]
SETB BIT_C
NOP
CLR BIT_C
MOV A,COUN_WEI ;//段码给出
ADD A,#DISPLAY_BUFF
MOV R0,A
MOV A,@R0
MOV DPTR,#SEG_TAB
MOVC A,@A+DPTR
MOV P0,A
SETB SEG_C
NOP
CLR SEG_C
MOV A,COUN_WEI ;/位码给出
MOV DPTR,#WEI_TAB
MOVC A,@A+DPTR
MOV P0,A
SETB BIT_C
nop
CLR BIT_C
CALL DELAY_1MS;【先clr bti—C再做延时】
INC COUN_WEI
MOV A,COUN_WEI
CJNE A,#8,DISPLAY_0
MOV COUN_WEI,#0
RET
DELAY_1MS:
MOV R1,#35;50[防止闪烁]
D1:
MOV R2,#100
DJNZ R2,$
DJNZ R1,D1
RET
SEG_TAB: DB 03fh,06H,05BH,04FH,66H,06DH,07DH,07H,07FH,06FH;共阴数码管段码[0~9]
WEI_TAB: DB 0FeH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH;
END