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