#define RUN_LED_PORT
#define RUN_LED_PIN
#define SD_LED_PORT
#define SD_LED_PIN
#define LEVEL_LED_PORT
#define LEVEL_LED_PIN_0
#define LEVEL_LED_PIN_1
#define LEVEL_LED_PIN_2
#define LEVEL_LED_PIN_3
#define LED_PIN_BACK
#define DETECT_PORT
#define DETECT_PIN_ON
#define DETECT_PIN_SINGLE
#define DETECT_PIN_BACK
#define CTRL_PORT
#define CTRL_PIN_CAMERA
#define CTRL_PIN_ROUTER
#define CTRL_PIN_BACK
#define AD_PORT
#define AD_PIN_V
#define AD_PIN_A
#define LED_STATE_ON 0
#define LED_STATE_OFF 1
#define VOLTAGE_LEVEL 4
#define VOLTAGE_FULL 4240 / 2
#define VOLTAGE_QUARTER_3
#define VOLTAGE_HALF
#define VOLTAGE_EMPTY
typedef
enum
{
NO_POWER_INPUT =
0,
POWER_INPUT =
1,
}MODE_RUN;
typedef
enum
{
ON_KEY_UP =
0,
ON_KEY_DOWN =
1,
}MODE_KEY_ON;
typedef
struct _tag_LEVEL_LED_STATE
{
u8 index;
u8 state;
MODE_RUN mode;
}LEVEL_LED_STATE;
LEVEL_LED_STATE gLevelLedState[VOLTAGE_LEVEL];
u32 AdVoltage_Get(u32 port, u32 pin, u8 state)
{
u32 voltage =
0;
return voltage;
}
MODE_KEY_ON DetectKeyOn_GetState(u32 port, u32 pin)
{
u32 PinState =
0;
PinState = GPIO_ReadBit();
if(
0 == PinState)
return ON_KEY_UP;
else if (
1 == PinState)
rerutn ON_KEY_DOWN;
}
void Led_Ctrl(u32 port, u32 pin, u8 state)
{
if(LED_STATE_ON == state)
GPIO_SetBit();
else if(LED_STATE_OFF == state)
GPIO_ResetBit();
}
void LevelLed_StateInit()
{
memset(&gLevelLedState[
0],
0, VOLTAGE_LEVEL *
sizeof(gLevelLedState[
0]));
}
void LevelLed_StateChange()
{
u8 LedIndex =
0;
for(LedIndex =
0; LedIndex < VOLTAGE_LEVEL; LedIndex++)
{
gLevelLedState[]
}
}
void Main_Proc()
{
LevelLed_StateChange();
}
void main()
{
while(
1)
{
Main_Proc();
}
}
void TIM1_Handler()
{
return;
}
#define RUN_LED_PORT
#define RUN_LED_PIN
#define SD_LED_PORT
#define SD_LED_PIN
#define LEVEL_LED_PORT
#define LEVEL_LED_PIN_0
#define LEVEL_LED_PIN_1
#define LEVEL_LED_PIN_2
#define LEVEL_LED_PIN_3
#define LED_PIN_BACK
#define DETECT_PORT
#define DETECT_PIN_ON
#define DETECT_PIN_SINGLE
#define DETECT_PIN_BACK
#define CTRL_PORT
#define CTRL_PIN_CAMERA
#define CTRL_PIN_ROUTER
#define CTRL_PIN_BACK
#define AD_PORT
#define AD_PIN_V
#define AD_PIN_A
#define VOLTAGE_LEVEL 4
#define VOLTAGE_FULL 4240 / 2
#define VOLTAGE_QUARTER_3
#define VOLTAGE_HALF
#define VOLTAGE_EMPTY 3140 / 2
#define LEVEL_LED_PERIOD 1000
typedef
enum
{
LED_STATE_ON =
0,
LED_STATE_OFF =
1,
}MODE_LED;
typedef
enum
{
NO_POWER_INPUT =
0,
POWER_INPUT =
1,
}MODE_RUN;
typedef
enum
{
ON_KEY_OFF =
0,
ON_KEY_ON =
1,
}MODE_KEY_ON;
typedef
enum
{
CTRL_OUTPUT_OFF =
0,
CTRL_OUTPUT_ON =
1,
}MODE_CTRL_OUTPUT;
typedef struct _tag_LED_TWINKLE
{
u32
index;
u32 TickCount;
MODE_LED TwinkleFlag;
}LED_TWINKLE;
typedef struct _tag_LEVEL_LED_STATE
{
MODE_RUN mode;
LED_TWINKLE TwinkleState;
MODE_LED LedFlag[VOLTAGE_LEVEL];
}LEVEL_LED_STATE;
LEVEL_LED_STATE gLevelLedState = {
0};
u32 gBatteryVoltage =
0;
u32 AdVoltage_Get(u32 port, u32 pin)
{
u32 voltage =
0;
return voltage;
}
void BatteryVlotage_GetValue()
{
gBatteryVoltage = AdVoltage_Get(AD_PORT , AD_PIN_V);
}
MODE_KEY_ON DetectKeyOn_GetState(u32 port, u32 pin)
{
u16 PinState =
0;
PinState = GPIO_ReadBit();
if(ON_KEY_OFF == PinState)
return ON_KEY_OFF;
else if (ON_KEY_ON == PinState)
rerutn ON_KEY_ON;
}
void Ctrl_Output(u32 port, u32 pin, MODE_CTRL state)
{
if(CTRL_OUTPUT_ON == state)
GPIO_SetBit();
else if(CTRL_OUTPUT_OFF == state)
GPIO_ResetBit();
}
void Led_Ctrl(u32 port, u32 pin, MODE_LED state)
{
if(LED_STATE_ON == state)
GPIO_SetBit();
else if(LED_STATE_OFF == state)
GPIO_ResetBit();
}
void LevelLed_ChangeModeByInput()
{
u16 state =
0;
state = DetectKeyOn_GetState();
if(ON_KEY_OFF == state)
{
gLevelLedState.mode = ON_KEY_OFF;
}
else if(ON_KEY_ON == state)
{
gLevelLedState.mode = ON_KEY_ON;
}
}
void LevelLed_InvertTwinkleLedFlag()
{
if (LED_STATE_ON == gLevelLedState.TwinkleState.TwinkleFlag)
{
gLevelLedState.TwinkleState.TwinkleFlag = LED_STATE_OFF;
}
else if (LED_STATE_OFF == gLevelLedState.TwinkleState.TwinkleFlag)
{
gLevelLedState.TwinkleState.TwinkleFlag = LED_STATE_ON;
}
}
void LevelLed_TickInc()
{
if(ON_KEY_ON == gLevelLedState.mode)
{
if(LEVEL_LED_PERIOD <= gLevelLedState.TickCount)
{
LevelLed_InvertTwinkleLedFlag();
}
else
{
gLevelLedState.TwinkleState.TickCount++;
}
}
}
void LevelLed_PosCycleSetFlag(u32 num, MODE_LED flag)
{
u32
index =
0;
for(
index =
0;
index < num;
index++)
{
gLevelLedState.LedFlag[
index] = flag;
}
}
void LevelLed_NegCycleSetFlag(u32 num, MODE_LED flag)
{
u32
index = VOLTAGE_LEVEL -
1;
for(
index = VOLTAGE_LEVEL -
1;
index >= VOLTAGE_LEVEL - num;
index--)
{
gLevelLedState.LedFlag[
index] = flag;
}
}
void LevelLed_CalcByVlotage()
{
if(VOLTAGE_EMPTY > gBatteryVoltage)
{
LevelLed_PosCycleSetFlag(VOLTAGE_LEVEL, LED_STATE_OFF);
}
else if(VOLTAGE_EMPTY <= gBatteryVoltage && gBatteryVoltage < VOLTAGE_HALF)
{
LevelLed_PosCycleSetFlag(
1, LED_STATE_ON);
LevelLed_NegCycleSetFlag(
3, LED_STATE_OFF);
}
else if(VOLTAGE_HALF <= gBatteryVoltage && gBatteryVoltage < VOLTAGE_QUARTER_3)
{
LevelLed_PosCycleSetFlag(
2, LED_STATE_ON);
LevelLed_NegCycleSetFlag(
2, LED_STATE_OFF);
}
else if(VOLTAGE_QUARTER_3 <= gBatteryVoltage && gBatteryVoltage < VOLTAGE_FULL)
{
LevelLed_PosCycleSetFlag(
3, LED_STATE_ON);
LevelLed_NegCycleSetFlag(
1, LED_STATE_OFF);
}
else if (VOLTAGE_FULL <= gBatteryVoltage)
{
LevelLed_NegCycleSetFlag(
4, LED_STATE_ON);
}
}
void LevelLed_GetTwinkleIndex()
{
if(ON_KEY_ON == gLevelLedState.mode)
return;
else if(ON_KEY_OFF == gLevelLedState.mode)
{
if(VOLTAGE_EMPTY > gBatteryVoltage)
{
gLevelLedState.TwinkleState.
index =
0;
}
else if(VOLTAGE_EMPTY <= gBatteryVoltage && gBatteryVoltage < VOLTAGE_HALF)
{
gLevelLedState.TwinkleState.
index =
1;
}
else if(VOLTAGE_HALF <= gBatteryVoltage && gBatteryVoltage < VOLTAGE_QUARTER_3)
{
gLevelLedState.TwinkleState.
index =
2;
}
else if(VOLTAGE_QUARTER_3 <= gBatteryVoltage && gBatteryVoltage < VOLTAGE_FULL)
{
gLevelLedState.TwinkleState.
index =
3;
}
else if (VOLTAGE_FULL <= gBatteryVoltage)
{
return;
}
}
}
void LevelLed_Ctrl(u32
index, MODE_LED flag)
{
switch (
index)
{
case 0:
Led_Ctrl(LEVEL_LED_PORT ,LEVEL_LED_PIN_0, flag);
break;
case 1:
Led_Ctrl(LEVEL_LED_PORT ,LEVEL_LED_PIN_1, flag);
break;
case 2:
Led_Ctrl(LEVEL_LED_PORT ,LEVEL_LED_PIN_2, flag);
break;
case 3:
Led_Ctrl(LEVEL_LED_PORT ,LEVEL_LED_PIN_3, flag);
break;
default:
break
}
}
void LevelLed_Play()
{
u32
index =
0;
if(ON_KEY_ON == gLevelLedState.mode)
{
for(
index =
0;
index < num;
index++)
{
LevelLed_Ctrl(
index, gLevelLedState.LedFlag[
index]);
}
}
else if(ON_KEY_OFF == gLevelLedState.mode)
{
for(
index =
0;
index < num;
index++)
{
if(
index == gLevelLedState.TwinkleState.
index)
{
LevelLed_Ctrl(
index, gLevelLedState.TwinkleState.TwinkleFlag);
}
else
{
LevelLed_Ctrl(
index, gLevelLedState.LedFlag[
index]);
}
}
}
}
void Main_Proc()
{
BatteryVlotage_GetValue();
LevelLed_ChangeModeByInput();
LevelLed_CalcByVlotage();
LevelLed_GetTwinkleIndex();
LevelLed_Play();
}
void main()
{
while(
1)
{
Main_Proc();
}
}
void TIM1_Handler()
{
LevelLed_TickInc();
return;
}