173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

51单片机呼吸灯时间比例

htxw 2023-03-13 资讯中心 18 ℃

51单片机为什么下面的这个程序能呈现呼吸灯的现象,解释一下?

程序解释的挺清楚的了。

先要想明白呼吸灯原理是什么,怎么实现,再看程序。

呼吸灯开的时候,以非常快的速度开-关-开-关,并逐渐加大开的时间比率,减小关的时间比率。

呼吸灯关的时候,以非常快的速度开-关-开-关,并逐渐加大关的时间比率,减小开的时间比率。

51单片机控制的 呼吸灯

先说呼吸灯,这个本质上是LED的亮度控制。

一般是用PWM方式控制LED亮度,PWM的输出按照一定的规律变化,就可以做出呼吸灯的效果。

再说30个LED的控制,如果要简单点做,30个LED可以串起来串一个电阻,接高点的电源电压,30个LED用同一个信号控制,当然,亮度也是同步变化的。如果要复杂,那就出30个信号分别控制30个LED串30个电阻,具体看你的追求的效果吧。

呼吸灯的程序,如果有硬件的PWM模块,是很简单的,按一定的规律让PWM的输出变化就可以。

像这样输出10%亮度,持续200ms,输出20%亮度,持续200ms,输出30%亮度,持续200ms。。。

如果没有硬件PWM模块,可以用软件来模拟,比如,输出10%亮度,持续200ms这两件事合在一起作,变成输出高电平10us,输出低电平90us,循环2000次。

51单片机,呼吸灯

给你个思路吧,用调制的方法,灯在高速闪烁人眼是看不出来的,你每个循环给闪烁的熄灭时间加1,灯就会慢慢变暗,在设置熄灭时间加到一定程度就开始减一,就会渐渐变亮了,如此循环就可以了

51单片机,机械周期,和把呼吸灯频率投为100hz频率,这两种频率的关系?

100hz,则周期是10ms,那呼吸灯每5ms就要把电平变换一次。

执行一条指令需要的时间是:(12/11.0592)us,那就可以算出来,大概执行4608条指令后。那就每执行4608条指令后就把呼吸灯的输出取反,得出来的就是100hz了。

用定时器也是一样,把它定在5ms中断一次即可。

51单片机能不能把LED灯做成呼吸灯,要怎么延迟,需要多少延迟··

#includereg52.h //包含头文件,一般情况不需要改动,//头文件包含特殊

/*-------------------------IO口定义----------------------------*/

sbit d0=P1^0;// 用sbit 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号

void Delay(unsigned int t); //函数声明

/*------------------------------------------------主函数------------------------------------------------*/

void main (void)

{

unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值

char y = 1;

while (y--) //主循环

{

d0=1;

Delay(20); //特意加延时,可以看到熄灭的过程

for(PWM_LOW=1;PWM_LOWCYCLE;PWM_LOW++)

{//PWM_LOW表示低

//电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次

d0=0; //点亮LED

Delay(PWM_LOW);//延时长度,600次循环中从1加至599

d0=0;//熄灭LED

Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1

}

d0=0;

for(PWM_LOW=CYCLE-1;PWM_LOW0;PWM_LOW--)

{//与逐渐变亮相反的过程

d0=0;

Delay(PWM_LOW);

d0=1;

Delay(CYCLE-PWM_LOW);

}//主循环中添加其他需要一直工作的程序

}

}

/*----------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535---------------*/

void Delay(unsigned int t)

{

while(--t);

}

单片机制作呼吸灯的C语言程序怎样编写

#includereg51.h

sbit LED0=P0^0;

sbit wei=P1^1;

sbit duan=P1^0;

sbit lcden=P1^7;

sbit dianzhen=P1^3;

sbit leden=P1^2;

void Delay(unsigned int t);

void main (void)

{

unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值

lcden=0;

P0=0x00;

dianzhen=0;

P0=0xff;

wei=0;

duan=0;

while (1) //主循环

{

LED0=1;

Delay(150000); //特意加延时,可以看到熄灭的过程

for(PWM_LOW=1;PWM_LOWCYCLE;PWM_LOW++)

{

LED0=0;

Delay(PWM_LOW);

LED0=1;

Delay(CYCLE-PWM_LOW);

}

for(PWM_LOW=CYCLE-1;PWM_LOW0;PWM_LOW--)

{

LED0=0;

Delay(PWM_LOW);

LED0=1;

Delay(CYCLE-PWM_LOW);

}

}

}

void Delay(unsigned int t)

{

while(t--);

}

51单片机呼吸灯时间比例的介绍就聊到这里吧,感谢您花时间阅读,谢谢。

本文标签:51单片机呼吸灯时间比例

<