123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- #include "led.h"
- #define LIGHT_LEVEL_LOW (uint16_t)300
- #define LIGHT_LEVEL_HIGH (uint16_t)500
- uint16_t Light_Mode1_PeriodCnt = 0;
- uint16_t Light_Mode2_PeriodCnt = 0;
- uint16_t Light_Mode3_PeriodCnt = 0;
- uint16_t Light_Mode4_PeriodCnt = 0;
- uint16_t Light_Mode1_Count = 0;
- uint16_t Light_Mode2_Count = 0;
- uint16_t Light_Mode3_Count = 0;
- uint16_t Light_Mode4_Count = 0;
- uint16_t Light_ModeBreak_PeriodCnt = 0;
- uint16_t LedSoc_PeriodCnt = 0;
- uint16_t BrightlessLevel = 2;
- const uint16_t BrightlessLevelPulse[3] = {25, 75, 200};
- /*
- 设置亮度
- 0-1000
- 用于设置照明LED
- */
- void Light_SetBrightless(uint16_t Level)
- {
- TIM1_SetCompare1(Level);
- }
- /*
- 关灯模式
- */
- void Light_DisplayOff(void)
- {
- Light_SetBrightless(0);
- }
- /*
- 模式1:快闪,250ms亮,250ms灭,智能模式,白天熄灯,晚上亮灯,30s自动关闭
- 强光或静置时,只在模式切换时亮三次
- 函数运行周期1ms
- */
- void Light_DisplayMode1(uint16_t LightSensor, uint8_t Smart)
- {
- uint8_t OffFlag = 0;
- //判断是否自动关灯
- if(Smart == 0) //非智能模式
- {
- OffFlag = 0;
- }
- else //智能模式,根据光感强度确定是否自动关闭
- {
- if(LightSensor < LIGHT_LEVEL_LOW)
- OffFlag = 0;
- else if(LightSensor > LIGHT_LEVEL_HIGH)
- OffFlag = 1;
- }
- //自动关闭时在模式切换时亮三次
- if((OffFlag == 1)&&(Light_Mode1_Count >= 3))
- {
- Light_SetBrightless(0);
- }
- else
- {
- Light_Mode1_PeriodCnt++;
- if(Light_Mode1_PeriodCnt <= 150)
- {
- Light_SetBrightless(BrightlessLevelPulse[BrightlessLevel - 1]);
- }
- else if(Light_Mode1_PeriodCnt <= 300)
- {
- Light_SetBrightless(0);
- }
- else
- {
- Light_Mode1_PeriodCnt = 0;
- Light_Mode1_Count++;
- }
- }
- }
- /*
- 模式2:呼吸,800ms加到最亮,周期1s,智能模式,白天熄灯,晚上亮灯,30s自动关闭
- 函数运行周期1ms
- */
- void Light_DisplayMode2(uint16_t LightSensor, uint8_t Smart)
- {
- uint8_t OffFlag = 0;
- uint16_t LevelPluse = 0;
-
- //设定亮度
- if(BrightlessLevel == 1) LevelPluse = 25;
- else if(BrightlessLevel == 2) LevelPluse = 50;
- else if(BrightlessLevel == 3) LevelPluse = 100;
- //判断是否自动关灯
- if(Smart == 0) //非智能模式
- {
- OffFlag = 0;
- }
- else //智能模式,根据光感强度确定是否自动关闭
- {
- if(LightSensor < LIGHT_LEVEL_LOW)
- OffFlag = 0;
- else if(LightSensor > LIGHT_LEVEL_HIGH)
- OffFlag = 1;
- }
- //自动关闭时在模式切换时亮三次
- if((OffFlag == 1) && (Light_Mode2_Count >= 2))
- {
- Light_SetBrightless(0);
- }
- else
- {
- Light_Mode2_PeriodCnt++;
- if(Light_Mode2_PeriodCnt <= 750)
- {
- Light_SetBrightless((uint32_t)Light_Mode2_PeriodCnt * LevelPluse / 750 + 10);
- }
- else if(Light_Mode2_PeriodCnt <= 1500)
- {
- Light_SetBrightless((uint32_t)(1500 - Light_Mode2_PeriodCnt) * LevelPluse / 1500 + 10);
- }
- else
- {
- Light_Mode2_PeriodCnt = 0;
- Light_Mode2_Count++;
- }
- }
- }
- /*
- 模式3:爆闪,50ms亮,950ms灭,非智能
- 函数运行周期1ms
- */
- void Light_DisplayMode3(uint16_t LightSensor, uint8_t Smart)
- {
- uint8_t OffFlag = 0;
- //判断是否自动关灯
- if(Smart == 0) //非智能模式
- {
- OffFlag = 0;
- }
- else //智能模式,根据光感强度确定是否自动关闭
- {
- if(LightSensor < LIGHT_LEVEL_LOW)
- OffFlag = 0;
- else if(LightSensor > LIGHT_LEVEL_HIGH)
- OffFlag = 1;
- }
- //自动关闭时在模式切换时亮三次
- if((OffFlag == 1)&&(Light_Mode3_Count >= 3))
- {
- Light_SetBrightless(0);
- }
- else
- {
- Light_Mode3_PeriodCnt++;
- if(Light_Mode3_PeriodCnt <= 25)
- {
- Light_SetBrightless(BrightlessLevelPulse[BrightlessLevel - 1]);
- }
- else if(Light_Mode3_PeriodCnt <= 100)
- {
- Light_SetBrightless(0);
- }
- else if(Light_Mode3_PeriodCnt <= 125)
- {
- Light_SetBrightless(BrightlessLevelPulse[BrightlessLevel - 1]);
- }
- else if(Light_Mode3_PeriodCnt <= 500)
- {
- Light_SetBrightless(0);
- }
- else
- {
- Light_Mode3_PeriodCnt = 0;
- Light_Mode3_Count++;
- }
- }
- }
- /*
- 模式4:常亮
- 函数运行周期1ms
- */
- void Light_DisplayMode4(uint16_t LightSensor, uint8_t Smart)
- {
- uint8_t OffFlag = 0;
- //判断是否自动关灯
- if(Smart == 0) //非智能模式
- {
- OffFlag = 0;
- }
- else //智能模式,根据光感强度确定是否自动关闭
- {
- if(LightSensor < LIGHT_LEVEL_LOW)
- OffFlag = 0;
- else if(LightSensor > LIGHT_LEVEL_HIGH)
- OffFlag = 1;
- }
- //自动关闭时在模式切换时亮三次
- if((OffFlag == 1)&&(Light_Mode4_Count >= 3))
- {
- Light_SetBrightless(0);
- }
- else
- {
- Light_SetBrightless(BrightlessLevelPulse[BrightlessLevel - 1]);
- Light_Mode4_PeriodCnt++;
- if(Light_Mode4_PeriodCnt > 1000)
- {
- Light_Mode4_PeriodCnt = 0;
- Light_Mode4_Count++;
- }
- }
- }
- /*
- 刹车灯模式:高亮3s
- 函数运行周期1ms
- */
- void Light_DisplayBreak(uint8_t* Break)
- {
- Light_ModeBreak_PeriodCnt++;
- if(Light_ModeBreak_PeriodCnt <= 3000)
- {
- Light_SetBrightless(1000);
- }
- else
- {
- Light_SetBrightless(0);
- *Break = 0;
- }
- }
- /*
- 设置颜色
- 0-255
- 用于设置电量指示灯
- */
- void LedChg_SetColor(uint8_t Red, uint8_t Green, uint8_t Blue)
- {
- //R
- TIM2_SetCompare1(((uint32_t)500 * Red) >> 8);
- //G
- TIM2_SetCompare2(((uint32_t)500 * Green) >> 8);
- //B
- TIM2_SetCompare3(((uint32_t)500 * Blue) >> 8);
- }
- /*
- 电量指示灯关闭
- */
- void LedChg_Off(void)
- {
- TIM2_Cmd(DISABLE);
- }
- /*
- 电量指示灯
- 函数运行周期100ms
- ChgMode=0: 放电模式,Mode=1:充电模式
- Smart=0:非智能模式,Smart=1:智能模式
- */
- void Led_BatSoc_Display(uint8_t ChgMode, uint8_t Smart, uint8_t SOC)
- {
- uint8_t OnCnt1 = 0, OffCnt1, OnCnt2 = 0, OffCnt2 = 0;
-
- if((ChgMode == 1) && (SOC >= 100)) //充电状态且电量100%时,绿灯常亮
- {
- LedSoc_PeriodCnt = 0;
- LedChg_SetColor(0, 0xFA, 0);
- }
- else //充电状态电量低于100%,亮1s灭1s;放电状态电量低于10%快闪,电量高于10%慢闪
- {
- if(ChgMode == 1)
- {
- OnCnt1 = 10;
- OffCnt1 = 20;
- OnCnt2 = 30;
- OffCnt2 = 40;
- }
- else
- {
- if(Smart == 1)
- {
- if(SOC <= 10) //快闪2下
- {
- OnCnt1 = 2;
- OffCnt1 = 6;
- OnCnt2 = 8;
- OffCnt2 = 20;
- }
- else //慢闪2下
- {
- OnCnt1 = 2;
- OffCnt1 = 6;
- OnCnt2 = 8;
- OffCnt2 = 50;
- }
- }
- else
- {
- if(SOC <= 10) //快闪1下
- {
- OnCnt1 = 2;
- OffCnt1 = 20;
- OnCnt2 = 22;
- OffCnt2 = 40;
- }
- else //慢闪1下
- {
- OnCnt1 = 2;
- OffCnt1 = 50;
- OnCnt2 = 52;
- OffCnt2 = 100;
- }
- }
- }
- LedSoc_PeriodCnt++;
- if(LedSoc_PeriodCnt <= OnCnt1)
- {
- if(SOC <= 10) LedChg_SetColor(0xFA, 0, 0);
- else if(SOC <= 40) LedChg_SetColor(0xFA, 0xA0, 0);
- else if(SOC <= 80) LedChg_SetColor(0, 0xFA, 0xFA);
- else LedChg_SetColor(0, 0xFA, 0);
- }
- else if(LedSoc_PeriodCnt <= OffCnt1)
- {
- LedChg_SetColor(0, 0, 0);
- }
- else if(LedSoc_PeriodCnt <= OnCnt2)
- {
- if(SOC <= 10) LedChg_SetColor(0xFA, 0, 0);
- else if(SOC <= 40) LedChg_SetColor(0xFA, 0xA0, 0);
- else if(SOC <= 80) LedChg_SetColor(0, 0xFA, 0xFA);
- else LedChg_SetColor(0, 0xFA, 0);
- }
- else if(LedSoc_PeriodCnt <= OffCnt2)
- {
- LedChg_SetColor(0, 0, 0);
- }
- else
- {
- LedSoc_PeriodCnt = 0;
- }
- }
- }
|