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

2020-11-24 18:18:43 字数 4860 阅读 3631

1楼:匿名用户

程序呢,估计是有8个数码管

一次要扫完8个数码管,若对这8 个数码管反复进行数十次上百次扫描,就其可使持续显示数s,若无限循环,则一直维持显示,但实际在扫描的间隔,中间还有大量的闲置时间,可以进行其它工作,例如获得新的计算结果,来更新显示内容

2楼:匿名用户

为什么单片机数码管的动态显示要有循环次数为8?这问题怎么回答?猜吧。

当使用串行接口器件(比如74hc595)驱动数码管时,输出数据只能一位一位的串行输出,为了送出一个完整字节数据,就得循环送8次,所以单片机数码管的动态显示要有循环次数为8的循环。

3楼:匿名用户

不一定吧,应该是不断扫描无条件循环啊

单片机八个数码管动态显示0~8,为什么刷新太快显示不了?

4楼:倚天逍遥

延时程序这样改写

void delayms(uint x)//x给20到40之间,试一下

5楼:匿名用户

显示了,你看不见

每一位字要点亮4~10ms,人眼才能看见

单片机上8个数码管这样是让他循环显示,怎样让它静态显示呢?

6楼:匿名用户

你没上电路图,但通过软件可以看出硬件设计本身就是动态显示方式,任何时刻只能显示一个数码管。如果要改为静态显示,必须更改电路,使得每个数码管的段选信号独立,位选可以根据数码管特征恒定接高或接地,这样才能保证同时显示所有的数码管。

7楼:烟火夜空

/**52单片机,12mhz晶振,8位共阴数码管,p0口段选,p2口低电平位选,p20最高位,p27最低位**/

#include

#define uchar unsigned char

#define uint unsigned int

#define true 1

#define false 0

#define th0 0xfe

#define tl0 0x0c //500us at 12mhz(定时器工作模式1 状态)

#define distimeat500uscount 5 //单'位'数码管显示时间,数码管刷新频率f=1/(4t),其中 t 为单'位'数码管显示时间,单位 s,频率f 单位 hz

#define seg_num 8 //数码管位数

uchar code loveyoulist[seg_num]=;//love-you

#define seg_data p0 //数码管段驱动接口

#define seg_en p2 //数码管位驱动接口

#define seg_alloff seg_en=0xff //关闭所有数码管(位驱动)

bit displayflag; //显示标志位

void timer0() interrupt 1 //定时器0中断函数

void systeminit() //系统初始化函数

void display() //显示函数

void main() //主函数}}

很多设定好的参数可以在 宏定义的时候修改,包括数码管位数、数码管刷新率等,如果lz的晶振不是12mhz,那么只需要将宏定义中 th0,tl0的初值修改正常即可,如24mhz,就改成fc18,总体效果我没实物测试,看lz造化了。

8楼:匿名用户

多数码管显示有两种方法:静态显示和动态显示。

你这只是一个一个显示。动态是你这种方式快速的循环,每一个只亮一会,当速度很快后人眼就看不出来了。

静态显示是需要硬件电路的,需要给你个数码管配一个锁存器,这样就不用单片机扫了,把需要显示的数存入锁存器就不用管了,数码管是一直亮的。

单片机,求程序?!数码管动态显示驱动,有八个数码管,要求先显示0~7,然后显示8~f。怎么写啊?急!!!

9楼:上虞潘永杰

你用什么单片机的,用动态扫描啊,就是八个数码管一个一个的显示数字,然后缩短间隔时间,人眼分辨不出后,就是八个同时显示

小弟写的单片机程序,目的是实现8位共阴数码管的动态扫描 使用了for循环 可为什么实现不了呢?谁能帮忙看

10楼:匿名用户

int j,x,i; //你定义的是全局变量

for循环里过了delay(5);后i是0,所以你的p0=d[i];就等于是p0=d[0];当然就亮第一位了

改为局部变量就可以了

11楼:

呵呵,参考郭天祥的教程做的吧

给个我试过能用的动态扫描程序你参考参考(用的是共阳极的管,编码表和位选初始值需要修改一下):

#include

#include

#define uchar unsigned char#define uint unsigned intsbit dula=p2^6;

sbit wela=p2^7;

uchar code numtab=;

void delayms(uint);

void main()}}

void delayms(uint tms)

12楼:匿名用户

感觉你在输出部分由问题,你在每次接口输出的时候增加一段延时看看。

51单片机八位数码管两两动态显示,然后循环,用汇编语言。我编写的程序始终只能显示一位,求大神指导。

13楼:匿名用户

51单片机八位数码管两两动态显示,(如1 2,3 4,5 6,7 8),这也没有说清楚,那两个数是始终在固定的两位上显示,还是在八位数码管上流动显示?

把你写的程序发上来,可以知道数码管的接法,还是共阴共阳等关键点,可以在你的程序基础上修改。否则,你不给**图或原理图,也不知道数码管是怎么连接的,这程序是不能写的。

要发源程序,别发截图的程序,那样不能复制。

单片机6个数码管动态显示1-6的程序里不加延时程序为什么会出现8字。每一位数码管只会显示一个数字,

14楼:李_老师

把程序贴出来。

从程序中才能找到问题所在。

。我估计,是因为你在每次显示后,下一位显示之前,没有关闭显示。。

。如果每一位显示的时间长一点,比如2毫秒,就不会有这种概况。。。

这种情况很多人都会遇到,教材中也是这样的程序。

15楼:撸粗的人

大佬大佬,我也出现这个问题了,但是看回答没有找到答案,请问大佬知道答案了吗?

16楼:匿名用户

可能是位置错了,例如1的位置下次显示2下下次显示3

17楼:匿名用户

太快了,你的眼睛看不过来。

18楼:匿名用户

因为单片机工作速率太快了,然后显示1到6把数码管的每一位段选都用到了,所以看起来就是显示的就是数字8。(我是这样认为的,不知道对不哦)

用单片机控制一个8段数码管,其循环显示数字0到9,每位数字显示时间为一秒,定时功能用单片机中断显示

19楼:沈阳_大伟

有一个一模一样的提问,好吧,俺再发布一次

给你一份我自己写的,利用四位数码管显示模拟时钟的程序吧,供你研究

另外,再给你一个一位数码管的,是你要求的那种

这两个都是利用单片机的定时器中断来产生秒信号的

下面这个是 四位数码管的,最下边的是一位数码管的,端口不一样的话,自己改下

#include

sbit p20=p3^7; sbit p21=p3^6; sbit led=p2^7;//按键及led端口定义

sbit axs=p1^3; sbit bxs=p1^2; sbit cxs=p1^1; sbit dxs=p1^0;//数码管位选端口

char table[10]=;//数码管显示编码

unsigned int h,m,s,t,n;

void ys(char hs)//延时函数

void xs(int xh,int xm) //显示子函数

void main(void)

}while(!p20)}

if(p21==0)}while(!p21)}

xs(h,m);//调用数码管显示函数}}

void int1() interrupt 1 //定时器中断

//led闪烁

if(n>1000)//如果达到一秒,秒加一

if(s>59)//如果达到一分,分加一

if(m>59)//如果达到一小时,小时加一

if(h>23)//如果达到24小时,小时清零

#include

sbit axs=p1^3;//数码管位选端口

char table[10]=;//数码管显示编码

unsigned int h,m,s,t,n;

void ys(char hs)//延时函数

void main(void)

void int1() interrupt 1 //定时器中断

//如果达到一秒,秒加一

if(m>9)//如果达到一小时,小时加一

怎么编程实现单片机8个数码管显示14141414再显示41414141 显示44441111的循环 100

20楼:飞鸣

你可以写一个数组什么的,将这些数码管的16进制值依次放到数组中,然后循环,每8位停止一下

21楼:无线开发工程师

和单个显示一样,隔一定时间换一个即可,循环换

单片机静态显示和动态显示的原理各有什么特点

1楼 风景 数码管静态显示就是每个数码管的驱动电平不会改变,知道这个数码管的数值发生变化。 动态显示就是利用人眼反应迟钝,数码管轮流显示一段时间,比如都是20ms,效果看起来是几个数码管同时亮 实际是只有一个在点亮,其他的是余晖 。 静态显示亮度比较亮,功耗大 动态显示亮度稍微差点,但是显示位数多 ...