使用STC89C51输出PWM调节LED亮度
时间: 2024-02-21 17:34:29 浏览: 30
以下是使用STC89C51输出PWM调节LED亮度的代码:
```c
#include <reg51.h>
sbit LED = P1^0; // LED连接到P1.0引脚
void Init_Timer0() // 初始化定时器0
{
TMOD |= 0x01; // 设置为模式1
TH0 = 0xFC; // 设置计数初值,使定时器每10ms产生一次中断
TL0 = 0x67;
ET0 = 1; // 允许定时器0中断
TR0 = 1; // 启动定时器0
}
void main()
{
Init_Timer0(); // 初始化定时器0
while(1)
{
for(int i = 0; i < 100; i++) // 从0调节到100,实现PWM控制LED亮度
{
if(i < 50) // 前50个计数周期LED亮度为50%
{
LED = 1;
delay_ms(10);
LED = 0;
delay_ms(10 - i*0.2);
}
else // 后50个计数周期LED亮度为(100-i)%
{
LED = 1;
delay_ms(i*0.2);
LED = 0;
delay_ms(10);
}
}
}
}
void Timer0_ISR() interrupt 1 // 定时器0中断服务程序
{
TH0 = 0xFC; // 重新设置计数初值,实现定时器每10ms产生一次中断
TL0 = 0x67;
}
```
该代码实现了通过定时器0产生PWM调节LED亮度,LED亮度从0调节到100,其中前50个计数周期LED亮度为50%,后50个计数周期LED亮度为(100-i)%。其中,delay_ms()函数为延时函数,可自行编写。