微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于数码管的基础问题,求助!

关于数码管的基础问题,求助!

时间:10-02 整理:3721RD 点击:
              最近在学习数码管的动态显示,可以用一个口控制段码,一个口控制位选端。
类似程序
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
但是这样的显示效果是数字不能变,如何实现在使用动态显示的前提下,让数字动起来?谢谢各位大神!


程序我就写了,说下思路,首先要定义保存显示字符的变量。例如定义Num1~Num8.八个要显示的数,
然后用动态扫描的方法将Num1~Num8分别显示在八个数码管中。那么如果想改变显示的内容。只需要将要显示的内容保存进Num1~Num8就行了。例如每隔一秒对应的内容加1等。那么就能让数字动起来了。

按照您的提示,我准备做一个两位数的计时器,个位从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
可以勉强实现动态显示,但是显示亮度低,还有闪烁的效果,十位一直是零,请问是什么问题?谢谢!

显示亮度低,闪烁是因为你程序里面延时太多了,数码管扫描速度不够快。十位一直是0是因为你CJNE R1,#0AH,LOOP1  这条命令错了,跳错地方了了。跳到LOOP1,个位十位都被清零了。

ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
    ACALL LOOP1
AJMP MAIN
LOOP1:   
    MOV DPTR,#TAB
    MOV R0,#00H
MOV R1,#00H
MOV R3,#00H
LOOP2:
    MOV R4,#00H
    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
INC R3
CJNE R3,#50,LOOP2    ;长延迟
INC R0
MOV R3,#00H
CJNE R0,#0AH,LOOP2
MOV R0,#00H
INC R1
CJNE R1,#0AH,LOOP2      
RET
DELAY:  
MOV R7,#100
DD1:
MOV R6,#50
DD2:   
  DJNZ R6,DD2
  DJNZ R7,DD1
  RET
TAB: DB 03FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
  END
基本功能可以实现了,还有小问题,我去自己修正,谢谢您!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top