- unsigned char pwm_count = 0; // PWM 计数器
- unsigned int pwm_duty = 0; // PWM 占空比,取值范围扩大到 0~200
- unsigned char pwm_direction = 1; // PWM 增减方向,1 表示增加,0 表示减少
- unsigned int brightness_delay = 0; // 控制亮度变化的延时计数器
- void Timer1_Isr(void) interrupt 3 // 50us 中断
- {
- if (++pwm_count >= 200) pwm_count = 0; // 使 PWM 周期为 200,即 50us * 200 = 10ms 的周期
-
- // PWM 控制:根据 pwm_duty 调整 LED 的亮暗
- if (pwm_count < pwm_duty) P25 = 0;
- else P25 = 1;
-
- // 控制亮度变化频率,每隔10ms调整一次占空比
- if (++brightness_delay >= 10) { // 每10次中断(即10ms)调整一次亮度
- brightness_delay = 0;
-
- // 每次调节占空比,以实现1秒从暗到亮的变化
- if (pwm_direction) {
- pwm_duty++; // 增加亮度
- if (pwm_duty >= 200) pwm_direction = 0; // 达到最高亮度后,开始变暗
- } else {
- pwm_duty--; // 减少亮度
- if (pwm_duty == 0) pwm_direction = 1; // 达到最低亮度后,开始变亮
- }
- }
- }
复制代码
|