//******************************************************************** // Ver 1.0 // 2021.11.19 1、新建文件。 //******************************************************************** #include "config.h" LED_Str LED_Info; const INT8U LED_Tab[] = { // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 6, 6, 7, 7, 8, 9, 9, 10, 11, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 23, 24, 26, 28, 30, 32, 34, 37, 39, 42, 45, 48, 52, 56, 60, 64, 68, 73, 79, 84, 90, 97, 100, 100, 100, 100, 100, 100, 100, 100, 100, // 100,100,100,100,100,100, 100,100,100,100, }; void LED_Init(void) { LED_InfoInit(); LED_GpioInit(); LED_FlashFreq(LED_FLASH_2HZ); //未初始化时设置闪烁频率为2Hz } #if 0 void LED_CapDisplay(INT8U Value, INT8U nSec) { LED_OnTime(nSec); if((BATT_FLAG_CHG != 0) && (Value == 100)) //2017.5.27 充电电流大于200mA,电量达到100%,强制电量为99% { Value = 99; } if (Value == 0xff) { LED_Set(LED1, LED_OFF); LED_Set(LED2, LED_OFF); LED_Set(LED3, LED_OFF); LED_Set(LED4, LED_OFF); } else if (Value == 100) { LED_Set(LED1, LED_ON); LED_Set(LED2, LED_ON); LED_Set(LED3, LED_ON); LED_Set(LED4, LED_ON); } else if (Value >= 75) { LED_Set(LED1, LED_ON); LED_Set(LED2, LED_ON); LED_Set(LED3, LED_ON); if(BATT_FLAG_CHG != 0) { LED_Set(LED4, LED_FLASH); } else { LED_Set(LED4, LED_ON); } } else if(Value >= 50) { LED_Set(LED1, LED_ON); LED_Set(LED2, LED_ON); LED_Set(LED4, LED_OFF); if(BATT_FLAG_CHG != 0) { LED_Set(LED3, LED_FLASH); } else { LED_Set(LED3, LED_ON); } } else if(Value >= 25) { LED_Set(LED1, LED_ON); LED_Set(LED3, LED_OFF); LED_Set(LED4, LED_OFF); if(BATT_FLAG_CHG != 0) { LED_Set(LED2, LED_FLASH); } else { LED_Set(LED2, LED_ON); } } #if 0 else if(Value >= 20) { LED_Set(LED2, LED_OFF); LED_Set(LED3, LED_OFF); LED_Set(LED4, LED_OFF); if(BATT_FLAG_CHG != 0) { LED_Set(LED1, LED_FLASH); } else { LED_Set(LED1, LED_ON); } } #endif else if(Value >= 1) { LED_Set(LED2, LED_OFF); LED_Set(LED3, LED_OFF); LED_Set(LED4, LED_OFF); if(BATT_FLAG_CHG != 0) { LED_Set(LED1, LED_FLASH); } else { LED_Set(LED1, LED_ON); } } else { LED_Set(LED1, LED_FLASH); LED_Set(LED2, LED_OFF); LED_Set(LED3, LED_OFF); LED_Set(LED4, LED_OFF); } #if 0 //电量非0时闪烁闪烁频率2HZ,电量为0时闪烁频率为0.5HZ if(Value != 0) { LED_FlashFreq(LED_FLASH_2HZ); } else { LED_FlashFreq(LED_FLASH_0D5HZ); } #endif } #endif void LED_Set(INT8U Name, INT8U Sta) { if (Name > LED_NUM_SIZE) //超出范围直接返回 { return; } ATOMIC_Start(); LED_Info.Dn[Name].Flag.BYTES = 0; switch (Sta) { case LED_ON: LED_Info.Dn[Name].Dut = 100; LED_Info.Dn[Name].Flag.BITS.Sta = 1; break; case LED_PWM: LED_Info.Dn[Name].Flag.BITS.Pwm = 1; break; case LED_FLASH: LED_Info.Dn[Name].Flag.BITS.Sta = LED_FLAG_SYNC; LED_Info.Dn[Name].Flag.BITS.Flash = 1; break; default: //关闭LED break; } ATOMIC_Stop(); } #ifdef LED_SEG_MODE void LED_SegRefresh(void) { LED_Seg1Off(); LED_Seg2Off(); LED_Seg3Off(); LED_Seg1Low(); //2020.10.29 解决非点亮的LED微亮的情况。 LED_Seg2Low(); LED_Seg3Low(); #if 0 if (LED_OnState() == 0) { //LED_FLAG_SOC = 0; //LED_SocCnt = 0; return; } #endif switch (LED_SegCnt) { case 1: //LED1 ON LED_D1On(); break; case 2: //LED2 ON LED_D2On(); break; case 3: //LED3 ON LED_D3On(); break; //case 4: //LED4 ON // LED_D4On(); // break; default: //LED0 ON LED_D4On(); LED_SegCnt = 0; break; } LED_SegCnt++; } #endif #if 0 void LED_SocDisplay(void) { switch(LED_SocStep) { case 0: LED_FLAG_ON = 1; LED_FLAG_SOC = 1; //显示电量标志 #if 0 if(BATT_Rsoc > 10) { LED_Set(LED0, LED_OFF); LED_Set(LED1, LED_ON); } else { LED_Set(LED0, LED_ON); LED_Set(LED1, LED_OFF); } #endif if(BATT_Rsoc < 5) { LED_SocStep = 9; } LED_Set(LED1, LED_ON); LED_Set(LED2, LED_OFF); LED_Set(LED3, LED_OFF); LED_Set(LED4, LED_OFF); break; case 2: if(BATT_Rsoc <= 25) //2019.1.5 修改电量流水显示,只显示到电量位灯 { LED_SocStep = 9; } else { LED_Set(LED2, LED_ON); } break; case 4: if(BATT_Rsoc <= 50) { LED_SocStep = 9; } else { LED_Set(LED3, LED_ON); } break; case 6: if(BATT_Rsoc <= 75) { LED_SocStep = 9; } else { LED_Set(LED4, LED_ON); } break; case 8: if(BATT_Rsoc <= 75) { LED_SocStep = 9; } else { LED_Set(LED4, LED_ON); } break; case 10: case 14: case 18: //if(SBS_Soc > 10) LED_CapDisplay(0xff, 3); break; case 12: case 16: case 20: LED_CapDisplay(BATT_Rsoc, 3); //LED_Set(LED0, LED_ON); break; case 22: BATT_State = SYS_STA_ON; LED_FLAG_SOC = 0; LED_SocStep = 0; LED_FLAG_ON = 0; //2018.11.30 增加USB输出电量3秒显示一次,增加标志位 if(LED_FLAG_OFF != 0) { LED_FLAG_OFF = 0; //BATT_STATE=SYS_STA_SLEEP; LED_OnTime(0); //显示时间1秒 } if(BATT_Rsoc < 5) //电量低于10%,提示电量低10秒 { BATT_SleepDelayTime(6); //延时5秒进入休眠 BATT_FLAG_SOC = 2; LED_OnTime(5); //显示时间5秒 if(LED_FLAG_CRGOFF == 0) { LED_OnTime(5); //显示时间5秒 } else { LED_OnTime(3); //显示时间0秒 } } break; default: break; } } #endif #if 0 //LED显示刷新程序,刷新时基10mS code INT8U LED_Tab[] = {0x00, 0x01, 0x03, 0x07}; void LED_Marquee(INT8U Value) { if(LED_Buff[2] < 5) { LED_Buff[2]++; return; } LED_Buff[2] = 0; if(LED_Mask & 0x04) //检测最高位是否为1 { if(Value > 98) //电量转化为 { //LED_Buff[0]=3; LED_Buff[1] = LED_Tab[3]; } else if(Value > 50) { //LED_Buff[0]=2; LED_Buff[1] = LED_Tab[2]; } else if(Value > 20) { //LED_Buff[0]=1; LED_Buff[1] = LED_Tab[1]; } else { //LED_Buff[0]=0; LED_Buff[1] = LED_Tab[0]; } LED_Mask = LED_Buff[1]; if(PACK_FLAG_STA != STA_CHG) { LED_FLAG_CHG = 0; } } else { LED_Mask <<= 1; LED_Mask |= 0x01; LED_Buff[1] |= LED_Mask; } if(LED_Buff[1] & 0x01) { LED_Set(LED0, LED_ON); } else { LED_Set(LED0, LED_OFF); } if(LED_Buff[1] & 0x02) { LED_Set(LED1, LED_ON); } else { LED_Set(LED1, LED_OFF); } if(LED_Buff[1] & 0x04) { LED_Set(LED2, LED_ON); } else { LED_Set(LED2, LED_OFF); } } #endif #if 0 void LED_Display(void) { INT8U i; //LED显示延时到后,关闭显示 if (LED_OnState() == 0) { //LED_Set(LED0, LED_OFF); LED_Set(LED1, LED_OFF); LED_Set(LED2, LED_OFF); LED_Set(LED3, LED_OFF); LED_Set(LED4, LED_OFF); //return; } #if 0 //充电跑马灯显示电量 if(LED_FLAG_CHG != 0) { LED_Marquee(BATT_Soc); } #endif //LED闪烁 LED_Cnt ++; if (LED_Cnt >= LED_Cycle) //0.5Hz闪烁 { LED_Cnt = 0; for (i = 0; i < LED_NUM_SIZE; i++) { if (LED_Info.Dn[i].Flag.BITS.Flash != 0) //占空比100,亮 { LED_Info.Dn[i].Flag.BITS.Sta ^= 0x01; LED_FLAG_SYNC = LED_Info.Dn[i].Flag.BITS.Sta; //保存最后一下LED的状态标志到同步标志位 } } } //呼吸灯 if (LED_FLAG_TURN == 0) //PWM状态 { if (LED_Dut < 100) { LED_Dut++; } else { LED_FLAG_TURN = 1; } } else { if (LED_Dut > 0) { LED_Dut--; } else { LED_FLAG_TURN = 0; } } #ifdef LED_GPIO_MODE if (LED_Info.Dn[LED0].Flag.BITS.Sta != 0) //LED0 { LED0_On(); } else { LED0_Off(); } if (LED_Info.Dn[LED1].Flag.BITS.Sta != 0) //LED1 { LED_D1On(); } else { LED_D1Off(); } if(LED_Info.Dn[LED2].Flag.BITS.Sta != 0) //LED2 { LED_D2On(); } else { LED_D2Off(); } if(LED_Info.Dn[LED3].Flag.BITS.Sta != 0) //LED3 { LED_D3On(); } else { LED_D3Off(); } #if 0 if(LED_Info.Dn[LED4].Flag.BITS.Sta != 0) //LED4 { LED_D4On(); } else { LED_D4Off(); } #endif #endif } #endif