1,如何用数码管显示工序状态和延迟时间

可以在系统设置里面设置。
ertryjh
void xs(qian,bai,shi,ge,sj)//5ms显示延时 { while(sj--) { P0=wei[qian]; P2=0xef; delay1ms(1); P2=0xff; P0=wei[bai]; P2=0xdf; delay1ms(1); P2=0xff; P0=wei[shi]; P2=0xbf; delay1ms(1); P2=0xff; P0=wei[ge]; P2=0xff; delay1ms(1); P2=0xff; } }

如何用数码管显示工序状态和延迟时间

2,数码管动态显示程序设计时延时程序有什么作用延时时间的长短对其显示

延时程序的作用是保持当前显示数码管足够时间,同时稳定显示效果,以形成视觉暂留。延时时间长短视具体情况而定,一般要大于2毫秒,所有数码管一次扫描完成总时间不能大于40毫秒,40毫秒基本上是人眼视觉暂留的极限了。

数码管动态显示程序设计时延时程序有什么作用延时时间的长短对其显示

3,数码管动态扫描的延时时间设为多少人眼才不会感觉到闪烁具体的延

人眼的视觉暂留时间大概在二十四分之一秒左右(所以一般电视电影至少是24帧以上,才会看起来是连续的动作),延时的时间设置小于40ms即可。延时太短会加重cpu的负担,所以具体数值要自己权衡。写延时函数有两个方法:1.如果有用到实时操作系统(RTOS),可以用OS的API,比如: sleep(20)2.没有用RTOS时,一般用循环语句来实现延时。具体循环次数需要通过系统的主频来计算。代码例子(循环次数 100x500 = 50000次,延时时间=单次循环的时间 x 50000):int i = 0, j = 0;for(i = 0; i < 100; i++) for(j = 0; j < 500; j++) ; }}
你好!每位显示的间隔不超过20 ms希望对你有所帮助,望采纳。

数码管动态扫描的延时时间设为多少人眼才不会感觉到闪烁具体的延

4,protues扫描七段数码管延时多长时间

首先你要确定,你的程序是否对,这个可以在相应的地方设置断点来帮助你。 如果程序没太大的问题,可能是你的每个数码管显示的延时时间不够,至少要延时1-2ms,也不能太长,延时时间太长的话显示会出现闪烁。这个问题其实也是软件问题。 还有一点,PROTEUS的仿真实际上是动画,每秒20-50帧(可设定),因此有时程序正确,显示却有点问题(如你所说的问题),此时可以适当修改动画的帧速:在“系统”的菜单的倒数第三项就是。

5,关于单片机数码管延时

见 http://zhidao.baidu.com/question/1431182950511217219在那里你虽然选择了错误的回答,但那个display函数配合delay是对的。你现在把显示函数中的每位设定后的延时delay(1)给去掉了,百位十位的通电时间太短了,只有个位设好后跑了一遍main里面的while(1)主循环有点时间,所以看起来只是个位亮。
delay(1)延时,应该是6us吧,调用2us,djnz rn,$占用2us ,RET占用2us,消隐就是将数码管前一刻显示内容消除,wela先送1再送0是为了锁存数据用的,锁存器需要一个下降沿来锁存。
为了提高数码管亮度,除了用三极管,还可以加上拉电阻,电路如图所示。数码管可以是共阴的也可以是共阳的,在编程时注意点亮方法不同就是了。 另外,数码管动态显示时,显示亮度也和点亮的延时有关

6,单片机四个数码管动态显示的延时时间约为多少

#include <reg52.h>#include <stdlib.h>#define uint unsigned long#define uchar unsigned char sbit N1 = P1^0; sbit N2 = P1^1;sbit N3 = P1^2;sbit N4 = P1^3;uchar code table[]=uint num;int a,t1=0;void delayms(uint xms) //延时函数 uint i,j; for(i=xms;i>0;i--) for(j=10;j>0;j--);}void display(uint num) N1=0; P0=table[(num/1000)]; delayms(1); P0=0XFF; N1=1; N2=0; P0=table[(num%1000)/100]; delayms(1); P0=0XFF; N2=1; N3=0; P0=table[(num%100)/10]; delayms(1); P0=0XFF; N3=1; N4=0; P0=table[(num%10)]; delayms(1); P0=0XFF; N4=1;}void TimeAdd() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; t1++; if(t1==10) //20*50==1秒10*50=0.5秒 t1=0; num++; }}void main() TMOD=0X01; // 定时器 初始化 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; //中断总开关 ET0=1; //开定时器0 中断 TR0=1; //启动定时器0 num=6000; //初始值 while(1) display(num); }}

7,新手51单片机数码管延时问题请教

采用这种方式一般都是所谓的动态扫描显示,往往不止一个数码管。一个数码管8段加一个公共端需要9根口线才能完全显示任意数字,为了节省io口线,就利用了人眼视觉驻留的原理(就像电影胶片每秒24帧,连续起来播放你觉得没有任何间断),每一位数码管显示一会儿,然后关掉它,再去显示下一个数码管。只要保证在1秒内每个数码管能扫上个十几次二十几次,视觉上就好像同时点亮了所有数码管了。 你这段程序就是这种方式:shuma=a[d1]; //送第d1位数码管的段码,d1范围是0~3共4位led_1=0; //打开d1位数码管显示允许,数码管被点亮delay_ms(1); //保持显示1ms led_1=1; //关闭d1位数码管显示,准备显示下一位
delay的参数是 uchar 型的,最大只有255,5000溢出了。写5000,实际并不是以5000计数。想要5000,把参数改为 int 型,函数内部了 变量 i也改为 int 型

8,关于单片机数码管延迟问题

你的程序在段选之后马上消隐,显示的时间可能只有几个微秒,显然很不合理。如何让每位数码管亮度保持均匀,delay(500)放在程序的位置还是很重要的,程序修改如下,但愿对你有帮助:Void main() while(1) dula=1;打开段选 P0=table[1]; wela=1;打开位选 P0=0xfe; delay(250); dula=0; P0=0xff; 消影 wela=0; delay(250);//如果亮度不够高,可以减少此延时
看你的数码 管是共阳还是共阴。共阳的话,用单片机的io口(不是段控那个口)轮流接高电平到每只管的共阳极。亮1ms,熄灭再下一位管。共阴同样方法,不过是接低电平。

9,用51单片机做定时器时间显示在数码管上要求有秒钟十秒钟分钟

............这不是最简单的吗?用单片机的定时器设置成50ms中断一次,然后20次就是1秒,秒到了60,然后把秒变成0,分钟加1,数码管你看看是用什么控制138加595,还是数码管芯片直接驱动
//看最下面倒数第2行 // for(;;) // 加上就可以了. #include unsigned int int_count=0; unsigned char count=0; unsigned char second=0; unsigned char seg1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98}; void t0(void) interrupt 1 using 0 { p1=seg1[second]; int_count++; if(int_count==4000) { int_count=0; second++; if(second>=10) second=0; } } void main (void) { tmod=0x02; th0=0x06; tl0=0x06; tr0=1; et0=1; ea=1; for(;;) {} // 缺少这个 } //如上是程序代码 ,打算用t0定时器进行一秒定时,共阳极数码管显示0到9 ,一秒钟显示一个 ,po口用作数据输出 , 中间用了一个锁存器,但是程序跑的时候老是乱码,麻烦有经验的朋友帮忙解答一下 谢谢啦 //问题补充:锁存器是进行其他的设计所保存的器件,在这个小功能上并不起作用,始终处于正常的工作状态,7段数码管码值都正确,本实验是在其他实验的基础上进行的,开始采用的是延时,一切工作正常,现在换成定时器。就不行了 。 已经接了上拉电阻,没有上拉电阻证明是驱动不了数码管的。 //3:数码管的参数是我用延时程序一个个的对照过的 没有问题的

10,设计一个电子秒表通过软件延时方式实现秒计时通过两个数码管动

这原本是数字钟的程序 要6位数码管显示的,给你改了一下。硬件上需要89c51最小系统+74Hc573两片+数码管两位#includesbit dula = P2^6; sbit wela = P2^7; sbit led1 = P1^3; #define uint unsigned int #define uchar unsigned char uint a,c,g; uint b = 5; long int num; uchar num1,num2,shi,ge; void display(uchar,uchar); void delayms(b) { for(a=b;a>0;a--) for(g=110;g>0;g--); }const unsigned char duan[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; main() { TMOD=0x11; //设置定时器0和1为工作方式1 (00010001) TH0=(65536-45872)/256; //装初值---------------------------- TL0=(65536-45872)%256; TH1=(65536-45872)/256; //装初值 TL1=(65536-45872)%256; EA=1; //开总中断 ET0=1; //开定时器0中断 ET1=1;//开定时器1中断 TR0=1;//启动定时器0 TR1=1;//启动定时器1 while(1)//程序停在这里等待中断发生 { display(shi,ge); } } void display(uchar shi,uchar ge) { dula=1; P0=duan[shi]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delayms(b); dula=1; P0=duan[ge]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delayms(b); } void T1_time()interrupt 3 { TH1=(65536-45872)/256; //重装初值 50ms; TL1=(65536-45872)%256; num2++; if(num2==20) //20次说明一秒时间到 { num2 = 0; num++; if(num == 60) num = 0; shi=num/10; ge =num%10; } }
#include #define uchar unsigned char #define uint unsigned int //通过定时器实现一秒定时,软件延时太麻烦(已做过实验),共阳数码管, uchar miao,shi,ge,shu; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,};//数码管段码 void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void timer0() interrupt 1 //50ms定时器中断,进二十次就是一秒 { th0=(65536-50000)/256; tl0=(65536-50000)%256; shu++; if(shu==20)//进二十次就是一秒 { shu=0; miao++; ge=miao%10;//转换数 shi=miao/10;//转换数 if(ge==10) { ge=0; } if(shi==6) { shi=0; } } } void display(uchar shi ,uchar ge)//显示子程序 { p3=0x7f; p0=table[ge]; delay(5); p3=0xbf; p0=table[shi]; delay(5); } void main() { tmod=0x01; th0=(65536-50000)/256;//初始化定时器 tl0=(65536-50000)%256; ea=1; et0=1; tr0=1; while(1) { display(shi,ge); delay(5); } }

文章TAG:数码管显示延时一般设置多少数码  数码管  显示  
下一篇