数码管动态扫描显示出现问题请大神帮助一下

2020-11-24 18:18:43 字数 3817 阅读 1619

1楼:匿名用户

你这**图是跟谁学的,谁教你的,数码管的公共端加限流电阻的,这种**电路,不论程序怎么写,数码管都不会正常显示的。要加限流电阻,要加在七段控制端。其实**图不用加限流电阻的。

那p0口要加一个排电阻,你那数码管是共阳的,还是共阴的?

把你的程序发上来看一下。结论,**图有问题,程序没有看到,不知道怎样。

2楼:做而论道

加上消隐部分,试试看。

单片机数码管的动态显示问题,求大神看看**出错了

3楼:烟火夜空

程序的中的tt,并没有起任何作用。删掉的效果一样。

从你程序的高速刷新来看,除了不知道显示了什么鬼,6个数码管应该都是有亮的。这郭派教的程序,为什么他不提供支持,解决问题呢?

问题①,显示混乱:

如果没有猜错,wela=1,dula=1,应该分别是位选锁存器、段选锁存器的输出使能。“使能”表示锁存器将数据输出。而它输出前,p0的数据,却是上一次的值。

于是,上次的段选,输出到了位选上,然后位选修正,跟着修正后的位选,又输出到了这次的段选上,再修正段选,于是一团乱。

问题②,辉度,也就是亮度。

动态显示中,刷新率与辉度成反比。题目程序的高速刷新(直接用while(1)刷新),导致辉度为最低。

问题③,其实也不算问题。6个数码管显示1-6,num1 跟num2 的值,什么时候有区别?根本没有,那为什么不用1个变量呢?

大神来看下这个数码管的显示问题 220

4楼:

延时时间太长,这里介绍一下动态扫描的基本常识,动态扫描是以人眼“视觉暂留”的时间为基准的,所以这个时间一般而言小于40毫秒,因此数码管要想让看起来不抖动,那么一排数码管必须要在这个时间范围内扫描完成,就这个程序而言,延时时间可能太长了,所以显示不正常。调整一下时间就好了。

动态扫描数码管** 显示不全,扫描的时间是1ms。。。应该不是扫描时间的问题,请大神告之....

5楼:珠山龙少

是有几个问题,主要表现在以下:

1、3的段码值错了,应为0x4f

2、没有做消隐处理。

6楼:做而论道

修改一下显示函数:

void display(uint dat)

其中的延时 delay(1); ,其参数应适当加大一些。可自己调整。

7楼:匿名用户

这个可能不是程序问题,你用proteus6.7试试。

我用你的程序在proteus6.7上试了,见下图。我只是把p0改到p2,因为p0口要上拉电阻,p2不用上拉,其它没有改。

关于proteus**数码管,动态扫描时有的数字不能显示问题!

8楼:水知余心

遇到相同的问题,我是这样解决的:

1、在位选和段选打开之前先赋值

2、添加延时

以下是我的程序(显示数字19930309),仅供参考,先截图修改的部分,贴上来的**排版不行,不知道为啥:

#include

#define uint unsigned int#define uchar unsigned charsbit we = p2^7;

sbit du = p2^6;

void delay(uint z)

uchar code leddata=;

void main()

下面是效果图:

9楼:匿名用户

首先你要确定,你的程序是否对,这个可以在相应的地方设置断点来帮助你。

如果程序没太大的问题,可能是你的每个数码管显示的延时时间不够,至少要延时1-2ms,也不能太长,延时时间太长的话显示会出现闪烁。这个问题其实也是软件问题。

还有一点,proteus的**实际上是动画,每秒20-50帧(可设定),因此有时程序正确,显示却有点问题(如你所说的问题),此时可以适当修改动画的帧速:在“系统”的菜单的倒数第三项就是。

10楼:匿名用户

我也遇到和你一摸一样的问题,去掉两个八位锁存器之后就是正常,不知道,你有没有解决这个问题呢

数码管动态显示原理 (如何让数码管的动态扫描慢一点)

11楼:匿名用户

不用中断也可:

1,初始化

2,显示第一位

3,延时(2ms)

4,显示第二位

5,延时(2ms)

6,显示第三位

7,延时(2ms)

8,显示第四位

9,延时(2ms)

10,增加数字(这里设置一个寄存器加1,只有计数到1000显示数值才增加,这样就是4秒显示数值增加1)

11,跳转到第2步

12楼:

我觉得位选不要一起打开。

延时加的太长了,超过人眼视觉停留时间,灯才会闪的。

13楼:匿名用户

扫描在定时中断内执行,秒脉冲可以用软件延时,也可以用定时中断产生,最好用定时中断,尽量少占用cpu的资源。

14楼:匿名用户

//简单的写一个,自己参考一下

#include

#define uchar unsigned char#define uint unsigned intsbit k1 = p1^0;

sbit k2 = p1^1;

sbit k3 = p1^2;

sbit k4 = p1^3;

uchar a,b,c,d;

uint e;

uchar code tab_num = ;//共阳数码管void delay(uchar k) //延时函数

;if(c>9);

if(b>9);

if(a>9);

}void main()}

单片机 数码管动态显示问题,下面程序要不要加个中断程序来刷新扫描,

15楼:匿名用户

如果主程序不“忙”,你把显示程序写在大循环内,显示是连续的没有必要用中断

如果大循环内有一些占用时间很长的语句,肯定会影响显示效果但用不用中断,还要看是显示重要,还是其它语句重要,有些过程是不允许被打断的,这时就 要牺牲显示效果

有时显示程序可以分散在其它程序语句中,扫描显示时每送一位数不是有延时吗,可以用这个延时去干其它事

同理,在程序的其它地方也会有延时语句,可以让显示语句来代替这个延时,不就二者兼顾了吗?

16楼:匿名用户

需要,一般用定时器来扫描显示,否则显示效果很不理想。

51单片机通过动态扫描的方式实现数码管00~99的计数,但在编程的时候出了些问题,求大神指点一下

17楼:

;应该是这部分的问题,

inc r0

cjne r0,#10,star1

mov r0,#0

inc r1

cjne r1,#10,star2;个位从9向十位进位的时候,跳转到star2。显示的时候没有重载r0,所以个位还是显示9

至于你说的个位显示乱码,从你的程序当中没看出来,先把这里修改试试吧inc r0

cjne r0,#10,star1

mov r0,#0

inc r1

cjne r1,#10,star1

mov r1,#0

jmp main