利用定时器写一个c51单片机呼吸灯的程序
时间: 2024-05-08 19:20:55 浏览: 115
呼吸灯是通过改变LED的亮度来实现灯光的渐变效果,一般通过调节PWM波占空比来实现。下面是一个简单的C51单片机呼吸灯程序:
```c
#include <reg51.h>
#define LED P1
void delay(unsigned int xms) // 延时函数
{
unsigned int i, j;
for (i = xms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void main()
{
unsigned char bright = 0;
unsigned char fade_in = 1; // 渐亮标志
unsigned char fade_out = 0; // 渐暗标志
TMOD |= 0x01; // 设置计时器0为模式1
TH0 = 0xfc; // 给计时器赋初值
TL0 = 0x66;
ET0 = 1; // 打开定时器0中断
EA = 1; // 打开总中断开关
TR0 = 1; // 启动计时器0
while(1)
{
if (fade_in) // 渐亮
{
if (bright < 255)
{
bright++;
LED = bright;
}
else
{
fade_in = 0;
fade_out = 1;
}
}
else if (fade_out) // 渐暗
{
if (bright > 0)
{
bright--;
LED = bright;
}
else
{
fade_in = 1;
fade_out = 0;
}
}
delay(10); // 延时10毫秒
}
}
void timer0() interrupt 1 // 定时器0中断服务程序
{
TH0 = 0xfc; // 给计时器赋初值
TL0 = 0x66;
}
```
以上程序中,通过定时器0中断来改变PWM波的占空比,从而实现LED灯的渐变效果。需要注意的是,这里的计时器初值需要根据实际使用的晶振频率来调整。
阅读全文