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、呼吸灯逻辑分析,在总频率不变的情况下 ,改变高电平的占比,让高电平的占比逐渐增加,低电平的占比就会减少,这个时候我们就能看到这个灯逐渐变亮。

在这里插入图片描述

结合以下代码:
/***********呼吸灯代码***********/
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++;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值