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++;
}
注:效果不明显,定时器初值设置就小一点