|
|
@@ -7,8 +7,9 @@
|
|
|
*/
|
|
|
|
|
|
#include <MyProject.h>
|
|
|
-LED_State_t ledState = LED_STATE_OFF;
|
|
|
-LED_Count_t ledCount;
|
|
|
+
|
|
|
+LED_Control_t ledCtrl;
|
|
|
+
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -30,7 +31,18 @@ void LED_GPIO_Init(void)
|
|
|
*/
|
|
|
void LED_State_Display(unsigned char Xn0)
|
|
|
{
|
|
|
- switch (ledState)
|
|
|
+ // 故障指示状态下 检测到故障码清除 立刻清除故障
|
|
|
+ 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:
|
|
|
@@ -38,14 +50,17 @@ void LED_State_Display(unsigned char Xn0)
|
|
|
// 存在故障 切入故障状态 清零计数
|
|
|
if (Xn0)
|
|
|
{
|
|
|
- ledState = LED_STATE_BLINK_FAULT;
|
|
|
- ledCount.PauseDelayCnt = 0;
|
|
|
- ledCount.BlinkCnt = 0;
|
|
|
+ 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)
|
|
|
{
|
|
|
- ledState = LED_STATE_ON;
|
|
|
+ ledCtrl.ledState = LED_STATE_ON;
|
|
|
LED_ON;
|
|
|
}
|
|
|
|
|
|
@@ -57,50 +72,95 @@ void LED_State_Display(unsigned char Xn0)
|
|
|
// 故障或停止时 关闭LED并切回关闭状态
|
|
|
if (!isCtrlPowOn || Xn0)
|
|
|
{
|
|
|
- ledState = LED_STATE_OFF;
|
|
|
+ ledCtrl.ledState = LED_STATE_OFF;
|
|
|
LED_OFF;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
- // 故障指示状态
|
|
|
- case LED_STATE_BLINK_FAULT:
|
|
|
- ledCount.PauseDelayCnt ++;
|
|
|
+ // 高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 (ledCount.PauseDelayCnt >= 500)
|
|
|
+ if (++ledCtrl.PauseDelayCnt >= 500)
|
|
|
{
|
|
|
- ledCount.PauseDelayCnt = 0;
|
|
|
+ ledCtrl.PauseDelayCnt = 0;
|
|
|
LEDPinONOFF;
|
|
|
|
|
|
- // 灭灯时计数
|
|
|
- if (LED_PIN)
|
|
|
+ if (LED_PIN) // 灭灯计数
|
|
|
{
|
|
|
- ledCount.BlinkCnt ++;
|
|
|
+ ledCtrl.BlinkCnt++;
|
|
|
|
|
|
- // 完成一个周期的闪烁 切换到延时等待模式
|
|
|
- if (ledCount.BlinkCnt >= Xn0)
|
|
|
- { ledState = LED_STATE_POST_FAULT_DELAY; }
|
|
|
+ if (ledCtrl.BlinkCnt >= ledCtrl.FaultHighBit)
|
|
|
+ {
|
|
|
+ LED_OFF;
|
|
|
+ ledCtrl.BlinkCnt = 0;
|
|
|
+ ledCtrl.ledState = LED_STATE_FAULT_HIGH_GAP;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 故障清除后 立刻回到熄灭状态
|
|
|
- if (!Xn0)
|
|
|
+ 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;
|
|
|
- ledState = LED_STATE_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;
|
|
|
|
|
|
- // 延迟等待
|
|
|
- case LED_STATE_POST_FAULT_DELAY:
|
|
|
- ledCount.PauseDelayCnt ++;
|
|
|
+ // 整码间隔 3s
|
|
|
+ case LED_STATE_FAULT_CYCLE_GAP:
|
|
|
+ if (++ledCtrl.PauseDelayCnt >= 3000)
|
|
|
+ {
|
|
|
+ ledCtrl.PauseDelayCnt = 0;
|
|
|
+ ledCtrl.ledState = LED_STATE_FAULT_HIGH_BLINK;
|
|
|
+ }
|
|
|
|
|
|
- // 延时满足或故障清除回到关闭状态
|
|
|
- if ((ledCount.PauseDelayCnt >= 1000) || (!Xn0))
|
|
|
- { ledState = LED_STATE_OFF; }
|
|
|
+ break;
|
|
|
|
|
|
+ default:
|
|
|
+ LED_OFF;
|
|
|
+ ledCtrl.ledState = LED_STATE_OFF;
|
|
|
break;
|
|
|
}
|
|
|
}
|