呼吸灯就是使发光二极管先渐渐变亮再渐渐变暗,如此循环就像呼吸一样。
占空比是指周期性信号中高电平信号的持续时间与周期的比例,占空比是指脉冲信号中高电平信号的占据时间与一个完整周期时间的比值,占空比通常以百分比的形式表示,被广泛应用于控制电路和电源电路中。
比如周期是20ms,交替10ms亮10ms灭,我们看到的亮度还是50%(即占空比为10/20=50%)
下面展示 实验代码
。
#include <REGX51.H> // 引入51单片机头文件
#define uchar unsigned char // 定义无符号字符型变量
#define uint unsigned int // 定义无符号整型变量
void Delay(unsigned int t) // 延时函数
{
unsigned int count =1*t; // 根据传入的参数t计算延时的次数
while(count--); // 循环执行count次,实现延时
}void main() // 主函数
{ unsigned char Time; // 定义一个无符号字符型变量Time
while(1) // 无限循环
{
for(Time=0;Time<200;Time++) // 循环200次,每次Time自增1
{
P2=0X00; // 将P2口的值设置为0x00,即全部关闭LED灯
Delay(Time); // 调用延时函数,延时的时间为Time
P2=0Xff; // 将P2口的值设置为0xff,即全部打开LED灯
Delay(200-Time); // 调用延时函数,延时的时间为200-Time
}
for(Time=200;Time>0;Time--) //环200次,每次Time自减1
{
P2=0X00; // 将P2口的值设置为0x00,即全部关闭LED灯
Delay(Time); // 调用延时函数,延时的时间为Time
P2=0Xff; // 将P2口的值设置为0xff,即全部打开LED灯
Delay(200-Time); // 调用延时函数,延时的时间为200-Time
}
}
}
在这个程序中,LED 灯的亮度变化是通过控制每次循环中的延时时间来实现的。在第一个 for 循环中,延时时间从0逐渐增加到200,然后在第二个 for 循环中又逐渐减小回到0。这样的变化过程给人一种灯光逐渐变亮再逐渐变暗的效果,类似于呼吸的过程。
虽然这个程序没有真正意义上的使用 PWM(脉冲宽度调制)技术来精确控制 LED 的亮度,但通过简单地控制延时时间和全灯开关,也实现了一种类似于呼吸灯的效果。这种简化版的呼吸灯思想在资源有限、对精度要求不高的场合仍然具有一定的实用性。