//******************************************************************** // Ver 1.0 // 2021.11.19 1、新建文件。 //******************************************************************** #ifndef __LED__H #define __LED__H #define LED_GPIO_MODE //#define LED_SEG_MODE //#define LED_PWM_MODE //******************************************************************** #ifdef LED_GPIO_MODE #define LED_GpioInit() do{ \ LED_D0Init(); \ LED_D1Init(); \ }while(0) //LED0控制,P72 #define LED_D0Init() GPIO_Init(P7, 2, 0, IO_OUT_PP) //LED0输出状态控制 #define LED_D0On() GPIO_SetBit(P7, 2) #define LED_D0Off() GPIO_ClrBit(P7, 2) #define LED_D0Turn() GPIO_TurnBit(P7, 2) //LED1控制,P73 #define LED_D1Init() GPIO_Init(P7, 3, 0, IO_OUT_PP) //LED1输出状态控制 #define LED_D1On() GPIO_SetBit(P7, 3) #define LED_D1Off() GPIO_ClrBit(P7, 3) //LED休眠设置 #define LED_Sleep() do{ \ LED_D0Off(); \ LED_D1Off(); \ }while(0) #endif //******************************************************************** #ifdef LED_PWM_MODE #define LED_GpioInit() PWM_Init() //LED0控制 #define LED_D0On() LED_Set(LED0, LED_ON) #define LED_D0Off() LED_Set(LED0, LED_OFF) //LED1控制 #define LED_D1On() LED_Set(LED1, LED_ON) #define LED_D1Off() LED_Set(LED1, LED_OFF) //LED2控制 #define LED_D2On() LED_Set(LED2, LED_ON) #define LED_D2Off() LED_Set(LED2, LED_OFF) //LED3控制 #define LED_D3On() LED_Set(LED3, LED_ON) #define LED_D3Off() LED_Set(LED3, LED_OFF) //LED4控制 #define LED_D4On() LED_Set(LED4, LED_ON) #define LED_D4Off() LED_Set(LED4, LED_OFF) //LED休眠设置 #define LED_Sleep() do{ \ LED_D0Off(); \ LED_D1Off(); \ LED_D2Off(); \ LED_D3Off(); \ LED_D4Off(); \ }while(0) #endif //******************************************************************** #ifdef LED_SEG_MODE #define LED_GpioInit() do{ \ LED_Seg1Init(); \ LED_Seg2Init(); \ LED_Seg3Init(); \ LED_D0Init(); \ }while(0) //LED_SEG1控制,PC15 #define LED_Seg1Init() GPIO_Init(GPIOC, GPIO_Pin_15, 1, IO_IN_NULL) #define LED_Seg1On() GPIO_Dir(GPIOC, GPIO_Pin_15, GpioDirOut) #define LED_Seg1Off() GPIO_Dir(GPIOC, GPIO_Pin_15 ,GpioDirIn) #define LED_Seg1High() GPIO_SetBit(GPIOC, GPIO_Pin_15) #define LED_Seg1Low() GPIO_ClrBit(GPIOC, GPIO_Pin_15) //LED_Seg2控制,PD00 #define LED_Seg2Init() GPIO_Init(GPIOD, GPIO_Pin_0, 1, IO_IN_NULL) #define LED_Seg2On() GPIO_Dir(GPIOD, GPIO_Pin_0, GpioDirOut) #define LED_Seg2Off() GPIO_Dir(GPIOD, GPIO_Pin_0 ,GpioDirIn) #define LED_Seg2High() GPIO_SetBit(GPIOD, GPIO_Pin_0) #define LED_Seg2Low() GPIO_ClrBit(GPIOD, GPIO_Pin_0) //LED_Seg3控制,PD01 #define LED_Seg3Init() GPIO_Init(GPIOD, GPIO_Pin_1, 1, IO_IN_NULL) #define LED_Seg3On() GPIO_Dir(GPIOD, GPIO_Pin_1, GpioDirOut) #define LED_Seg3Off() GPIO_Dir(GPIOD, GPIO_Pin_1 ,GpioDirIn) #define LED_Seg3High() GPIO_SetBit(GPIOD, GPIO_Pin_1) #define LED_Seg3Low() GPIO_ClrBit(GPIOD, GPIO_Pin_1) //LED0控制,PA5 #define LED_D0Init() GPIO_Init(GPIOA, GPIO_Pin_5, 0, IO_OUT_PP) //LED0输出状态控制 #define LED_D0Off() GPIO_ClrBit(GPIOA, GPIO_Pin_5) #define LED_D0On() GPIO_SetBit(GPIOA, GPIO_Pin_5) //扫描LED点亮操作宏, #define LEDn_On(LED_SegH, LED_SegL, LEDn) do{ \ if(LED_Info.Dn[LEDn].Flag.BITS.Sta != 0) \ { \ LED_SegH##On(); \ LED_SegH##High(); \ LED_SegL##On(); \ } \ }while(0) #define LED_D4On() LEDn_On(LED_Seg3, LED_Seg2, LED4) #define LED_D3On() LEDn_On(LED_Seg2, LED_Seg3, LED3) #define LED_D2On() LEDn_On(LED_Seg2, LED_Seg1, LED2) #define LED_D1On() LEDn_On(LED_Seg1, LED_Seg2, LED1) //LED休眠设置 #define LED_Sleep() do{ \ LED_Seg1On(); \ LED_Seg2On(); \ LED_Seg3On(); \ LED_Seg1Low(); \ LED_Seg2Low(); \ LED_Seg3Low(); \ LED_D0Off(); \ }while(0) #endif //******************************************************************** //LED编号, enum { LED0 = 0, LED1, //LED5, //LED6, LED_NUM_SIZE, }; //LED笔段编号 enum { LED_Seg1, LED_Seg2, LED_Seg3, }; //LED状态 enum { LED_OFF = 0, LED_ON, LED_PWM, LED_FLASH, LED_FLASH_CNT_MAX = 5, }; //******************************************************************** typedef struct { // INT16U Cnt; INT8U Dut; union { INT8U BYTES; struct { INT8U Flash: 1; INT8U Pwm: 1; INT8U Sta: 1; } BITS; } Flag; } LED_Str1; //LED状态标志位 typedef union { INT8U BYTES[2]; struct { INT8U Turn: 1; //换向标志 INT8U Pwm: 1; //PWM标志 INT8U Soc: 1; //显示SOC标志 INT8U Chg: 1; //充电标志 INT8U Wake: 1; //唤醒标志 INT8U Sync: 1; //同步标志 INT8U On: 1; //ON标志 INT8U Init: 1; //初始化 INT8U Off: 1; //LED直接关闭标志 INT8U Crg: 1; //充电器标志 INT8U CrlOff: 1; //充电器拔出 } BITS; } LED_Str2; typedef struct { LED_Str1 Dn[LED_NUM_SIZE]; LED_Str2 Flag; INT8U Cycle; //LED闪烁标志 INT8U Cnt; //LED闪烁频率计数 INT8U Dut; //LED调光占空比 INT8U SocStep; INT8U SegCnt; //段扫描计数 INT16U OnCnt; //显示计数 } LED_Str; extern LED_Str LED_Info; #define LED_InfoInit() MEM_Fill((INT8U *)&LED_Info, 0, sizeof(LED_Str)) //******************************************************************** //LED变量定义 #define LED_Cnt LED_Info.Cnt #define LED_Dut LED_Info.Dut #define LED_SegCnt LED_Info.SegCnt #define LED_SocStep LED_Info.SocStep //LED标志位定义 #define LED_FLAG_TURN LED_Info.Flag.BITS.Turn #define LED_FLAG_SOC LED_Info.Flag.BITS.Soc #define LED_FLAG_CHG LED_Info.Flag.BITS.Chg #define LED_FLAG_SYNC LED_Info.Flag.BITS.Sync #define LED_FLAG_ON LED_Info.Flag.BITS.On #define LED_FLAG_OFF LED_Info.Flag.BITS.Off #define LED_FLAG_CRGOFF LED_Info.Flag.BITS.CrlOff //LED闪烁频率 enum { LED_BASE_TIME = 11, LED_FLASH_0D5HZ = (2000UL / 2 / LED_BASE_TIME), LED_FLASH_1HZ = (1000UL / 2 / LED_BASE_TIME), LED_FLASH_2HZ = (500UL / 2 / LED_BASE_TIME), }; #define LED_Cycle LED_Info.Cycle #define LED_FlashFreq(Value) LED_Cycle=Value //LED闪烁周期 //LED点亮时间,计时时基100mS #define LED_OnCnt LED_Info.OnCnt #define LED_OnTime(Value) LED_OnCnt=Value*10 #define LED_OnState() (LED_OnCnt) #define LED_OnCount() do{ \ if(LED_OnCnt>0) LED_OnCnt--; \ if(LED_FLAG_SOC != 0) LED_SocStep++; \ }while(0) //******************************************************************** extern void LED_Init(void); extern void LED_Set(INT8U Name, INT8U Sta); extern void LED_Display(void); extern void LED_SegRefresh(void); extern void LED_CapDisplay(INT8U Value, INT8U nSec); extern void LED_SocDisplay(void); #endif