NULL
This commit is contained in:
484
user/Core/D9V2FR_DP2006V1000 .c
Executable file
484
user/Core/D9V2FR_DP2006V1000 .c
Executable file
@@ -0,0 +1,484 @@
|
||||
#include "../main/SystemInclude.h"
|
||||
|
||||
|
||||
#if(DP2006V1000)
|
||||
|
||||
__SAMPLE_STATUS_BIT_TypeDef sampleState;
|
||||
u16 offsetRType, offsetGCFX;
|
||||
|
||||
|
||||
u16 processNextTime, processIndex;
|
||||
|
||||
u16 voltageDetected[ANX], adcGain;
|
||||
|
||||
// <20><>ǰ<EFBFBD><C7B0>ʾ<EFBFBD><CABE>λ
|
||||
static PressureUnitType current_unit = PRESSURE_UNIT_PA; // Ĭ<><C4AC><EFBFBD><EFBFBD>ʾPa
|
||||
float pressure_value;
|
||||
extern volatile uint8_t display_update_flag; // <20><>ʾ<EFBFBD><CABE><EFBFBD>±<EFBFBD>־
|
||||
|
||||
extern volatile uint8_t key_press_flag;//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>־
|
||||
volatile uint8_t display_update_flag = 0; // <20><>ʾ<EFBFBD><CABE><EFBFBD>±<EFBFBD>־
|
||||
extern volatile Device_StateTypeDef g_device_state; // <20><>ʼ״̬<D7B4><CCAC><EFBFBD>ػ<EFBFBD>
|
||||
u8 typecflag=0;
|
||||
extern uint8_t g_auto_shutdown_flag;
|
||||
// ȫ<>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
static uint8_t g_ble_init_done = 0;
|
||||
|
||||
/******<2A><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>***************************************************************************************************************************************************************************************************************/
|
||||
void FlowRateDealAndOuputSub(void)
|
||||
{
|
||||
ComputeFlowRateIndexAndFlowRate();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
void ComputeFlowRateIndexAndFlowRate(void)
|
||||
{
|
||||
voltageDetected[NIDX ]= (u16)sampleData.TCode[IRHCode]; // ǿת<C7BF><D7AA>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>//IRH 0X8303
|
||||
voltageDetected[VRHX ]= (u16)sampleData.TCode[IRRCode]; // ǿת<C7BF><D7AA>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>//IRR 0X8304
|
||||
voltageDetected[IVHDX]= (u16)sampleData.TCode[URUCode]; // ǿת<C7BF><D7AA>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>//URU 0X8305
|
||||
voltageDetected[RHVOL]= (u16)sampleData.TCode[URHCode]; // ǿת<C7BF><D7AA>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>//URH 0X8306
|
||||
voltageDetected[VDUGX]= (u16)sampleData.TCode[BASCode]; // ǿת<C7BF><D7AA>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>//URU 0X8307 ADC<44><43><EFBFBD><D7BC>ѹ/2
|
||||
voltageDetected[TPCB]= (u16)sampleData.TCode[BATCode]; // ǿת<C7BF><D7AA>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>//URH 0X8308 <20><><EFBFBD>ص<EFBFBD>ѹ/3
|
||||
|
||||
voltageDetected[RHVOL]=voltageDetected[RHVOL]-32768;
|
||||
pressure_value=GetFlowRate(voltageDetected[RHVOL],CURVE_1ST);
|
||||
display_update_flag = 1;
|
||||
if( voltageDetected[TPCB]>50000)
|
||||
{
|
||||
typecflag=1;
|
||||
}
|
||||
}
|
||||
u16 WordSubFunction(u16 minuend, u16 subtractor)
|
||||
{
|
||||
u16 subResult;
|
||||
|
||||
subResult = minuend - subtractor;
|
||||
if(minuend >= subtractor)
|
||||
{
|
||||
if(subResult < 32768) subResult += 32768;
|
||||
else subResult = 65535;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(subResult < 32768) subResult = 0;
|
||||
else subResult -= 32768;
|
||||
}
|
||||
|
||||
return subResult;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******<2A>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>***************************************************************************************************************************************************************************************************************/
|
||||
void SamplingTimer_IRQ_Callback(void)
|
||||
{
|
||||
FlowProcessManagement();
|
||||
}
|
||||
|
||||
|
||||
void StartNormolFlowMeasurement(void)//ÿ125ms<6D><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||||
{
|
||||
|
||||
HWState.SampledOver = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
|
||||
StartSamplingTimerInterval(32768); //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƚ϶<C8BD>ʱ<EFBFBD><CAB1>,<2C><>ʼ<EFBFBD><CABC>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Timer_register_irq_callback(SamplingTimer,SamplingTimer_IRQ_Callback );//ע<><D7A2><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
processIndex = 0; //
|
||||
processNextTime = 0;
|
||||
FlowProcessManagement();//ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
|
||||
static void SetSystemForADCSample(u16 SampleSiagnl)//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
switch(SampleSiagnl)
|
||||
{
|
||||
case SIGNAL0:{
|
||||
sampleData.adcConfig.Gain0 = ADC_PGA_GAIN_1;
|
||||
sampleData.adcConfig.PChan0 = ADC0_AINP_AIN0;
|
||||
sampleData.adcConfig.NChan0 = ADC0_AINM_AVSS;//IRH
|
||||
sampleData.adcConfig.Gain1 = ADC_PGA_GAIN_1;
|
||||
sampleData.adcConfig.PChan1 = ADC1_AINP_AIN2;
|
||||
sampleData.adcConfig.NChan1 = ADC1_AINM_AVSS;//URU
|
||||
sampleData.adcConfig.SPS=SPS_488;
|
||||
|
||||
}break;
|
||||
case SIGNAL1: {
|
||||
sampleData.adcConfig.Gain0 = ADC_PGA_GAIN_1;
|
||||
sampleData.adcConfig.PChan0 = ADC0_AINP_AIN1;
|
||||
sampleData.adcConfig.NChan0 = ADC0_AINM_AVSS;//IRR
|
||||
sampleData.adcConfig.Gain1 = ADC_PGA_GAIN_1;
|
||||
sampleData.adcConfig.PChan1 = ADC1_AINP_AIN3;
|
||||
sampleData.adcConfig.NChan1 = ADC1_AINM_AVSS;//URH
|
||||
sampleData.adcConfig.SPS=SPS_488;
|
||||
}break;
|
||||
case SIGNAL2: {
|
||||
sampleData.adcConfig.Gain0 = ADC_PGA_GAIN_1;
|
||||
sampleData.adcConfig.PChan0 = ADC0_AINP_AIN4;
|
||||
sampleData.adcConfig.NChan0 = ADC0_AINM_AVSS;
|
||||
sampleData.adcConfig.Gain1 = ADC_PGA_GAIN_1;
|
||||
sampleData.adcConfig.PChan1 = ADC1_AINP_AIN7;
|
||||
sampleData.adcConfig.NChan1 = ADC1_AINM_AVSS;//<2F><><EFBFBD>ص<EFBFBD>ѹ/3.2
|
||||
sampleData.adcConfig.SPS=SPS_488;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SetNextProcess(void)//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(processIndex == 0){
|
||||
StopSamplingTimerInterval();//<2F>رղɼ<D5B2>ʱ<EFBFBD><CAB1>
|
||||
return;
|
||||
}
|
||||
u32 currentTAR = pTIM1->CNT;//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ֵ
|
||||
if(currentTAR > processNextTime) processNextTime = currentTAR + 5;
|
||||
ResetSamplingTimerInterval(processNextTime);
|
||||
}
|
||||
|
||||
void FlowProcessManagement(void)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>״̬<D7B4><CCAC>
|
||||
{
|
||||
switch(processIndex)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
HWState.SampledOver = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
|
||||
SetSystemForADCSample(SIGNAL0);//<2F><><EFBFBD><EFBFBD>SIGNAL0
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
processNextTime += 327; //20ms <20><><EFBFBD><EFBFBD>ֵ=65535/4000*t =
|
||||
processIndex=1;
|
||||
}break;
|
||||
case 1:
|
||||
{
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sampleData.TCode[IRHCode] = sampleData.ADCBuffer[0];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
sampleData.TCode[URUCode] = sampleData.ADCBuffer[1];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
SetSystemForADCSample(SIGNAL1);//<2F><><EFBFBD><EFBFBD>SIGNAL1
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
processNextTime += 327;//20ms
|
||||
processIndex=2;
|
||||
}break;
|
||||
case 2:
|
||||
{
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sampleData.TCode[IRRCode] = sampleData.ADCBuffer[0];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
sampleData.TCode[URHCode] = sampleData.ADCBuffer[1];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
SetSystemForADCSample(SIGNAL2);//<2F><><EFBFBD><EFBFBD>SIGNAL1
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
processNextTime += 327;//20ms
|
||||
processIndex=3;
|
||||
}break;
|
||||
case 3:
|
||||
{
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sampleData.TCode[BASCode] = sampleData.ADCBuffer[0];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
sampleData.TCode[BATCode] = sampleData.ADCBuffer[1];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
HWState.SampledOver = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
StopSamplingTimerInterval();//<2F>رղɼ<D5B2>ʱ<EFBFBD><CAB1>
|
||||
processIndex=4;
|
||||
}break;
|
||||
default : processIndex = 0; break;
|
||||
}
|
||||
SetNextProcess();
|
||||
}
|
||||
/******<2A><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>***************************************************************************************************************************************************************************************************************/
|
||||
void SwitchPressureUnit(void)
|
||||
{
|
||||
// 1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>λ (ѭ<><D1AD><EFBFBD>л<EFBFBD>)
|
||||
current_unit = (PressureUnitType)((int)current_unit + 1);
|
||||
if (current_unit > PRESSURE_UNIT_MBAR) { // <20><><EFBFBD>ġ<DEB8><C4A1><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
current_unit = PRESSURE_UNIT_PA;
|
||||
}
|
||||
// 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫת<D2AA><D7AA>pressure_value<75><65><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>Pa<50><61>λ
|
||||
}
|
||||
|
||||
double ConvertPressure(double value, PressureUnitType targetUnit, PressureUnitType originalUnit)
|
||||
{
|
||||
double valueInPa;
|
||||
|
||||
if (targetUnit == originalUnit) return value;
|
||||
// --- <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC>λת<CEBB><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><D7BC>λ Pa ---
|
||||
switch (originalUnit)
|
||||
{
|
||||
case PRESSURE_UNIT_MBAR:
|
||||
valueInPa = value * ONE_MBAR_TO_PA;
|
||||
break;
|
||||
case PRESSURE_UNIT_TORR:
|
||||
valueInPa = value * ONE_TORR_TO_PA;
|
||||
break;
|
||||
case PRESSURE_UNIT_MICRONS:
|
||||
valueInPa = value * ONE_MICRONS_TO_PA;
|
||||
break;
|
||||
case PRESSURE_UNIT_PA:
|
||||
valueInPa = value;
|
||||
break;
|
||||
default:
|
||||
return value; // δ֪<CEB4><D6AA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭֵ
|
||||
}
|
||||
|
||||
// --- <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BC>λ Pa ת<><D7AA>ΪĿ<CEAA>굥λ ---
|
||||
switch (targetUnit)
|
||||
{
|
||||
case PRESSURE_UNIT_MBAR:
|
||||
return valueInPa * ONE_PA_TO_MBAR;
|
||||
case PRESSURE_UNIT_TORR:
|
||||
return valueInPa * ONE_PA_TO_TORR;
|
||||
case PRESSURE_UNIT_MICRONS:
|
||||
return valueInPa * ONE_PA_TO_MICRONS;
|
||||
case PRESSURE_UNIT_PA:
|
||||
return valueInPa;
|
||||
default:
|
||||
return valueInPa; // δ֪Ŀ<D6AA>굥λ<EAB5A5><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Paֵ
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>32λ<32><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
* @param num: Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @retval <20><><EFBFBD>ֵ<EFBFBD>λ<EFBFBD><CEBB>
|
||||
*/
|
||||
static u8 GetDigitCount(u32 num)
|
||||
{
|
||||
u8 count = 0;
|
||||
if (num == 0) return 1; // 0 <20><>1λ<31><CEBB>
|
||||
while (num != 0)
|
||||
{
|
||||
num /= 10;
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
void OLED_DrawRect_Cache(u8 x, u8 y, u8 w, u8 h);
|
||||
|
||||
void Update_Pressure_Display(void)
|
||||
{
|
||||
// --- 1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD> ---
|
||||
#define FONT_WIDTH 12
|
||||
#define FONT_HEIGHT 24
|
||||
#define SCREEN_WIDTH 128
|
||||
#define RIGHT_ALIGN_MARGIN 2
|
||||
|
||||
u8 unit_str_len = 0;
|
||||
const char* unit_str = "";
|
||||
u32 int_part = 0;
|
||||
u32 decimal_part = 0;
|
||||
u8 num_len = 0;
|
||||
u8 has_decimal = 0;
|
||||
u8 decimal_places = 0;
|
||||
|
||||
double display_val;
|
||||
u8 current_x;
|
||||
u8 total_num_width;
|
||||
u8 display_x;
|
||||
|
||||
u8 fixed_erase_start_x;
|
||||
u8 fixed_erase_end_x;
|
||||
|
||||
// --- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ر<EFBFBD><D8B1><EFBFBD> ---
|
||||
u16 battery_adc = 0;
|
||||
u8 battery_level = 0;
|
||||
u8 i = 0;
|
||||
u8 bat_x = 0;
|
||||
u8 bat_y = 0;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD><C3A1><EFBFBD><EFBFBD><EFBFBD> 22<32><32><EFBFBD>߶<EFBFBD> 12
|
||||
u8 bat_w = 22;
|
||||
u8 bat_h = 12;
|
||||
|
||||
// --- 2. <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ֵ ---
|
||||
display_val = ConvertPressure((double)pressure_value / 1000.0, current_unit, PRESSURE_UNIT_PA);
|
||||
|
||||
// --- 3. <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
||||
has_decimal = 1;
|
||||
switch (current_unit)
|
||||
{
|
||||
case PRESSURE_UNIT_PA:
|
||||
decimal_places = 1; int_part = (u32)(display_val + 0.05f);
|
||||
decimal_part = (u32)(display_val * 10 + 0.5f) % 10;
|
||||
unit_str = "pa"; unit_str_len = 2; break;
|
||||
case PRESSURE_UNIT_MICRONS:
|
||||
decimal_places = 1; int_part = (u32)(display_val + 0.05f);
|
||||
decimal_part = (u32)(display_val * 10 + 0.5f) % 10;
|
||||
unit_str = "mcm"; unit_str_len = 3; break;
|
||||
case PRESSURE_UNIT_TORR:
|
||||
decimal_places = 3; int_part = (u32)(display_val + 0.0005f);
|
||||
decimal_part = (u32)(display_val * 1000 + 0.5f) % 1000;
|
||||
unit_str = "torr"; unit_str_len = 4; break;
|
||||
case PRESSURE_UNIT_MBAR:
|
||||
decimal_places = 2; int_part = (u32)(display_val + 0.0005f);
|
||||
decimal_part = (u32)(display_val * 100 + 0.5f) % 100;
|
||||
unit_str = "mbar"; unit_str_len = 4; break;
|
||||
}
|
||||
|
||||
num_len = GetDigitCount(int_part);
|
||||
|
||||
// --- 4. ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD> ---
|
||||
fixed_erase_start_x = 0;
|
||||
fixed_erase_end_x = SCREEN_WIDTH - RIGHT_ALIGN_MARGIN;
|
||||
OLED_FillArea(fixed_erase_start_x, 20, fixed_erase_end_x, 20 + FONT_HEIGHT);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>ֵ...
|
||||
current_x = SCREEN_WIDTH - RIGHT_ALIGN_MARGIN;
|
||||
current_x -= unit_str_len * FONT_WIDTH;
|
||||
OLED_ShowString(current_x, 20, (u8*)unit_str, FONT_HEIGHT, 1);
|
||||
|
||||
total_num_width = num_len * FONT_WIDTH;
|
||||
if (has_decimal) {
|
||||
total_num_width += FONT_WIDTH;
|
||||
total_num_width += decimal_places * FONT_WIDTH;
|
||||
}
|
||||
current_x -= total_num_width;
|
||||
display_x = current_x;
|
||||
OLED_ShowNum(display_x, 20, int_part, num_len, FONT_HEIGHT, 1);
|
||||
display_x += num_len * FONT_WIDTH;
|
||||
if (has_decimal) {
|
||||
OLED_ShowChar(display_x, 20, '.', FONT_HEIGHT, 1);
|
||||
display_x += FONT_WIDTH;
|
||||
OLED_ShowNum(display_x, 20, decimal_part, decimal_places, FONT_HEIGHT, 1);
|
||||
}
|
||||
|
||||
// --- 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>---
|
||||
battery_adc = voltageDetected[TPCB];
|
||||
|
||||
if(battery_adc >= 44761) battery_level = 4;
|
||||
else if(battery_adc >= 43646) battery_level = 3;
|
||||
else if(battery_adc >= 42532) battery_level = 2;
|
||||
else if(battery_adc >= 41418) battery_level = 1;
|
||||
else battery_level = 0;
|
||||
|
||||
// 2. ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
bat_x = 128 - bat_w - 2;
|
||||
bat_y = 0;
|
||||
|
||||
// 3. <20><><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD>ͱ߿<CDB1> (<28><><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><D5A3>ٻ<EFBFBD><D9BB><EFBFBD>)
|
||||
// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫʵ<C9AB>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
OLED_FillRect_White(bat_x, bat_y, bat_x + 22, bat_y + 12);
|
||||
// <20>м<EFBFBD><D0BC>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD> (<28>γɿ<CEB3><C9BF>ı߿<C4B1>)
|
||||
OLED_FillRect(bat_x + 1, bat_y + 1, bat_x + 21, bat_y + 11);
|
||||
|
||||
// 4. <20><><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
switch(battery_level)
|
||||
{
|
||||
case 4: // <20><><EFBFBD>磺<EFBFBD><E7A3BA><EFBFBD><EFBFBD>4<EFBFBD><34>
|
||||
OLED_FillRect_White(bat_x + 17, bat_y + 2, bat_x + 20, bat_y + 10);
|
||||
// ע<>⣺<EFBFBD><E2A3BA><EFBFBD><EFBFBD>û<EFBFBD><C3BB> break<61><6B><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʵ<EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><CDB8>Ч<EFBFBD><D0A7>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD>磬<EFBFBD><E7A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>2<EFBFBD><32>1<EFBFBD><31>
|
||||
case 3: // 3<><33><EFBFBD>磺<EFBFBD><E7A3BA><EFBFBD><EFBFBD>3<EFBFBD><33>
|
||||
OLED_FillRect_White(bat_x + 12, bat_y + 2, bat_x + 15, bat_y + 10);
|
||||
case 2: // 2<><32><EFBFBD>磺<EFBFBD><E7A3BA><EFBFBD><EFBFBD>2<EFBFBD><32>
|
||||
OLED_FillRect_White(bat_x + 7, bat_y + 2, bat_x + 10, bat_y + 10);
|
||||
case 1: // 1<><31><EFBFBD>磺<EFBFBD><E7A3BA><EFBFBD><EFBFBD>1<EFBFBD><31>
|
||||
OLED_FillRect_White(bat_x + 2, bat_y + 2, bat_x + 5, bat_y + 10);
|
||||
break; // <20><><EFBFBD><EFBFBD>
|
||||
case 0: // 0<><30><EFBFBD>磺ֻ<E7A3BA><D6BB>ʾ<EFBFBD>տ<D5BF><F2A3ACB2><EFBFBD><EFBFBD>ڲ<EFBFBD>
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// 5. <20><><EFBFBD><CDB9> (<28><><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>)
|
||||
OLED_FillRect_White(bat_x + 22, bat_y + 3, bat_x + 24, bat_y + 9);
|
||||
|
||||
|
||||
// --- 6. <20><><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2> ---
|
||||
OLED_Refresh_Line_Diff(0);
|
||||
OLED_Refresh_Line_Diff(1);
|
||||
|
||||
// ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>
|
||||
OLED_Refresh_Line_Diff(2);
|
||||
OLED_Refresh_Line_Diff(3);
|
||||
OLED_Refresh_Line_Diff(4);
|
||||
OLED_Refresh_Line_Diff(5);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƾ<EFBFBD><C6BE>α߿<DFBF><F2A3A8B2><EFBFBD><EFBFBD>䣩
|
||||
void OLED_DrawRect_Cache(u8 x, u8 y, u8 w, u8 h)
|
||||
{
|
||||
// <20>ϱ<EFBFBD>
|
||||
OLED_DrawLine(x, y, x + w - 1, y, 1);
|
||||
// <20>±<EFBFBD>
|
||||
OLED_DrawLine(x, y + h - 1, x + w - 1, y + h - 1, 1);
|
||||
// <20><><EFBFBD><EFBFBD>
|
||||
OLED_DrawLine(x, y, x, y + h - 1, 1);
|
||||
// <20>ұ<EFBFBD>
|
||||
OLED_DrawLine(x + w - 1, y, x + w - 1, y + h - 1, 1);
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED<45><44>˸<EFBFBD><CBB8>ʱ<EFBFBD><CAB1>
|
||||
static uint32_t led_timer = 0;
|
||||
static uint32_t shutdown_timer = 0;
|
||||
|
||||
void My_Timer2_Callback(void)
|
||||
{
|
||||
// LED <20><EFBFBD>
|
||||
led_timer++;
|
||||
if(led_timer >= 10) // 500ms
|
||||
{
|
||||
led_timer = 0;
|
||||
LHL_GPIO_TogglePin(LED_PIN_GPIO, LED_PIN);
|
||||
}
|
||||
|
||||
// <20>ػ<EFBFBD><D8BB><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
shutdown_timer++;
|
||||
if(shutdown_timer > 72000)
|
||||
{
|
||||
g_auto_shutdown_flag = 1;
|
||||
}
|
||||
|
||||
Key_Scan_Task();
|
||||
Unit_key();
|
||||
}
|
||||
|
||||
|
||||
void SystemPolling(void)
|
||||
{
|
||||
static uint8_t power_off_screen_cleared = 0;
|
||||
/* 1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢 (<28><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>) */
|
||||
if(mucSaveParams == PARAMS_READY)
|
||||
{
|
||||
SaveSysParams(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>漰Flash<73><68>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ʱ<EFBFBD>ϳ<EFBFBD><CFB3><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ﲻ<EFBFBD><EFB2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><CCAB>
|
||||
}
|
||||
if(HWState.SampledOver)
|
||||
{
|
||||
FlowRateDealAndOuputSub(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
if(comState.state.ReceivedData)
|
||||
{
|
||||
ReceivedDataProcessing();
|
||||
}
|
||||
/* 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ (<28><><EFBFBD><EFBFBD><EFBFBD>豸״̬<D7B4><CCAC><EFBFBD><EFBFBD>) */
|
||||
if(g_device_state == DEVICE_STATE_ON || typecflag == 1)
|
||||
{
|
||||
/* --- <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>״̬ --- */
|
||||
// Update_Pressure_Display(); // <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>Ƶ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>û<EFBFBD><C3BB><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>
|
||||
if(key_press_flag)
|
||||
{
|
||||
key_press_flag = 0;
|
||||
SwitchPressureUnit();
|
||||
Update_Pressure_Display(); // <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>Ƶ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>û<EFBFBD><C3BB><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>
|
||||
if(display_update_flag)
|
||||
{
|
||||
display_update_flag = 0; // <20><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Update_Pressure_Display();
|
||||
if(g_ble_init_done==0)//<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־λ
|
||||
{
|
||||
BLE_Application_Init();//<2F><>һ<EFBFBD>βɼ<CEB2><C9BC><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
g_ble_init_done=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!power_off_screen_cleared)
|
||||
{
|
||||
OLED_Clear();
|
||||
OLED_Refresh();
|
||||
power_off_screen_cleared = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´β<C2B4><CEB2><EFBFBD>ִ<EFBFBD><D6B4>
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user