| 复制代码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;    // 达到最低亮度后,开始变亮
        }
    }
}
 
 
 |