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,效果看起来是几个数码管同时亮 实际是只有一个在点亮,其他的是余晖 。 静态显示亮度比较亮,功耗大 动态显示亮度稍微差点,但是显示位数多 ...