最近在学习数码管的动态显示,可以用一个口控制段码,一个口控制位选端。
类似程序
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
ACALL LOOP1
AJMP MAIN
LOOP1:
MOV DPTR,#TAB
MOV R0,#00H
MOV R1,#00H
LOOP2:
MOV P1,R0 ;P0显示位址
MOV A,R1
MOVC A,@A+DPTR
MOV P0,A ;P1显示段码
ACALL DELAY
MOV P0,#00H
INC R0
INC R1
CJNE R0,#08,LOOP2
RET
DELAY: MOV R6,#5
DD1: MOV R7,#10
DD2: DJNZ R7,DD2
DJNZ R6,DD1
RET
TAB: DB 03FH,06H,5BH,4FH,66H,6DH,7DH,07H
END
但是这样的显示效果是数字不能变,如何实现在使用动态显示的前提下,让数字动起来?谢谢各位大神!!!
-
按照您的提示,我准备做一个两位数的计时器,个位从0到9,再进位到十位,程序如下
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
ACALL LOOP1
AJMP MAIN
LOOP1:
MOV DPTR,#TAB
MOV R0,#00H
MOV R1,#00H
LOOP2:
MOV R4,#01H
MOV P1,R4 ;P1显示位址
MOV A,R0
MOVC A,@A+DPTR
MOV P0,A ;P0显示段码
ACALL DELAY ;短延迟
MOV P0,#00H
LOOP3:
INC R4
MOV P1,R4
MOV A,R1
MOVC A,@A+DPTR
MOV P0,A
ACALL DELAY
MOV P0,#00H
ACALL DEL ;长延迟
INC R0
CJNE R0,#0AH,LOOP2
INC R1
CJNE R1,#0AH,LOOP1
RET
DELAY:
MOV R6,#5
DD1:
MOV R7,#10
DD2:
DJNZ R7,DD2
DJNZ R6,DD1
RET
DEL:
MOV R7,#100
D1:
MOV R6,#100
D2:
MOV R5,#100
D3:
DJNZ R5,D3
DJNZ R6,D2
DJNZ R7,D1
RET
TAB: DB 03FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
可以勉强实现动态显示,但是显示亮度低,还有闪烁的效果,十位一直是零,请问是什么问题?谢谢!
一周热门 更多>