单片机初学,数码管动态扫描,显示问题

2021-03-11 07:29:37 字数 4368 阅读 4564

1楼:

单片机做数码抄管和led一类的扫描时,要注意扫描的频率,循环一周的时间不要超过20ms,也不要太快扫描,否则会使得数码管出现闪烁的情况,另外在每组数码管的切换前,需要将全部的控制公共端先关闭,然后再送数码管要显示的数据,然后再开起对应的控制端,然后再延时。建议循环一周的时间放在10ms左右。

另外,如果除了数码管显示外,还有其他控制要做的,建议不要用delay一类的循环来延时,这样你的延时时间不好控制,扫描时间不均匀的同样会有闪烁的问题,建议采用单片机的定时器来控制扫描时间。

2楼:匿名用户

dula=1;

p0=table[shi];

dula=0;

p0=0xff;

wela=1;

p0=0xfe;

wela=0;

p0=0xff;

//delayms(1); //有延时和没有为什么不一样,有延时时显示正常,没有时就会显专示8.8.隐隐约约有数字跳动

延时要放属在p0=0xff;之前

动态显示是显示1~5ms,关显示再下一位

3楼:匿名用户

动态显示的原理,就是一位一位的显示,需要刷新频率的

关于用单片机实现数码管动态扫描显示

4楼:匿名用户

那是因为

抄你第一个扫袭描的时间比较长,原因bai是你第du一个的扫描时间zhi=显示函数中的延时

dao+其他程序循环的时间;

解决的方法有两个:

一、除了在显示函数里面显示外,其他地方都关闭显示,也就是说,在返回显示函数的时候,关闭所以的显示;

二、就是在定时中断里面显示

5楼:匿名用户

单独做个显示函数,其他地方只是调用。还有扫描时间延长到20ms ,其他中断频率是不是太高了!数码管显示扫描最好用定时器控制,

6楼:匿名用户

如果是数码bai管动态显示,du那么就是刷新频率造zhi成的。dao

可以调整一下频版率。也就是每个笔段的权显示(点亮)时长。

这个是比较繁琐的。

频率太慢,看起来会有闪烁的感觉,或者不能形成有效数字,只是单个显示的循环了。

如果太快就会造成显示为全亮(但亮度不是很高),但是有个别亮度会大一些。那么亮度大的就一定是保持时间长的。

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

7楼:烟火夜空

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

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

问题①,显示混乱:

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

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

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

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

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

单片机c语言编程,数码管动态显示,对动态扫描显示有了解的进

8楼:做而论道

这个延时是不是同时将p0及p2的状态“定格”住了?--是。

51单片机数码管动态显示12345,我为了让它扫描更快,去掉了延时,结果没有达到预期效果,请问为什么会这样

9楼:匿名用户

去掉延时估计就该闪了,连数字都显示不清楚。你给他电,他还没亮起来呢你就断电了

10楼:匿名用户

一方面动态扫描显示7段led是利用人眼的视觉暂留原理来实现的,如果你不延时,那么暂留也就留不住了,所以要让人眼捕捉到显示的led,必须有足够的延时时间,另一方面要保证led显示的亮度,也必须有足够的时间让led将电压建立起来,毕竟,从0到1实际上不是瞬时达到的,有一个渐变过程。

11楼:静雨月轩

动态显示数码管,延时是必须的哦,延时个5到10ms就够了,而且要想显示效果好,最好还是清屏一下,

单片机数码管动态扫描显示,时间这样设置才能更好的显示一连串数在屏幕上,有没有数码规律?、?

12楼:匿名用户

要根据数码来管的数量

源来定的。

但是,一般bai来说,每一位数码管需要du一定的显示时间zhi,也dao就是说,你输出一位数码管的数据点亮这个数码管之后,需要一定的时间才能熄灭它并点亮下一个数码管,而不能一输出就马上熄灭它,否则亮度会非常低。

另外,全部数码管全部扫描一遍的总时间最好不要超过25ms,否则闪烁会比较严重,通常总的扫描频率要在60hz以上,才看不到闪烁。

比如说你要扫描8位数码管,那么可以让每一位数码管点亮1ms,这样全部显示一遍就大约是8ms或稍微多一点点(算上显示处理的指令执行时间),此时的总扫描频率就是125hz左右,这样的话,即能保证亮度,又看不到闪烁。

13楼:心角慧

一般间隔10ms就可以了。

单片机动态扫描数码管问题?

14楼:匿名用户

电路问题不大,不需要在集电极加上拉电阻。

15楼:

用proteus**和抄实际电路有区别的,数码管在软件里是二极管性质,在有电位差情况下才能导通,而三极管导通需要集电极和发射极之间有电位差,在**开始时,二极管和三极管都是截止的,二极管因为三极管没有导通而无法开通,三极管因为二极管没有导通而建立不了集电极电位,或者说,三极管的集电极接数码管的情况软件会认为数码管在关闭状态下没有电压加到三极管的集电极,在给基极加高电位时,三极管和数码管出现了问题,三极管需要数码管导通后提供电流才能开通,数码管需要三极管导通后提供电流通路,这就产生了矛盾,导致谁也没办法工作。在实际电路中不存在这样的问题,就没有必要加上拉电阻了。根本原因是软件中认为数码管是数字开关,非开即关,而现实中数码管的开通是电流由小到大慢慢建立的。

看不到你的display()函数,但是也不一定是你程序的问题,proteus**真的很弱智,经常会出现各种莫名其妙的问题,像这种片选接在一起的,很容易出问题,而且是很弱智的问题,如果先学单片机的话,劝你还是买块实验板,没多少钱的,

16楼:胖大海君

嘿来嘿 俺来帮你解决问题

1、8050的这自种接法是正确bai的,需要在集du电极加上拉电阻,以增zhi加单片机对dao数码管的驱动电流。

2 、你设计的电路存在不合理的地方,需要改正。

即把左边的串行变并行的接口芯片 由2个减为1个 同时为2组数码管提供要显示的段形

而要把三极管驱动由4个增加到8个 即每个数码管的亮灭是单独控制的。

这样就不会出现你说的错误了。

3 display()函数一般是不会出错的。

呵呵 满意就给加分吧

关于单片机数码管动态扫描显示。

17楼:匿名用户

只要有程序存储器的单片机即可

18楼:劳笑捷锟

你的延时函数时间太短了

下面说工作流程

第一个管子的位选打开,选中第一个管,关位选,段选打开,送数据,关段选延时delay(5)

(注意这里,人的眼睛有视觉暂留,大约0.1-0.4秒,如果你延时很短,这两个数码管分先后,第一个亮,然后第二个亮,循环往复,但是你的眼睛分辨不出来,就感觉它俩是一直亮,你可以把延时加的长点,慢慢试试,你就知道其中的含义了)

第二个管子的位选打开,选中第二个管,关位选,段选打开,送数据,关段选

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

19楼:匿名用户

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

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

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

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

20楼:匿名用户

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

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

1楼 匿名用户 你这 图是跟谁学的,谁教你的,数码管的公共端加限流电阻的,这种 电路,不论程序怎么写,数码管都不会正常显示的。要加限流电阻,要加在七段控制端。其实 图不用加限流电阻的。 那p0口要加一个排电阻,你那数码管是共阳的,还是共阴的? 把你的程序发上来看一下。结论, 图有问题,程序没有看到,...

为什么单片机数码管的动态显示要有循环次数为

1楼 匿名用户 程序呢,估计是有8个数码管 一次要扫完8个数码管,若对这8 个数码管反复进行数十次上百次扫描,就其可使持续显示数s,若无限循环,则一直维持显示,但实际在扫描的间隔,中间还有大量的闲置时间,可以进行其它工作,例如获得新的计算结果,来更新显示内容 2楼 匿名用户 为什么单片机数码管的动态...