pwm 呼吸灯 让你的灯呼吸起来

PWM呼吸灯

  • 一.先来看看呼吸灯效果
  • 二.下面我们来看看产生pwm波的方式
    • 1.延时函数
      • a.演示代码如下:
      • b.最后上成熟的代码
    • 2.用到定时器

一.先来看看呼吸灯效果

pwm led呼吸灯

其实pwm不仅仅可以玩呼吸灯 把灯变成电机或者其他的原件也可以起到相同的作用。

二.下面我们来看看产生pwm波的方式

1.延时函数

思路:试想一下 我们怎样才能做到呼吸的效果
让灯先亮再暗只会让灯闪烁 但是让灯慢慢变亮再慢慢变暗 那么就可以产生呼吸灯 那么问题来了 怎么让灯实现慢慢亮或者慢慢暗

没错就是

     占空比 

呼吸灯

亮x秒 灭x秒 那么占空比就为50% 亮度也为50%
亮x秒 灭100-x秒 那么占空比就是x/100 亮度也就是x/100

通过改变占空比 来改变 亮度 占空比由大到小 再由小到大 那么亮度就由大到小 再由小到大。

a.演示代码如下:

//程序实现灯变亮再变暗的过程
//2020.3.30
#include 
sbit led=P3^0;
//延时函数声明
void delay(int x)
{
	int i;
	for(i=0;i<x;i++);
}

void main()
{   
 int x=0;//延时时间
 while(1)

 {

	 //占空比为100/1000
		led=0;
		delay(100);
		led=1;
		delay(900);
		//占空比为200/1000
			led=0;
		delay(200);
		led=1;
		delay(800);
		//占空比为300/1000
		led=0;
		delay(300);
		led=1;
		delay(700);
		
			led=0;
		delay(400);
		led=1;
		delay(600);

			led=0;
		delay(500);
		led=1;
		delay(500);

		led=0;
		delay(600);
		led=1;
		delay(400);
		
		led=0;
		delay(700);
		led=1;
		delay(300);

			led=0;
		delay(800);
		led=1;
		delay(200);

		led=0;
		delay(900);
		led=1;
		delay(100);
	
	}
}



b.最后上成熟的代码

/***
*源代码来来自于 https://www.bilibili.com/read/cv4779664
*pwm LED呼吸灯
*现象:亮-灭-亮 循环
*LED接口:P3.0
*思路:改变延时时间实现亮度不一从而实现呼吸的效果
***/
#include  //引用头文件

sbit led=P3^0;     //LED接口

bit ledsign=0;     //定义一个标志位ledsign==0 

void delay(int);   //声明延时函数
   
void main()
{
  int i=0;         //i:延时控制变量
  while(1)         
  {
   if(ledsign==0)   //如果b=0(初始0)(灯由亮到灭)
		 {   
				led=1;         //灭
				delay(i);      //i秒后(i从小到大)
				led=0;         //亮
				delay(1000-i); //延时1000(可自行定义)-i秒后
				i+=2;          //增加i(开灯的时间)
        if(i>=1000) 
        {	
            ledsign=1;     //i到最大值(>1000)改变标志位下一阶段(灯由灭到亮)
        }
   }
   else if(ledsign==1)         //判断是否进入到下一阶段(灯由灭到亮)
   {       
      led=1;    //灭
      delay(i);   //i秒后(i在上一阶段已到最大值(>1000))
      led=0;    //亮
      delay(1000-i);//延时1000(随手定义)-i秒后
      i-=2;     //减少i(开灯的时间)
      if(i<=0) 
      {
        ledsign=0;//判断是否回到上一阶段
      }
   }
   
  }
}

void delay(int a)      //定义延时函数
{
  int i;
  for(i=0;i<a;i++);
}

2.用到定时器

当然要是想实现精准的计时,还是要用到定时器的。

你可能感兴趣的:(51单片机自学笔记)