code sigp

/* IO define */
#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

/* App define */
#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;
    /* Voltage transfor */
    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;
}

/* LED控制 */
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()
{
    /* TIM1 register */

    return;
}
/* IO define */
#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

/* App define */
#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;
    /* Voltage transfor */
    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();
}

/* LED控制 */
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()
{
    /* TIM1 register */

    /* user app */
    LevelLed_TickInc();

    return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值