void led_update(enum led_status ls) { static bool is_pwm = false; static bool step_sign = false; static const int pwm_max = 100; static const int pwm_one_step = 10; static int pwm_last = 0; if (!is_pwm && ls == LST_NORMAL) { LED_ENABLE_PWM_MODE(); is_pwm = true; } else if (is_pwm && ls != LST_NORMAL) { LED_DISABLE_PWM_MODE(); is_pwm = false; } if (ls == LST_FAIL) { LED_ON(); } else if (ls == LST_NORMAL) { pwm_last += (step_sign) ? -pwm_one_step : pwm_one_step; if (0 > pwm_last || pwm_last > pwm_max) { step_sign = !step_sign; pwm_last += (step_sign) ? -pwm_one_step : pwm_one_step; } LED_PWM(pwm_last); } else { /* INIT */ LED_TOGGLE(); } }
/*=====================================================================================================*/ void LED_PWM_Shine( u16 LED_Sel, u16 LED_ShineNum, u16 LED_DelayTime ) { u16 Tmp_LED_Sel = 0; Tmp_LED_Sel = (u8)(LED_Sel>>4); while(LED_ShineNum--) { LED_PWM(LED_ON, Tmp_LED_Sel, LED_DelayTime); LED1 = ((LED_Sel&0x01) == 0x01) ? 0 : 1; LED2 = ((LED_Sel&0x02) == 0x02) ? 0 : 1; LED3 = ((LED_Sel&0x04) == 0x04) ? 0 : 1; LED4 = ((LED_Sel&0x08) == 0x08) ? 0 : 1; LED_PWM(LED_OFF, Tmp_LED_Sel, LED_DelayTime); LED1 = 1; LED2 = 1; LED3 = 1; LED4 = 1; } }