| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- /**
- @copyright None
- @file led.c
- @author Comment Vivre
- @date 2025-12-19
- @brief None
- */
- #include <MyProject.h>
- LED_Control_t ledCtrl;
- /**
- @function LED_GPIO_Init
- @brief LED GPIO初始化
- @date 2025-12-19
- */
- void LED_GPIO_Init(void)
- {
- SetBit(LED_PXIN, LED_PINX);
- LED_OFF;
- }
- /**
- @function LED_State_Display
- @brief 指示运行与故障代码
- @param[in] Xn0: [输入/出] 故障代码
- @date 2025-05-30
- */
- void LED_State_Display(unsigned char Xn0)
- {
- // 故障指示状态下 检测到故障码清除 立刻清除故障
- if ((ledCtrl.ledState != LED_STATE_OFF ) && (ledCtrl.ledState != LED_STATE_ON))
- {
- if (Xn0 == 0)
- {
- LED_OFF;
- ledCtrl.ledState = LED_STATE_OFF;
- return;
- }
- }
-
- switch (ledCtrl.ledState)
- {
- // 关闭状态
- case LED_STATE_OFF:
-
- // 存在故障 切入故障状态 清零计数
- if (Xn0)
- {
- ledCtrl.ledState = LED_STATE_FAULT_HIGH_BLINK;
- ledCtrl.PauseDelayCnt = 0;
- ledCtrl.BlinkCnt = 0;
- ledCtrl.FaultHighBit = Xn0 >> 4;
- ledCtrl.FaultLowBit = Xn0 & 0x0F;
- LED_OFF;
- }
- // 开启状态且无故障 切入开启状态并打开LED
- else if (isCtrlPowOn)
- {
- ledCtrl.ledState = LED_STATE_ON;
- LED_ON;
- }
-
- break;
-
- // 开启状态
- case LED_STATE_ON:
-
- // 故障或停止时 关闭LED并切回关闭状态
- if (!isCtrlPowOn || Xn0)
- {
- ledCtrl.ledState = LED_STATE_OFF;
- LED_OFF;
- }
-
- break;
-
- // 高4位闪烁
- case LED_STATE_FAULT_HIGH_BLINK:
- if (ledCtrl.FaultHighBit == 0)
- {
- LED_OFF;
- ledCtrl.BlinkCnt = 0;
- ledCtrl.PauseDelayCnt = 0;
- ledCtrl.ledState = LED_STATE_FAULT_HIGH_GAP;
- break;
- }
-
- if (++ledCtrl.PauseDelayCnt >= 500)
- {
- ledCtrl.PauseDelayCnt = 0;
- LEDPinONOFF;
-
- if (LED_PIN) // 灭灯计数
- {
- ledCtrl.BlinkCnt++;
-
- if (ledCtrl.BlinkCnt >= ledCtrl.FaultHighBit)
- {
- LED_OFF;
- ledCtrl.BlinkCnt = 0;
- ledCtrl.ledState = LED_STATE_FAULT_HIGH_GAP;
- }
- }
- }
-
- break;
-
- // 高低位间隔 1s
- case LED_STATE_FAULT_HIGH_GAP:
- if (++ledCtrl.PauseDelayCnt >= 1000)
- {
- ledCtrl.PauseDelayCnt = 0;
- ledCtrl.ledState = LED_STATE_FAULT_LOW_BLINK;
- }
-
- break;
-
- // 低4位闪烁
- case LED_STATE_FAULT_LOW_BLINK:
- if (ledCtrl.FaultLowBit == 0)
- {
- LED_OFF;
- ledCtrl.BlinkCnt = 0;
- ledCtrl.PauseDelayCnt = 0;
- ledCtrl.ledState = LED_STATE_FAULT_CYCLE_GAP;
- break;
- }
-
- if (++ledCtrl.PauseDelayCnt >= 500)
- {
- ledCtrl.PauseDelayCnt = 0;
- LEDPinONOFF;
-
- if (LED_PIN)
- {
- if (++ledCtrl.BlinkCnt >= ledCtrl.FaultLowBit)
- {
- LED_OFF;
- ledCtrl.BlinkCnt = 0;
- ledCtrl.ledState = LED_STATE_FAULT_CYCLE_GAP;
- }
- }
- }
-
- break;
-
- // 整码间隔 3s
- case LED_STATE_FAULT_CYCLE_GAP:
- if (++ledCtrl.PauseDelayCnt >= 3000)
- {
- ledCtrl.PauseDelayCnt = 0;
- ledCtrl.ledState = LED_STATE_FAULT_HIGH_BLINK;
- }
-
- break;
-
- default:
- LED_OFF;
- ledCtrl.ledState = LED_STATE_OFF;
- break;
- }
- }
|