code sigp

    xiaoxiao2021-04-13  50

    /* 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; }
    转载请注明原文地址: https://ju.6miu.com/read-668670.html

    最新回复(0)