51单片机不用PWM实现呼吸灯效果

1、首先连接好电路图51单片机不用PWM实现呼吸灯效果_第1张图片

我连接的P1^0

2、初始化LED
sbit LED1 = P1^0; //初始化LED
3、初始化T0
/***********T0初始化***********/
void time_Init()
{
 TMOD = 0x01;
 TH0  = 0x00;
 TL0  = 0x0f;
 ET0  = 1;
 TR0  = 1;
 EA   = 1;
}
void time0() interrupt 1
{
 	 TH0  = 0x00;
	 TL0  = 0x0f;
	   count++;
}
4、呼吸灯逻辑分析,在总频率不变的情况下 ,改变高电平的占比,让高电平的占比逐渐增加,低电平的占比就会减少,这个时候我们就能看到这个灯逐渐变亮。

51单片机不用PWM实现呼吸灯效果_第2张图片

结合以下代码:
/***********呼吸灯代码***********/
void LED_PWM_Show()
{
  int i;
  for(i=50;i>=0;i--) // 逐渐变亮
  {
    LED1 = 0;
    delay(i);
    LED1 = 1;
    delay(50-i);
  }
  for(i=0;i<50;i++)  // 逐渐变暗
  {
    LED1 = 1;
    delay(i);
    LED1 = 0;
    delay(50-i);
  }
}

最后在主函数中调用就行了

void main()
{
	time_Init();
	while(1)
	{
		LED_PWM_Show();
	}
}

以下是全部代码

#include<reg52.h>
sbit LED1 = P1^0; //初始化LED
int count = 0;
/***********延时函数***********/
void delay(int x)
{
		count = 0;
	while(count!=x);
}
/***********T0初始化***********/
void time_Init()
{
 TMOD = 0x01;
 TH0  = 0x00;
 TL0  = 0x0f;
 ET0  = 1;
 TR0  = 1;
 EA   = 1;
}
/***********呼吸灯代码***********/
void LED_PWM_Show()
{
  int i;
  for(i=50;i>=0;i--) // 逐渐变亮
  {
    LED1 = 0;
    delay(i);
    LED1 = 1;
    delay(50-i);
  }
  for(i=0;i<50;i++)  // 逐渐变暗
  {
    LED1 = 1;
    delay(i);
    LED1 = 0;
    delay(50-i);
  }
}
void main()
{
	time_Init();
	while(1)
	{
		LED_WPM_Show();
	}
}
void time0() interrupt 1
{
 	 TH0  = 0x00;
	 TL0  = 0x0f;
	   count++;
}

注:效果不明显,定时器初值设置就小一点

你可能感兴趣的:(51单片机不用PWM实现呼吸灯效果)