闪烁一般是扫描频率不够高,或者是因为程序延时的问题造成,造成中间的扫描断了。你说数字变化的时候会闪烁,扫描程序应该是在主函数里一直循环 *** 作的。你可以着重检查一下,在数字变化的时候,有没有什么耗时 *** 作。
是89系列的吗
如果是的话可以这样:
先写一个延时程序
void delay_ms(int time)
{ int x,y;
for(x=110;x>0;x--)
for(y=time;y>0;y--);
}
然后到主程序:
main()
{
while(1)
{
先让灯亮;
delay(500);
再让灯灭;
delay(500);
}
}
这样就OK了,至于灯亮和灯灭 要看你是共阴还是共阳了
相信这个是很容易处理的。
单片机有很多种,编程要根据不同单片机进行。编程思想为:main{设置单片机上与数码管相连的引脚为输出,设置单片机中断接口(即中断按钮)的中断控制寄存器里的中断使能,设置整体中断使能,循环子程序xunhuan();显示0到9,}xunhuan(){循环子程序具体怎么循环};ISR_zhongduan(){此处为中断时要做的事。比如楼主说的,可以将输出只为0,然后延时一段时间}//解释如下:主程序一开始设置一些基本的输入输出寄存器的值,比如数码管的输出,按钮的输入,然后是中断的提前设置(那个脚触发中断,上升沿还是下降沿中断),然后就是一直运行循环子程序了,直到中断一次运行一次中断子程序,然后回到原来跳出来的地方接着循环。循环子程序可以不编,直接写在主程序里用for或while循环,但是写子程序比较容易修改。中断子程序就是按钮按下之后要做的事情,做完又回到循环子程序跳出来的那个地方接着循环了,直到下次又按下按钮。这是一个思想,对任何一种单片机都适用,但具体下来就要去看单片机的datasheet,说明书了。如果想学可以直接从如下关键字去学只是块:中断原理,GPIO,P0,P1,P2,单片机最基本主程序构成
优控温控器显示25闪烁是提示温控器处于调节或检查程序中,当手动调节好或一定延时后,程序信束灯即灭。温控器,是指根据工作环境的温度变化,在开关内部发生物理形变,从而产生某些特殊效应,产生导通或者断开动作的一系列自动控制元件,也叫温控开关、温度保护器、温度控制器,简称温控器。或是通过温度保护器将温度传到温度控制器,温度控制器发出开关命令,从而控制设备的运行以达到理想的温度及节能效果。温控器应用范围非常广泛,根据不同种类的温控器应用在家电、电机、制冷或制热等众多产品中。
1:设置一个变量zhidaoi,它可以从0循环到3
2:检测一个已取消缓冲的键。按“+1”
3:当I值为每个值时,执行相应的模式。
水量灯参考程序
#include
#include
#定义uchar无符号字符
Ucharj,温度;
无效延迟(无符号整型ms)
{
Uchart;
(女士)
对于(t = 0;T < 123;T + +);
}
Voidmain()
{
P1=0XFF;
延迟(500);
Temp=0xfe;//奇怪,led连接在P2.3~P2.6
对于(j = 0;J < 4;J + +)
{
P1=temp;
延迟(500);
Temp=_crol_(Temp,1);
}
P1=0XFF;
(1);
}
扩展资料:
注意事项:
#include“reg52。这个文件为单片机定义了一些特殊的功能寄存器
Typedef无符号int在16以下;//以声明的方式定义数据类型
无符号charu8;
//LED灯
Sbitleda=P0;
Sbitled1=P0^0;
Sbitled2=P0^1;
Sbitled3=P0^2;
Sbitled4=P0^3;
Sbitled5=P0^4;
Sbitled6=P0^5;
Sbitled7=P0^6;
Sbitled8=P0^7;
无效延迟(16岁以下)
{
,(我);
}
Voidmain()
{
而(1)
{
勒达=1;//所有的灯都亮着
//从左到右熄灭
Led1=0;
Led2=0;
延迟(50000);//延迟时间约为450毫秒
Led3=0;
延迟(50000);//延迟时间约为450毫秒
Led4=0;
延迟(50000);//延迟时间约为450毫秒
Led5=0;
延迟(50000);//延迟时间约为450毫秒
Led6=0;
延迟(50000);//延迟时间约为450毫秒
Led7=0;
延迟(50000);//延迟时间约为450毫秒
Led8=0;
延迟(100000);//延迟大约900毫秒
//从右到左照明
Led8=1;
延迟(50000);//延迟时间约为450毫秒
Led7=1;
延迟(50000);//延迟时间约为450毫秒
Led6=1;
延迟(50000);//延迟时间约为450毫秒
Led5=1;
延迟(50000);//延迟时间约为450毫秒
Led4=1;
延迟(50000);//延迟时间约为450毫秒
Led3=1;
延迟(50000);//延迟时间约为450毫秒
Led2=1;
延迟(50000);//延迟时间约为450毫秒
Led1=1;
延迟(50000);//延迟时间约为450毫秒
勒达=1;//所有的灯都亮着
}
}
这是我写的五种方式流水灯:
#include<reg52h> //五种花样流水灯
#include<intrinsh>
#define uint unsigned int
#define uchar unsigned char
uint a,b=7,e,f=4,h;
uchar c,d;
uchar code deng[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水灯位置
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
} //延时
void y1() //第一流水灯程序 指针
{
while(h<=16&&h>=0)
{
P1=(deng+a);
delay(200);
a++;
if(a==8)
a=0;h++;
}
}
void y2() //第二流水灯程序 数组
{
while(h<=30&&h>16)
{
P1=deng[b];
delay(100);
b--;
if(b==0)
b=7;h++;
}
}
void y3() //第三流水灯程序 左右移
{
c=0xe7;
while(h<=43&&h>30)
{
P1=c;
delay(500);
c=c>>1;
c=c<<2;h++;
}
}
void y4() //第四流水灯程序 库函数
{
d=0xaa;
while(h<=51&&h>43)
{
P1=d;
delay(100);
d=_crol_(d,1);h++;
}
}
void y5() //第五流水灯 定时器
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(h>51)
{
P1=deng[f];h++;
}
}
void y() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
e++;
if(e==6)
e=0;
f++;
if(f==8)
f=0;
}
void main()
{
while(1)
{
y1();
y2();
y3();
y4();
y5();
}
}
以上就是关于定时器与数码管显示两位变化数字时为什么其中一个在闪烁全部的内容,包括:定时器与数码管显示两位变化数字时为什么其中一个在闪烁、求一道单片机延时程序(C语言)例题详细解释。例如要让P1_0灯隔1秒或者0.5秒闪烁....谢谢高手您了、while循环中数码管显示0-60时闪烁,延时长了灯光太暗并且闪烁,延时短了不闪烁且亮度正常,但是速度太快等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)