STC89C52RC定时器呼吸灯
时间: 2023-11-19 15:06:21 浏览: 155
以下是STC89C52RC定时器实现呼吸灯的C语言代码:
```c
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit led = P1^0; // 定义P1.0口为LED输出口
void Timer0Init() // 定时器初始化函数
{
TMOD |= 0x01; // 设置定时器0为模式1(16位定时器)
TH0 = 0xff; // 定时器初值
TL0 = 0xff;
ET0 = 1; // 打开定时器0中断允许
EA = 1; // 打开总中断允许
TR0 = 1; // 启动定时器0
}
void main()
{
Timer0Init(); // 定时器初始化
while(1); // 主循环
}
void Timer0() interrupt 1 // 定时器0中断函数
{
static uchar pwm = 0; // 定义pwm变量,初始值为0
static bit dir = 0; // 定义dir变量,初始值为0
TH0 = 0xff; // 重新赋值定时器初值
TL0 = 0xff;
if(dir == 0) // 如果dir为0,pwm递增
{
pwm++; // pwm加1
if(pwm >= 31) // 如果pwm大于等于31,即最大亮度
{
dir = 1; // dir置1,即pwm递减
}
}
else // 如果dir为1,即pwm递减
{
pwm--; // pwm减1
if(pwm == 0) // 如果pwm等于0,即最小亮度
{
dir = 0; // dir置0,即pwm递增
}
}
if(pwm == 0) // 如果pwm等于0,即LED灯熄灭
{
led = 0;
}
else if(pwm == 30) // 如果pwm等于30,即LED灯最亮
{
led = 1;
}
else // 如果pwm在0和30之间,即LED灯呼吸
{
if(pwm % 2 == 0) // 如果pwm为偶数,即LED灯熄灭
{
led = 0;
}
else // 如果pwm为奇数,即LED灯点亮
{
led = 1;
}
}
}
```
阅读全文