汇编

核心提示根据你的思路做了如下修改。已经实现你所需的切换显示。但其实还有更好的方法来实现,代码不用那么长。; SEG_C BIT P2.7;/段控制位定义; BIT_C BIT P2.6;/位控制位定义SEG_C BIT P1.4;/段控

根据你的思路做了如下修改。已经实现你所需的切换显示。但其实还有更好的方法来实现,代码不用那么长。

; SEG_C BIT P2.7 ;/段控制位定义

; BIT_C BIT P2.6 ;/位控制位定义

SEG_C BIT P1.4 ;/段控制位定义

BIT_C BIT P1.5 ;/位控制位定义

COUN_WEI EQU 3CH ;/显示位存储区

COUN_DISP EQU 3dh ;显示次数,显示指定次数后,切换显示

CN_COUN_DISP EQU 10;显示次数

ORG 0000H

AJMP MAIN

MAIN: MOV SP,#60H

MOV COUN_WEI,#0

MOV R0,#1 ;/从1开始显示

MOV COUN_DISP,#20 ;显示次数

LOOP: CALL DISPLAY_0

JMP LOOP

;/第一组显示数据给出 87654321

DISPLAY_0:

CLR SEG_C ;/关显示

CLR BIT_C ;[]

MOV P0,#0ffh;[]

SETB BIT_C

NOP

CLR BIT_C

; MOV R0,#0 ;/段码给出不能在循环中给初值

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 R0

INC COUN_WEI

MOV A,COUN_WEI

CJNE A,#8,DISPLAY_0

MOV COUN_WEI,#0

MOV R0,#1

DJNZ COUN_DISP,DISPLAY_0

MOV COUN_DISP,#CN_COUN_DISP

MOV R0,#8

;/第二组显示数据给出 12345678

DISPLAY_1:

CLR SEG_C

CLR BIT_C

MOV P0,#0ffh;[]

SETB BIT_C

NOP

CLR BIT_C

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;[]

DEC R0

MOV A,COUN_WEI

CJNE A,#8,DISPLAY_1

MOV COUN_WEI,#0

MOV R0,#8

DJNZ COUN_DISP,DISPLAY_1

MOV COUN_DISP,#CN_COUN_DISP

MOV R0,#1

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 07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FeH;f7h改feh

END

 
友情链接
鄂ICP备19019357号-22