- 定义两个 PWM 通道,分别控制两个 LED 灯的亮度
- 在主循环中,根据需求设置不同的 PWM 占空比,从而实现一个 LED 灯高亮,另一个 LED 灯低亮
#include <reg51.h>
sbit LED1 = P1^0; // LED1 引脚定义
sbit LED2 = P1^1; // LED2 引脚定义
void pwm_init() {
TMOD = 0x22; // 定时器 0 工作在 PWM 模式
TH0 = 0xFF; // 设置 PWM 周期
TL0 = 0x00;
ET0 = 1; // 允许定时器 0 中断
EA = 1; // 总中断允许
TR0 = 1; // 启动定时器 0
}
void pwm_update() interrupt 1 {
static unsigned char duty1 = 0xFF; // LED1 占空比
static unsigned char duty2 = 0x7F; // LED2 占空比
if (TL0 < duty1) {
LED1 = 1; // LED1 点亮
} else {
LED1 = 0; // LED1 熄灭
}
if (TL0 < duty2) {
LED2 = 1; // LED2 点亮
} else {
LED2 = 0; // LED2 熄灭
}
// 在这里可以根据需求动态调整 duty1 和 duty2 的值
}
void main() {
pwm_init(); // 初始化 PWM
while (1) {
// 在这里可以根据需求动态调整 duty1 和 duty2 的值
// 例如:
// duty1 = 0xFF; // LED1 全亮
// duty2 = 0x7F; // LED2 半亮
}
}
在 pwm_update()
中断函数里,根据 TL0
的值来控制两个 LED 灯的亮度。duty1
和 duty2
分别控制 LED1 和 LED2 的占空比,可以根据需求进行动态调整。
例如,将 duty1
设置为 0xFF
使 LED1 全亮,将 duty2
设置为 0x7F
使 LED2 半亮。
这样就可以实现一个 LED 灯高亮,另一个 LED 灯低亮的效果。也可以根据具体需求调整 duty1
和 duty2
的值,从而实现不同的亮度控制。