Commit 2ede2ca0 authored by 李冠华's avatar 李冠华

🦄 refactor:背光改为使用背光库

parent 50121044
......@@ -518,6 +518,16 @@
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Application\Driving_Information\Data_Gear.h</FilePath>
</File>
<File>
<FileName>BackLight_User.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Application\BackLight\BackLight_User.c</FilePath>
</File>
<File>
<FileName>BackLight_User.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Application\BackLight\BackLight_User.h</FilePath>
</File>
</Files>
</Group>
<Group>
......
......@@ -15,6 +15,6 @@
#include "Data_Fuel\Data_Fuel.h"
#include "Driving_Information\Data_Time.h"
#include "Driving_Information\Data_Gear.h"
#include "BackLight\BackLight_User.h"
#endif
#ifndef _BACKLIGHT_H_
#define _BACKLIGHT_H_
#include "common.h"
extern uint8_t interact_PWM_Low_Duty;
void BackLight_Process(void);
void Interact_Light_Process(void);
void BackLight_Clock_All_Process(void);
extern uint8_t Get_Interact_Light_State(void);
#ifdef Platform_16Bit
#define Light_uint8_t unsigned char
#define Light_uint16_t unsigned int
#define Light_uint32_t unsigned long
#else
#define Light_uint8_t unsigned char
#define Light_uint16_t unsigned short
#define Light_uint32_t unsigned int
#define Light_uint64_t unsigned long long
#endif
#define Backlight_NTC_Max 10 /* 背光NTC阻值表格元素最大值 */
#define BacklightLevel_Max 10 /* 背光等级表格元素最大值 */
#define BackLight_Up_Timer 400 /* 背光精度上升1%的时间 单位 10ms */
#define BackLight_Down_Timer 200 /* 背光精度下降1%的时间 单位 10ms */
typedef struct //__attribute__((aligned(4)))
{
Light_uint16_t Temperature; /* 温度 */
Light_uint16_t Resistance; /* 阻值 */
} _st_Backlight_NtcTable;
typedef struct //__attribute__((aligned(4)))
{
Light_uint16_t BacklightLevel; /* 背光等级 */
Light_uint16_t BacklightDuty; /* 背光占空比 */
} _st_BacklightLevel;
typedef void (*SetPwm)(Light_uint16_t Pwm);
typedef Light_uint8_t (*SetPwmEnable)(void);
typedef Light_uint8_t (*SetPwmLevel)(void);
typedef Light_uint16_t (*GetNtcRes)(void);
typedef struct //__attribute__((aligned(4)))
{
SetPwm SetPwmCbk; /* 设置PWM回调函数 */
SetPwmEnable SetPwmEnCbk; /* 设置PWM使能回调函数 */
SetPwmLevel SetPwmLevelCbk; /* 背光等级回调函数 */
GetNtcRes NtcResCbk; /* 获取NTC电阻值回调函数 如无NTC传入空 */
_st_Backlight_NtcTable *BacklightNTCTable; /* NTC 数据表 */
_st_BacklightLevel *BacklightLevelTable; /* 背光等级数据表 */
} _st_BackLight_Init;
/**
* @brief 初始化背光模块,KL30/唤醒初始化调用一次即可
* @param backlightInit 背光初始化配置结构体指针,包含所需的回调函数和数据表。
* @note 调用此初始化前需先初始化硬件相关
*/
extern void Backlight_KL30_WakeUp_Init(_st_BackLight_Init *backlightInit);
/**
* @brief 初始化背光模块,休眠初始化调用一次即可
* @note 调用此初始化前需先初始化硬件相关
*/
extern void BackLight_Sleep_Init(void);
/**
* @brief 背光服务函数 必须10ms调用
*/
extern void BackLight_Service(void);
#endif
#include "BackLight_User.h"
#include "BackLight.h"
#include "TrmerM\TrmerM.h"
#define BACK_LIGHT_DAY 200
#define openLED_flag ((Get_CAN_Power_State() != PKEY_ON) && (Get_CAN_Power_State() != KEY_OFF) && (Get_CAN_Power_State() != POWER_CHECK_NULL))
uint8_t interact_PWM_Low_Duty = 0;
Backlight_User_OPT3004_st_t opt3004;
uint8_t g_u8BacklightUserDayTimecount = 0;
uint16_t u16Backlightcount = 0U;
uint8_t u8BacklightLevel = 0U;
/* 填写NTC阻值温度对应表*/
_st_Backlight_NtcTable BacklightNTCTable[Backlight_NTC_Max] =
{
/*温度 阻值 */
{ 550, 2709},
{ 600, 2224},
{ 650, 1832},
{ 700, 1518},
{ 750, 1263},
{ 800, 1056},
{ 850, 887},
{ 900, 748},
{ 950, 633},
{1000, 538},
};
/* 填写背光等级及占空比对应表 */
_st_BacklightLevel BacklightLevelTable[BacklightLevel_Max] =
{
/*背光等级 背光占空比 */
{1, 50}, /*夜间背光1级*/
{2, 100}, /*夜间背光2级*/
{3, 150}, /*夜间背光3级*/
{4, 200}, /*夜间背光4级*/
{5, 250}, /*夜间背光5级*/
{6, 100}, /*白天背光1级*/
{7, 200}, /*白天背光2级*/
{8, 300}, /*白天背光3级*/
{9, 400}, /*白天背光4级*/
{10, 500}, /*白天背光5级*/
};
/**
* @brief 获取背光使能回调函数
* 用于控制背光开启关闭
*/
uint8_t Get_BackLight_En(void)
{
if ((Common_Get_IG_Sts() == COMMON_POWER_ON) && (openLED_flag))
{
return 1;
}
else
{
return 0;
}
}
/**
* @brief 设置PWM回调函数
*/
void Set_Pwm_Cbk(uint16_t PWM)
{
TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, PWM);
}
/**
* @brief 获取当前背光等级回调函数
*/
uint8_t Get_BackLight_Level(void)
{
// uint16_t u8PositionStatus = 0U;
// // u8PositionStatus = (Line_In_Get_Status(LINE_IN_PositionLight));
// if (u8PositionStatus == 1U)
// {
// return u8BacklightLevel;
// }
// else
// {
// return u8BacklightLevel + 5U;
// }
return 5;
}
/**
* @brief 获取当前显示背光等级函数
*/
uint8_t Get_BackLight_Level_Display(void)
{
return u8BacklightLevel;
}
// /**
// * @brief 获取当前NTC阻值 ,本项目没有NTC热敏电阻采集
// */
// uint16_t Get_NTC_Rec(void)
// {
// // uint16_t u16NTCresistance = 0U;
// // u16NTCresistance = ADC_Read_Signal(ADC_CH_NTC_R);
// // return u16NTCresistance;
// }
void BackLight_User_Init(void)
{
_st_BackLight_Init BackLightInit;
BackLightInit.SetPwmCbk = Set_Pwm_Cbk;
BackLightInit.SetPwmEnCbk = Get_BackLight_En;
BackLightInit.SetPwmLevelCbk = Get_BackLight_Level;
BackLightInit.NtcResCbk = ((void *)0);
BackLightInit.BacklightNTCTable = &BacklightNTCTable[0];
BackLightInit.BacklightLevelTable = &BacklightLevelTable[0];
Backlight_KL30_WakeUp_Init(&BackLightInit);
// opt3004.u8DayandNightSts = DAY_SCREEN;
// opt3004.u32Result = 0;
u8BacklightLevel = 3U;
}
void BackLight_Process(void)
{
if (openLED_flag)
{
//电量
if ((Get_EleDial_AllSOC_lenth() == 2) || (checkself_seg_Flag == 1))
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT03_PIN00, RTE_GPIO_LEVEL_HIGH);//百位
RTE_GPIO_Set_Level(RTE_GPIO_PORT02_PIN04, RTE_GPIO_LEVEL_HIGH);
}
else if(Get_EleDial_AllSOC_lenth() == 1)
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT03_PIN00, RTE_GPIO_LEVEL_LOW);
RTE_GPIO_Set_Level(RTE_GPIO_PORT02_PIN04, RTE_GPIO_LEVEL_HIGH);
}
else
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT03_PIN00, RTE_GPIO_LEVEL_LOW);
RTE_GPIO_Set_Level(RTE_GPIO_PORT02_PIN04, RTE_GPIO_LEVEL_LOW);
}
}
else
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT03_PIN00, RTE_GPIO_LEVEL_LOW);
RTE_GPIO_Set_Level(RTE_GPIO_PORT02_PIN04, RTE_GPIO_LEVEL_LOW);
}
}
void BackLight_Clock_All_Process(void)
{
if (openLED_flag && (Charge_OFF_Flag == 0))
{
//总计时间
if ((Get_Clock_All_lenth() == 2)|| (checkself_seg_Flag == 1))
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN05, RTE_GPIO_LEVEL_HIGH); //总计工作时长统计千位_MCU_OUT
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN06, RTE_GPIO_LEVEL_HIGH); //总计工作时长统计百十位_MCU_OUT
}
else if(Get_Clock_All_lenth() == 1)
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN05, RTE_GPIO_LEVEL_LOW); //总计工作时长统计千位_MCU_OUT
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN06, RTE_GPIO_LEVEL_HIGH); //总计工作时长统计百十位_MCU_OUT
}
else
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN05, RTE_GPIO_LEVEL_LOW); //总计工作时长统计千位_MCU_OUT
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN06, RTE_GPIO_LEVEL_LOW); //总计工作时长统计百十位_MCU_OUT
}
}
else
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN05, RTE_GPIO_LEVEL_LOW); //总计工作时长统计千位_MCU_OUT
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN06, RTE_GPIO_LEVEL_LOW); //总计工作时长统计百十位_MCU_OUT
}
}
void Interact_Light_Process(void)
{
if ((Get_CAN_Power_State() != KEY_OFF) && (Get_CAN_Power_State() != POWER_CHECK_NULL) && (Charge_OFF_Flag == 0))
{
TimerM_PWM_set_duty(TIMERM_COUNTER0, TIMERM_CHD, interact_PWM_Low_Duty * 10);
}
else
{
TimerM_PWM_set_duty(TIMERM_COUNTER0, TIMERM_CHD, 1000);
}
}
uint8_t Get_Interact_Light_State(void)
{
uint8_t stata = 0x0;
if(interact_PWM_Low_Duty == 0)
{
stata = 0x1;
}
else if(interact_PWM_Low_Duty == 30)
{
stata = 0x2;
}
else if(interact_PWM_Low_Duty == 50)
{
stata = 0x3;
}
return stata;
}
#ifndef BACKLIGHT_USER_H__
#define BACKLIGHT_USER_H__
#include "Application.h"
#include "Components.h"
/*NTC 降背光策略采用BYD策略
L超过60℃需要有背光策略,背光策略优先依据BYD策略
L温度要设计≥2℃的温度回差
注:BYD策略,如下:
采集温度达到60度  输出背光=当前背光等级亮度*95%
采集温度达到65度  输出背光=当前背光等级亮度*90%
采集温度达到70度  输出背光=当前背光等级亮度*85%
采集温度达到75度  输出背光=当前背光等级亮度*80%
采集温度达到80度  输出背光=当前背光等级亮度*75%
采集温度达到85度  输出背光=当前背光等级亮度*70%
采集温度达到88度  输出背光=当前背光等级亮度*20%
采集温度达到90度  输出背光=当前背光等级亮度*10
温度上升
2S下降1%
温度下降
4S上升1%
*/
#define BACKLIGHT_DELAY_NUM 15U /*背光延迟点亮等待时长 = (BACKLIGHT_DELAY_NUM * 10ms) */
#define BLACK_TO_WHITE_LUMINOUS_VALUE 2000U /*从黑背景切换到白背景时的临界光感值*/
#define WHITE_TO_BLACK_LUMINOUS_VALUE 900U /*从白背景切换到黑背景时的临界光感值*/
#define SCREEN_SWITCHOVER_DELAY_NUM 15U /*白天夜间模式切换光感滤波时间 = SCREEN_SWITCHOVER_HOLD_NUM * 100ms) */
typedef enum{
DAY_SCREEN = 0, /*白天模式、白背景*/
NIGHT_SCREEN, /*夜间模式、黑背景*/
}BackLight_Screen_Status_en_t;
/*光感数据存储结构体*/
typedef struct __attribute__((aligned(4)))
{
uint32_t u32Result;
uint8_t u8DayandNightSts;
}Backlight_User_OPT3004_st_t;
extern Backlight_User_OPT3004_st_t opt3004;
extern uint16_t u16Backlightcount;
extern uint8_t u8BacklightLevel;
extern void BackLight_User_Init(void);
extern uint8_t Get_BackLight_Level_Display(void);
extern uint8_t interact_PWM_Low_Duty;
void BackLight_Process(void);
void Interact_Light_Process(void);
void BackLight_Clock_All_Process(void);
extern uint8_t Get_Interact_Light_State(void);
#endif
......@@ -52,6 +52,7 @@ static void Power_KL30_Init(void)
Sys_KL30_Init();
Checkself_Init();
LINE_IN_Init();
BackLight_User_Init();
LED_Driver_Init_Example();//注意顺序2
LED_Driver_Service_Immediate();
Telltales_Init();
......
......@@ -35,6 +35,7 @@ void Sys_10ms_Tasks(void)
Line_In_Debounce_Service(10u);
Can_BusOff_Recover(10u);
Data_CumulativeWorkHours_EEPROM_Write();
BackLight_Service();
}
void Sys_20ms_Tasks(void)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment