/******************************************************************************* * @Copyright (c) :(C)2017, Qingdao ieslab Co., Whn * @FileName :GP22Gas_lcd_app.c * @Author :Team * @Version :V1.0 * @Date :2017年8月25日 11:00:39 * @Description :the function of the entity of GP22Gas_lcd_app.c *******************************************************************************/ #include "type.h" #include "UWater_lcd_driver.h" #include "UWater_lcd_app.h" #include "UWater_gp22_app.h" #include "UWater_rtcc_app.h" #include "UWater_key_app.h" #include "UWater_power_app.h" #include "UWater_frame_app.h" #include "UWater_pt_app.h" #include "UWater_valve_app.h" #include "UWater_valve_driver.h" #include "nb_driver_bc25.h" #include "sys_processor.h" #include "UWater_sys.h" /*------------------------------ Variable Define -------------------------------------*/ //状态机状态变量 static u8 s_lcd_status_state; //表计状态指示状态变量 //static u8 s_lcd_rf_state; //表计无线状态指示状态机状态变量 static u8 s_lcd_time_state; //定时切屏状态机状态变量 //static u8 s_lcd_ram_state; //RAM监测状态机状态变量 static u8 s_lcd_key_state; //按键切屏状态机状态变量 //static u8 s_lcd_init_state; //初始化状态机状态变量 //static u8 s_lcd_up_state= 0; //static u8 s_lcd_characters_state=1;//固化字符指示状态变量 //static u8 s_lcd_VAL_state_SET = 1;// //static u8 s_lcd_VAL_Met_state = 1;// //static u8 s_lcd_VAL_Ram_state = 1;// //static u8 s_lcd_VAL_GSM_state = 1; //static u8 s_lcd_first_power_state; //菜单号 static u8 s_fst_num; //一级菜单的菜单号 static u8 s_sec_num; //二级菜单的菜单号 //定时器状态量 //static u32 s_Lcd_time_old_num = 0; //static u32 s_Lcd_time_num = 0; //表计运行备份数据 static u8 s_vol_app_state; //记录上次电池电压状态 static u8 s_low_flow_alarm_app_state; //记录上次超低流量报警信号状态 static u8 s_alarm_app_state; //记录上次报警状态 static u8 s_failure_app_state; //记录上次故障状态 static u8 s_active_RF_app_state; //记录上次正在无线通信状态 static u8 s_valve_app_state; //记录上次阀门状态 //static u8 s_lcd_check_gp30_msg; static u8 s_lcd_check_gp30_app_msg; //static u8 key_message =0; //static u8 s_lcd_valve_stat;//阀门状态变量 //static u8 s_pay_state=0;// 预付费状态 static u8 s_a1_index; //记录非检定状态下GP30数据索引 static u8 s_a2_index; //记录第二屏数据索引 static u8 s_a3_index; //记录第三屏数据索引 static u8 s_a4_index; //记录检定状态下GP30数据索引 static u32 s_a1_backup; //记录非检定状态下当前LCD显示的数据 static u32 s_a2_backup; //记录A2当前LCD显示的数据 static u32 s_a3_backup; //记录A3当前LCD显示的数据 static u32 s_a4_backup; //记录检定状态下当前LCD显示的数据 //static u16 s_nb_active_time;//NB活跃时间 /*------------------------------ function declare -------------------------------------*/ //static void LcdSet1sTimer(u32 time5ms_span); //static u8 LcdCheck1sTimer(void); static u32 GetA1Data(u8 index); static u32 GetA2Data(u8 index); static u32 GetA3Data(u8 index); static u32 GetA4Data(u8 index); static void LcdDispayFLoat(float lcd_data, u8 point); static void LcdDispayU32Data(u32 lcd_data, u8 point); static void LcdDisplayMenu(u8 num); static void LcdDisplayA1(u8 num); static void LcdDisplayA2(u8 num); static void LcdDisplayA3(u8 num); static void LcdDisplayA4(u8 num); /****************************************/ /************************************************* Function:void KeySet1sTimer(u16 time5ms_span) Description: 设置5ms定时器 Input: time5ms_span:时间 Return: SUCCESS:初始化成功;ERROR :初始化失败 Others:内部接口 *************************************************/ //static void LcdSet1sTimer(u32 time1s_span) //{ // s_Lcd_time_num = time1s_span * 1000 * 1000; // s_Lcd_time_old_num = Timer1usGetTick(); //} /************************************************* Function: u8 KeyCheck1sTimer(void) Description: 检查定时器当前值,如果为0则说明定时时间到 Input: void Return: 定时器当前值 Others: 内部接口 *************************************************/ //static u8 LcdCheck1sTimer(void) //{ // u32 tmp_count = 0; // tmp_count = Timer1usGetTick() - s_Lcd_time_old_num; // if(tmp_count >= s_Lcd_time_num) // { // return 0; // } // else // { // return 1; // } //} ///************************************************* //Function:void KeySet5msTimer(u16 time5ms_span) //Description: 设置5ms定时器 //Input: time5ms_span:时间 //Return: SUCCESS:初始化成功;ERROR :初始化失败 //Others:内部接口 //*************************************************/ //static void LcdSet_first5msTimer(u32 time5ms_span) //{ // s_Lcd_first_time_num = time5ms_span * 1000 * 5; // s_Lcd_first_time_old_num = Timer1usGetTick(); //} ///************************************************* //Function: u8 KeyCheck5msTimer(void) //Description: 检查定时器当前值,如果为0则说明定时时间到 //Input: void //Return: 定时器当前值 //Others: 内部接口 //*************************************************/ //static u8 Lcd_firstCheck5msTimer(void) //{ // u32 tmp_count = 0; // tmp_count = Timer1usGetTick() - s_Lcd_first_time_old_num; // if(tmp_count >= s_Lcd_first_time_num) // { // return 0; // } // else // { // return 1; // } //} /************************************************************************************* * @fun_name static void LcdUpdateData() * @brief LCD更新数据 * @param[in] None * @param[out] None * @retval None * @other None *************************************************************************************/ static void LcdUpdateData() { if (s_fst_num == A1 && s_sec_num != AB0) { if (s_a1_backup != GetA1Data(s_a1_index)) { LcdDisplayA1(s_sec_num); } } if (s_fst_num == A2 && s_sec_num != AB0) { if (s_a2_backup != GetA2Data(s_a2_index)) { LcdDisplayA2(s_sec_num); } } if (s_fst_num == A3 && s_sec_num != AB0) { if (s_a3_backup != GetA3Data(s_a3_index)) { LcdDisplayA3(s_sec_num); } } if (s_fst_num == A4 && s_sec_num != AB0) { if (s_a4_backup != GetA4Data(s_a4_index)) { LcdDisplayA4(s_sec_num); } } } /************************************************************************************* * @fun_name static void LcdDispayU32Data(u32 lcd_data, u8 point) * @brief LCD显示U32数 * @param[in] u32 lcd_data, u8 point * @param[out] None * @retval None * @other None *************************************************************************************/ static void LcdDispayU32Data(u32 lcd_data, u8 point) { s8 index = 8; u8 n; if (lcd_data != 0) { while (lcd_data && index >= 0) { LcdDisplayData(index--, lcd_data % 10); lcd_data /= 10; } } else { n=6-point; while(n&&(point!=0)) { LcdDisplayData(index--,0); n--; } if(0==point) // whn 2017-10-12 { LcdDisplayData(8,0); } } //显示小数点 switch(point) { case 0: { LcdDisplayFun(LcdGetDisplayFun()); break; } case 1: { LcdDisplayFun(LcdGetDisplayFun() | FUN_P1); break; } case 2: { LcdDisplayFun(LcdGetDisplayFun() | FUN_P2); break; } case 3: { LcdDisplayFun(LcdGetDisplayFun() | FUN_P3); break; } case 4: { LcdDisplayFun(LcdGetDisplayFun() | FUN_P4); break; } default: { LcdDisplayFun(LcdGetDisplayFun()); } } } ///************************************************************************************* // * @fun_name static void LcdDispayTimeU32Data(u32 lcd_time_data) // * @brief LCD显示u32数 // * @param[in] u32 lcd_data, u8 point // * @param[out] None // * @retval None // * @other None // *************************************************************************************/ //static void LcdDispayTimeU32Data(u32 lcd_time_data) //{ // if (lcd_time_data <100) // { // if (lcd_time_data == 0) // { // LcdDisplayData(7, 0); // LcdDisplayData(6, 0); // LcdDisplayData(5, 0); // } // else if(s_a1_backup < 10) // { // LcdDisplayData(6, 0); // LcdDisplayData(5, 0); // LcdDispayU32Data(s_a1_backup, 0); // } // else // { // LcdDisplayData(5, 0); // LcdDispayU32Data(s_a1_backup, 0); // } // } // else // { // s8 index = 7; // while (lcd_time_data && index >= 0) // { // LcdDisplayData(index--, lcd_time_data % 10); // lcd_time_data /= 10; // } // } //} /************************************************************************************* * @fun_name static void LcdDispayFLoat(float lcd_data, u8 point) * @brief LCD显示浮点数 * @param[in] float lcd_data, u8 point * @param[out] None * @retval None * @other None *************************************************************************************/ static void LcdDispayFLoat(float lcd_data, u8 point) { s8 index = 9; u64 udata = 0; float temp = lcd_data; if (temp < 0) { temp = -temp; } switch(point) { case 0: { temp=1000000*temp; LcdDisplayFun(LcdGetDisplayFun());//不显示小数点 break; } case 1: { temp=100000*temp; LcdDisplayFun(LcdGetDisplayFun() | FUN_P1 |FUN_P1G|FUN_P2G|FUN_P3G|FUN_P4G|FUN_P5G);//显示P1小数点 gaishanxiugai break; } case 2: { temp=10000*temp; LcdDisplayFun(LcdGetDisplayFun() | FUN_P2 |FUN_P2G|FUN_P3G|FUN_P4G|FUN_P5G);//显示P2小数点 break; } case 3: { temp=1000*temp; LcdDisplayFun(LcdGetDisplayFun() | FUN_P3 |FUN_P3G|FUN_P4G|FUN_P5G);//显示P3小数点 break; } case 4: { temp=100*temp; LcdDisplayFun(LcdGetDisplayFun() | FUN_P4 |FUN_P4G|FUN_P5G); //显示P4小数点 break; } case 5: { temp=10*temp; LcdDisplayFun(LcdGetDisplayFun() | FUN_P5 |FUN_P5G); //显示P5小数点 break; } default: { temp=temp; LcdDisplayFun(LcdGetDisplayFun());//不显示小数点 } } udata = (u64) (temp ); if (udata != 0) { while (udata && index >= 0) { LcdDisplayData(index--, udata % 10); udata /= 10; } } else { LcdDisplayData(9, 0);//gaishanxiugai } //显示小数点 if (point > 0 && point < 6) { LcdDisplayFun(LcdGetDisplayFun() | (FUN_REVERSE << point)); while (index >= (3 + point))//补零显示 { LcdDisplayData(index--, 0); } } //显示负号 if (index >=0&& (lcd_data < 0)) { LcdDisplayData(index--, DIS_HG); } } /************************************************************************************* * @fun_name static u32 GetA1Data(u8 index) * @brief LCD返回A1界面数据 * @param[in] index * @param[out] data * @retval None * @other None *************************************************************************************/ static u32 GetA1Data(u8 index) { u32 data = 0; if (index == 0x55) { data = RtccGetWorkHourApp(); //获取工作累计时间 } else if(index==GP30_APP_INS_FLOW) { data=Gp30CheckDataApp(GP30_APP_INS_FLOW); //获取瞬时流量 } else if( index == GP30_APP_TOTAL_FLOW) { data =Gp30CheckDataApp(GP30_APP_TOTAL_FLOW) ; //获取正向累计流量 } else if( index == GP30_APP_TOTAL_FLOW_REVERSE) { data =Gp30CheckDataApp(GP30_APP_TOTAL_FLOW_REVERSE) ; //获取逆向累计流量 } return data; } /************************************************************************************* * @fun_name static u32 GetA2Data(u8 index) * @brief LCD返回A2界面数据 * @param[in] index * @param[out] data * @retval None * @other None *************************************************************************************/ static u32 GetA2Data(u8 index) { u32 data = 0; if (index == 0x11) { //当前日期 static DateTime date; if (RtccGetDateTime(&date))//如果获得正确的时间 { data |= ((u32) date.s.year) << 16; data |= ((u32) date.s.month) << 8; data |= date.s.day; } else { data = 0xEEEEEE;//当获取的时间不正确 } } else if (index == 0x22) //当前时间 { static DateTime time; if (RtccGetDateTime(&time)) { data |= ((u32) time.s.hour) << 16; data |= ((u32) time.s.minute) << 8; data |= time.s.second; } else { data = 0xEEEEEE; } } else if(index==1) //口径 { data = FrameCheckParaApp(FramePara_DNx);//2019-11-11改善项目,将口径由 FrameCheckParaApp(19)改为 FrameCheckParaApp(0),兼容GP30 } else if(index==2)//版本号 { data = FrameCheckParaApp(FramePara_ProgVersion); } else if(index==4) { data = FrameCheckParaApp(FramePara_MetAddr0_3) ; //获取表计地址低4 } else if(index==3) { data = FrameCheckParaApp(FramePara_MetAddr4); //获取表记地址高1 } else if(index==5)//显示小流量系数 { data = Read_Flow_CofficientApp_For_LCD(6); } else if(index==6)//显示中1流量系数 { data=Read_Flow_CofficientApp_For_LCD(7); } else if(index==7)//显示中2流量系数 { data=Read_Flow_CofficientApp_For_LCD(8); } else if(index==8)//显示中3流量系数 { data=Read_Flow_CofficientApp_For_LCD(9); } else if(index==9)//显示大流量系数 { data=Read_Flow_CofficientApp_For_LCD(10); } else if(index==10)//显示boot版本号 { data=FrameCheckParaApp(FramePara_BootVersion); } else if(index ==11)//NB状态信息 { data = sys_get_net_state(); } return data; } /************************************************************************************* * @fun_name static u32 GetA3Data(u8 index) * @brief LCD返回A3界面数据 * @param[in] index * @param[out] data * @retval None * @other None *************************************************************************************/ static u32 GetA3Data(u8 index) { u8 data = 0; //u8 temp; u8 Lcd_Frame_state; //temp = s_lcd_check_gp30_msg; Lcd_Frame_state = s_lcd_check_gp30_app_msg; if(index == 0x01) { if (0x08 ==(Lcd_Frame_state & (0x08)))//bit3 管道无水 data的0 1 2 3位作为1界面的异常,代表为换能器老化,水温超限,表计装反,管道无水 { data |= 0x08; } else { data &= ~(0x08); } if (0x04 ==(Lcd_Frame_state & (0x04)))// bit2 表计装反 { data |= 0x04; } else { data &= ~(0x04); } if (0x02 == (Lcd_Frame_state & (0x02)))//bit1 水温超出温度等级范围 { data |= 0x02; } else { data &= ~(0x02); } if(0x40 == (Lcd_Frame_state & 0x40))//bit6 换能器老化 { data|= 0x01; } else { data &= (~0x01); } } else if (index == 0x02)// { // s_lcd_valve_stat = ValveGetStateApp(); //if(0x08 ==(temp &(0x08)))//bit3 GP30故障 data的4 5 6 7位作为2界面的异常 if(0x10 ==(Lcd_Frame_state &(0x10))) { //分别代表为 GP30故障,温度传感器短路,温度传感器断路,无线通信异常 data |= 0x10; } else { data &= ~(0x10); } // if(0x01==Check_Ip_Set_Message())//IP设置失败 // { // data |=0x20; // } // else // { // data&=~(0x20); // } if(NB_SS_Control_GetPara(NB_UploadFailTimes))//检查是否需要补报发送 { data |= 0x80;//需要补报,置起通信故障标志 } else { data &= ~(0x80);//不需要补报,清除通信故障标志 } #if defined(VALVE)//阀门故障标志 if(Sys_data_object.P1.ies_valve_paras.valve_err) { data |= 0x40; } else { data &= ~0x40; } #endif } return data; } /************************************************************************************* * @fun_name static u32 GetA4Data(u8 index) * @brief LCD返回A4界面数据 * @param[in] index * @param[out] data * @retval None * @other None *************************************************************************************/ static u32 GetA4Data(u8 index) { u32 data = 0; To_lcd_Float temp; if( index == GP30_APP_TOTAL_FLOW )//获取累计流量 { data=Gp30CheckTestDataApp(GP30_APP_TOTAL_FLOW); } else if (index ==GP30_APP_INS_FLOW) //获取瞬时流量 { data=Gp30CheckTestDataApp(GP30_APP_INS_FLOW_LCD); } else if(index==GP30_APP_DIFF)//TOF时间差 { // data= Gp22TimeDiffer(4); data=Gp30CheckTestDataApp(GP30_APP_DIFF); } else if(index==GP30_APP_TOF)//单程时间up顺流时间 { data= Gp30CheckTestDataApp(GP30_APP_TOF);//实时up单程时间 } else if(index==GP30_APP_DOWN) //单程时间down逆流时间 { data= Gp30CheckTestDataApp(GP30_APP_DOWN);//实时down单程时间 } else if(index==GP30_APP_TEMP)//温度值 { temp.gp22_float = TempCheckValueApp(); return temp.gp22_u32; } return data; } /************************************************************************************* * @fun_name void LcdDisplayMenu(u8 num) * @brief LCD显示一级菜单 * @param[in] num :1-5 * @param[out] None * @retval None * @other None *************************************************************************************/ static void LcdDisplayMenu(u8 num) { //显示效果如下A1 A2 A3 A4 LcdClearAll(); //清屏 if (num > 0 && num < 5) { LcdDisplayFun(LcdGetDisplayFun()); LcdDisplayData(3, DIS_HG); //显示- LcdDisplayData(4, DIS_A); //显示A LcdDisplayData(5, num); //显示编号 LcdDisplayData(6, DIS_HG); //显示- } else { LcdDisplayData(3, DIS_E); //显示E LcdDisplayData(4, DIS_E); //显示E LcdDisplayData(5, DIS_HG); //显示- LcdDisplayData(6, DIS_A); //显示A } } /************************************************************************************* * @fun_name void LcdDisplayA1(u8 num) * @brief LCD显示二级菜单A1 * @param[in] num:从1开始 * @param[out] None * @retval None * @other None *************************************************************************************/ static void LcdDisplayA1(u8 num) { To_lcd_Float temp; LcdClearAll(); //清屏 switch (num) { case A1B1: { // //精确5位小数 LcdDisplayFun(A1_ACCUMULATE_FLOW); //累计流量(显示分辨率为0.001m3) s_a1_index = GP30_APP_TOTAL_FLOW; s_a1_backup = GetA1Data(s_a1_index); temp.gp22_u32 =s_a1_backup; if (temp.gp22_float < A1_TOTAL_DISPLAY_4_D)//小于10方显示5位 { LcdDispayFLoat(temp.gp22_float / 100, 1); //累计流量(float(iEEE754),放大倍数100) } else //其他显示3位小数 { LcdDispayFLoat(temp.gp22_float / 100, 3); //累计流量(float(iEEE754),放大倍数100) } break; } case A1B2: { //逆流显示 LcdDisplayFun(A1_ACCUMULATE_FLOW_REVERSE); //累计逆向流量(显示分辨率为0.001m3) s_a1_index = GP30_APP_TOTAL_FLOW_REVERSE; s_a1_backup = GetA1Data(s_a1_index); temp.gp22_u32 =s_a1_backup; if (temp.gp22_float < A1_TOTAL_DISPLAY_2_D) { LcdDispayFLoat(-(temp.gp22_float / 100), 3); //累计流量(float(iEEE754),放大倍数100) } else if (temp.gp22_float < A1_TOTAL_DISPLAY_1_D) { LcdDispayFLoat(-(temp.gp22_float / 100), 4); //累计流量float(iEEE754),放大倍数100) } else if (temp.gp22_float < A1_TOTAL_DISPLAY_0_D) { LcdDispayFLoat(-(temp.gp22_float / 100), 5); //累计流量(float(iEEE754),放大倍数100) } else //数据过大,不显示小数点。 { LcdDispayFLoat(-(temp.gp22_float / 100), 6); //累计流量(float(iEEE754),放大倍数100) } break; } case A1B3: { LcdDisplayFun(A1_TIME_FLOW); //瞬时流量(显示分辨率为0.00001m3/h) s_a1_index = GP30_APP_INS_FLOW; s_a1_backup = GetA1Data(s_a1_index); LcdDispayFLoat(s_a1_backup / (float)65536.00/1000, 1); //0.00001m3/h) break; } case A1B4: { LcdDisplayFun(A1_ACCUMULATE_TIME); //累计运行时间(分辨率为1h) s_a1_index = 0x55; s_a1_backup = GetA1Data(s_a1_index); if(s_a1_backup < 10) { LcdDisplayData(7, 0); LcdDisplayData(6, 0); LcdDispayU32Data(s_a1_backup, 0); } else if(s_a1_backup < 100) { LcdDisplayData(6, 0); LcdDispayU32Data(s_a1_backup, 0); } else { LcdDispayU32Data(s_a1_backup, 0); } break; } case A1B5://全显 { LcdDisplayAll(); break; } default: { LcdDisplayData(2, DIS_E); //显示E LcdDisplayData(3, DIS_E); //显示E LcdDisplayData(4, DIS_A); //显示A LcdDisplayData(5, DIS_1); //显示1 } } } /************************************************************************************* * @fun_name void LcdDisplayA2(u8 num) * @brief LCD显示二级菜单A2 * @param[in] None * @param[out] None * @retval None * @other None *************************************************************************************/ //extern void setuploadflag(void); //u8 uploadcnt=0; static void LcdDisplayA2(u8 num) { LcdClearAll(); //清屏 LcdDisplayFun(LcdGetDisplayFun());//固化字符 switch (num) { case A2B1: { //显示当前日期 s_a2_index = 0x11; s_a2_backup = GetA2Data(s_a2_index); LcdDisplayData(1, (s_a2_backup >> 20)&0x0F); LcdDisplayData(2, (s_a2_backup >> 16)&0x0F); LcdDisplayData(3, DIS_HG); //显示- LcdDisplayData(4, (s_a2_backup >> 12)&0x0F); LcdDisplayData(5, (s_a2_backup >> 8)&0x0F); LcdDisplayData(6, DIS_HG); //显示- LcdDisplayData(7, (s_a2_backup >> 4)&0x0F); LcdDisplayData(8, (s_a2_backup >> 0)&0x0F); // uploadcnt=0; break; } case A2B2: { //显示当前时分秒 s_a2_index = 0x22; s_a2_backup = GetA2Data(s_a2_index); LcdDisplayData(1, (s_a2_backup >> 20)&0x0F); LcdDisplayData(2, (s_a2_backup >> 16)&0x0F); LcdDisplayData(3, DIS_HG); //显示- LcdDisplayData(4, (s_a2_backup >> 12)&0x0F); LcdDisplayData(5, (s_a2_backup >> 8)&0x0F); LcdDisplayData(6, DIS_HG); //显示- LcdDisplayData(7, (s_a2_backup >> 4)&0x0F); LcdDisplayData(8, (s_a2_backup >> 0)&0x0F); /* uploadcnt++; if(uploadcnt==10) { setuploadflag(); }*/ break; } case A2B3: { //显示口径1- 20 LcdDisplayData(1, 1); LcdDisplayData(2, DIS_HG); s_a2_index = 1; s_a2_backup = GetA2Data(s_a2_index); LcdDispayU32Data((s_a2_backup / 16 * 10 + s_a2_backup % 16), 0); break; } case A2B4: { //显示版本号2- b0.1 LcdDisplayData(1, 2); LcdDisplayData(2, DIS_HG); s_a2_index = 2; s_a2_backup = GetA2Data(s_a2_index); //0xB0, 0x10, 0x00, 0x00 LcdDisplayFun(FUN_P3); LcdDisplayData(5, (s_a2_backup >> 28)&0x0F); LcdDisplayData(6, (s_a2_backup >> 24)&0x0F); LcdDisplayData(7, (s_a2_backup >> 20)&0x0F); LcdDisplayData(8, (s_a2_backup >> 16)&0x0F); break; } case A2B5: { //显示出厂编号(通讯地址第一个字节) LcdDisplayData(1, 3); LcdDisplayData(2, DIS_HG); s_a2_index = 3; s_a2_backup = GetA2Data(s_a2_index); LcdDisplayData(3, (s_a2_backup >> 20)&0x0F); LcdDisplayData(4, (s_a2_backup >> 16)&0x0F); LcdDisplayData(5, (s_a2_backup >> 12)&0x0F); LcdDisplayData(6, (s_a2_backup >> 8)&0x0F); LcdDisplayData(7, (s_a2_backup >> 4)&0x0F); LcdDisplayData(8, (s_a2_backup >> 0)&0x0F); break; } case A2B6: { //地址后续字节 s_a2_index = 4; s_a2_backup = GetA2Data(s_a2_index); LcdDisplayData(1, (s_a2_backup >> 28)&0x0F); LcdDisplayData(2, (s_a2_backup >> 24)&0x0F); LcdDisplayData(3, (s_a2_backup >> 20)&0x0F); LcdDisplayData(4, (s_a2_backup >> 16)&0x0F); LcdDisplayData(5, (s_a2_backup >> 12)&0x0F); LcdDisplayData(6, (s_a2_backup >> 8)&0x0F); LcdDisplayData(7, (s_a2_backup >> 4)&0x0F); LcdDisplayData(8, (s_a2_backup >> 0)&0x0F); break; } case A2B7: { //显示小流量系数 LcdDisplayData(1, 4); LcdDisplayData(2, DIS_HG); s_a2_index = 5; s_a2_backup = GetA2Data(s_a2_index); //0x00010000; LcdDispayFLoat(s_a2_backup / 65536.00, 3); break; } case A2B8: { //显示中1流量系数 LcdDisplayData(1, 5); LcdDisplayData(2, DIS_HG); s_a2_index = 6; s_a2_backup = GetA2Data(s_a2_index); LcdDispayFLoat(s_a2_backup / 65536.00, 3); break; } case A2B9: { //显示中2流量系数 LcdDisplayData(1, 6); LcdDisplayData(2, DIS_HG); s_a2_index = 7; s_a2_backup = GetA2Data(s_a2_index); LcdDispayFLoat(s_a2_backup / 65536.00, 3); break; } case A2B10: { //显示中3流量系数 LcdDisplayData(1, 7); LcdDisplayData(2, DIS_HG); s_a2_index = 8; s_a2_backup = GetA2Data(s_a2_index); LcdDispayFLoat(s_a2_backup / 65536.00, 3); break; } case A2B11: { //显示大流量系数 LcdDisplayData(1, 8); LcdDisplayData(2, DIS_HG); s_a2_index = 9; s_a2_backup = GetA2Data(s_a2_index); LcdDispayFLoat(s_a2_backup / 65536.00, 3); break; } case A2B12: { //显示boot版本号 LcdDisplayData(1, 9); LcdDisplayData(2, DIS_HG); s_a2_index = 10; s_a2_backup = GetA2Data(s_a2_index); LcdDisplayFun(FUN_P3); LcdDisplayData(5, (s_a2_backup >> 12)&0x0F); LcdDisplayData(6, (s_a2_backup >> 8)&0x0F); LcdDisplayData(7, (s_a2_backup >> 4)&0x0F); LcdDisplayData(8, (s_a2_backup >> 0)&0x0F); break; } case A2B13: { //显示硬件版本- 00.14 LcdDisplayData(1, 10); LcdDisplayData(2, DIS_HG); s_a2_index = 2; s_a2_backup = GetA2Data(s_a2_index); LcdDisplayFun(FUN_P3); LcdDisplayData(5, (s_a2_backup >> 12)&0x0F); LcdDisplayData(6, (s_a2_backup >> 8)&0x0F); LcdDisplayData(7, (s_a2_backup >> 4)&0x0F); LcdDisplayData(8, (s_a2_backup >> 0)&0x0F); break; } case A2B14://NB状态信息 { s_a2_index = 11; s_a2_backup = GetA2Data(s_a2_index); UNION_4U8TOU32 tempdata; tempdata.datas = s_a2_backup; if((s_a2_backup&0xFF)==1)//初始化 { LcdDisplayData(0, 11); LcdDisplayData(1, DIS_HG); //主流程 LcdDisplayData(2, tempdata.data_buf[0]); LcdDisplayData(3, DIS_HG); //联网流程 LcdDisplayData(4, tempdata.data_buf[1]/10); LcdDisplayData(5, tempdata.data_buf[1]%10); //cereg LcdDisplayData(6, DIS_HG); LcdDisplayData(7, tempdata.data_buf[2]); //cgatt LcdDisplayData(8, DIS_HG); LcdDisplayData(9, tempdata.data_buf[3]); } if((s_a2_backup&0xFF)==2)//连服务器 { LcdDisplayData(0, 11); LcdDisplayData(1, DIS_HG); //主流程 LcdDisplayData(2, tempdata.data_buf[0]); LcdDisplayData(3, DIS_HG); //联网流程 LcdDisplayData(4, tempdata.data_buf[1]/10); LcdDisplayData(5, tempdata.data_buf[1]%10); //cereg LcdDisplayData(6, DIS_HG); LcdDisplayData(7, tempdata.data_buf[2]); //cgatt LcdDisplayData(8, DIS_HG); LcdDisplayData(9, tempdata.data_buf[3]); } if((s_a2_backup&0xFF)==3)//信号相关值 { //RSRP LcdDisplayData(0, DIS_HG); LcdDisplayData(1, (tempdata.data_buf[1]/100)); LcdDisplayData(2, (tempdata.data_buf[1]/10)%10); LcdDisplayData(3, (tempdata.data_buf[1]%10)); //SNR if(tempdata.data_buf[2]&0x80)//负数 { LcdDisplayData(4, DIS_HG); LcdDisplayData(5, (tempdata.data_buf[2]&0x7F)/10); LcdDisplayData(6, (tempdata.data_buf[2]&0x7F)%10); } else { LcdDisplayData(4, DIS_BLANK); LcdDisplayData(5, (tempdata.data_buf[2]/10)); LcdDisplayData(6, tempdata.data_buf[2]%10); } //CSQ LcdDisplayData(7, DIS_BLANK); LcdDisplayData(8, (tempdata.data_buf[3]/10)); LcdDisplayData(9, (tempdata.data_buf[3]%10)); } if((s_a2_backup&0xFF)==4)//蓝牙状态 { LcdDisplayData(0, 11); LcdDisplayData(1, DIS_HG); //供电状态 LcdDisplayData(2, (tempdata.data_buf[1])); //今日复位次数 LcdDisplayData(3, DIS_HG); LcdDisplayData(4, tempdata.data_buf[2]/10); LcdDisplayData(5, tempdata.data_buf[2]%10); } break; } default: { break; } } } /************************************************************************************* * @fun_name void LcdDisplayA3(u8 num) * @brief LCD显示二级菜单A3 * @param[in] None * @param[out] None * @retval None * @other None *************************************************************************************/ static void LcdDisplayA3(u8 num)//查询异常MSG,相应位置1,报警发生 { LcdClearAll(); //清屏 LcdDisplayFun(LcdGetDisplayFun());//固化字符 switch (num) { case A3B1://报警1-0000 { LcdDisplayData(1, 1); LcdDisplayData(2, DIS_HG); s_a3_index = 0x01; s_a3_backup = GetA3Data(s_a3_index); if ((s_a3_backup>>2) & 0x01)//显示在1-1000表计装反 { LcdDisplayData(5, 1); } else { LcdDisplayData(5, 0); } if ((s_a3_backup>>3) & 0x01)//显示在1-0100管道无水 { LcdDisplayData(6, 1); } else { LcdDisplayData(6, 0); } if ((s_a3_backup) & 0x01)// 显示在1-0010换能器老化 { LcdDisplayData(7, 1); } else { LcdDisplayData(7, 0); } if((s_a3_backup>>1) & 0x01)//显示在1-0001水温超限 { LcdDisplayData(8, 1); } else { LcdDisplayData(8, 0); } break; } case A3B2://故障2- 0000 { LcdDisplayData(1, 2); LcdDisplayData(2, DIS_HG); s_a3_index = 0x02; s_a3_backup = GetA3Data(s_a3_index); if ((s_a3_backup>>4) & 0x01)//显示在2-1000 GP30异常 { LcdDisplayData(5, 1); } else { LcdDisplayData(5, 0); } if((s_a3_backup>>5) & 0x01)//显示在2-0100 温度传感器异常 { LcdDisplayData(6, 1); } else { LcdDisplayData(6, 0); } if((s_a3_backup>>6) & 0x01)//阀门故障 { LcdDisplayData(7, 1); } else { LcdDisplayData(7, 0); } if ((s_a3_backup>>7) & 0x01)//显示在2-0001 上报异常 { LcdDisplayData(8, 1); } else { LcdDisplayData(8, 0); } break; } default: { break; } } } /************************************************************************************* * @fun_name void LcdDisplayA4(u8 num) * @brief LCD显示二级菜单A4 * @param[in] None * @param[out] None * @retval None * @other None *************************************************************************************/ static void LcdDisplayA4(u8 num) { To_lcd_Float temp; float temp1; LcdClearAll(); //清屏 switch (num) { case A4B1: { //精确5位小数 if(Sys_data_object.P3.LCD_NoTestFlag == 0x55) { LcdDisplayFun(A4_ACCUMULATE_FLOW_NOTEST); //累计流量(检定时显示分辨率为0.00001m3,显示单位改为L,即0.01L) } else { LcdDisplayFun(A4_ACCUMULATE_FLOW); //累计流量(检定时显示分辨率为0.00001m3,显示单位改为L,即0.01L) } s_a4_index = GP30_APP_TOTAL_FLOW; s_a4_backup = GetA4Data(s_a4_index); temp.gp22_u32 =s_a4_backup; LcdDispayFLoat(temp.gp22_float / 100000, 1); //累计流量(float(iEEE754),放大100000) break; } case A4B2: { //精确5位小数 if(Sys_data_object.P3.LCD_NoTestFlag == 0x55) { LcdDisplayFun(A4_TIME_FLOW_NOTEST); // 瞬时流量(检定时显示分辨率为0.0001m3/h) } else { LcdDisplayFun(A4_TIME_FLOW); // 瞬时流量(检定时显示分辨率为0.0001m3/h) } s_a4_index = GP30_APP_INS_FLOW; s_a4_backup = GetA4Data(s_a4_index); LcdDispayFLoat(s_a4_backup/ 65536.00/1000, 1);//参数待定 break; } case A4B3: { if(Sys_data_object.P3.LCD_NoTestFlag == 0x55) { LcdDisplayFun(A4_TOF_TIME_NOTEST); // TOF时间差(分辨率为1h) } else { LcdDisplayFun(A4_TOF_TIME); // TOF时间差(分辨率为1h) } s_a4_index = GP30_APP_DIFF; s_a4_backup = GetA4Data(s_a4_index); if (s_a4_backup >= 0x80000000) { s_a4_backup = s_a4_backup & 0x7FFFFFFF; temp1 = (float)((s_a4_backup) / 65536.0* (-25.0));//参数待定 } else { temp1 =(float)((s_a4_backup) / 65536.0*25.0); //参数待定 } LcdDispayFLoat(temp1/100, 0);//ps break; } case A4B4: { if(Sys_data_object.P3.LCD_NoTestFlag == 0x55) { LcdDisplayFun(A4_SINGLE_TIME_NOTEST); // 单程时间up(分辨率为1h) } else { LcdDisplayFun(A4_SINGLE_TIME); // 单程时间up(分辨率为1h) } LcdDisplayData(1, 1); LcdDisplayData(2, DIS_HG); s_a4_index = GP30_APP_TOF; s_a4_backup = GetA4Data(s_a4_index); temp1 =(float)(s_a4_backup / 65536.0*25.0);//参数待定 LcdDispayFLoat(temp1/10000, 0); //单位为ns break; } case A4B5: { if(Sys_data_object.P3.LCD_NoTestFlag == 0x55) { LcdDisplayFun(A4_SINGLE_TIME_NOTEST); // 单程时间down(分辨率为1h) } else { LcdDisplayFun(A4_SINGLE_TIME); // 单程时间down(分辨率为1h) } LcdDisplayData(1, 2); LcdDisplayData(2, DIS_HG); s_a4_index = GP30_APP_DOWN; s_a4_backup = GetA4Data(s_a4_index); temp1 = (float) ((s_a4_backup) / 65536.0*25.0 );//参数待定 LcdDispayFLoat(temp1/10000, 0); //单位为ns break; } case A4B6: { if(Sys_data_object.P3.LCD_NoTestFlag == 0x55) { LcdDisplayFun(A4_Tem_NOTEST); // 温度分辨率为0.1摄氏度 } else { LcdDisplayFun(A4_Tem); // 温度分辨率为0.1摄氏度 } #if WENDU_FANSUAN_OPEN LcdDisplayData(1, DIS_F);//显示F----只有反算程序显示 #endif s_a4_index = GP30_APP_TEMP; s_a4_backup = GetA4Data(s_a4_index); temp.gp22_u32 = s_a4_backup; LcdDispayFLoat(temp.gp22_float, 3); break; } default: { LcdDisplayData(3, DIS_E); //显示E LcdDisplayData(4, DIS_E); //显示E LcdDisplayData(5, DIS_A); //显示A LcdDisplayData(6, DIS_4); //显示4 } } } /************************************************************************************* * @fun_name void LcdInitApp() * @brief LCD应用层初始化 * @param[in] None * @param[out] None * @retval None * @other None *************************************************************************************/ void LcdInitApp() { //状态机状态变量 s_lcd_status_state = 0; //表计状态指示状态机状态变量 // s_lcd_rf_state = 0; //表计无线状态指示状态机状态变量 s_lcd_time_state = 0; //定时切屏状态机状态变量 // s_lcd_ram_state = 0; //RAM监测状态机状态变量 s_lcd_key_state = 0; //按键切屏状态机状态变量 // s_lcd_init_state = 0; //初始化状态机状态变量 // s_lcd_characters_state=1;//初始化固化字符状态变量 // s_lcd_valve_stat = 0; // s_lcd_first_power_state = 0; //菜单号 if(Gp30GetTestRamFlag() == GP30_COPY_RESET_TEST_FLAG) { s_fst_num = A4; s_sec_num = A4B1; } else { s_fst_num = A1; //一级菜单的菜单号 s_sec_num = A1B1; //二级菜单的菜单号 } //表计运行备份数据 s_vol_app_state = NORMAL_POWER; //记录上次电池电压状态 // s_valve_state = 0x40; //记录上次阀门状态 s_low_flow_alarm_app_state = 0; //记录上次超低流量报警信号状态 s_alarm_app_state = 0; //记录上次报警状态 s_failure_app_state = 0; //记录上次故障状态 s_valve_app_state = 0; s_active_RF_app_state =1; //记录上次正在无线通信状态 1为空闲 s_a1_backup = 0; //记录非检定状态下当前LCD显示的数据 s_a4_backup = 0; //记录检定状态下当前LCD显示的数据 } /************************************************************************************* * @fun_name u8 LcdCheckStateApp() * @brief LCD返回检定状态 * @param[in] None * @param[out] None * @retval None * @other None *************************************************************************************/ u8 LcdCheckStateApp() { if (s_fst_num == A4) { return 01; } else { return 10; } } /************************************************************************************* * @fun_name u8 LcdIfSleepApp() * @brief LCD应用层是否允许休眠 * @param[in] None * @param[out] None * @retval None * @other None *************************************************************************************/ u8 LcdIfSleepApp() { if (s_fst_num == A2 && s_sec_num == A2B2)//系统时间界面不休眠 { return FALSE; } else if (s_fst_num == A4 && s_sec_num != AB0)//检定状态不休眠 { return FALSE; } else if (s_lcd_status_state != 0)//表计特殊状态显示完 { return FALSE; } else { return TRUE; } } /************************************************************************************* * @fun_name u16 LcdCheckMeumApp() * @brief LCD返回菜单号 * @param[in] None * @param[out] None * @retval None * @other None *************************************************************************************/ u16 LcdCheckMeumApp() { return s_sec_num | ((u16) s_fst_num << 8); } /******************************************************************************* * @fun_name: lcd_alarmCheckMsgSys() * @brief : 报警检测 * @param[in] : None * @param[out]: None * @retval : None * @other : ******************************************************************************/ u8 lcd_alarmCheckWarningMsg(void) { if ((s_lcd_check_gp30_app_msg & 0x40)|| //低振幅 (s_lcd_check_gp30_app_msg & 0x02)|| //水温超出温度等级范围 (s_lcd_check_gp30_app_msg & 0x04)|| //倒转 (s_lcd_check_gp30_app_msg & 0x08) //无水 ) //屏显报警 { return 1; } else { return 0; } } /******************************************************************************* * @fun_name: lcd_alarmCheckMsgSys() * @brief : 故障检测 * @param[in] : None * @param[out]: None * @retval : None * @other : ******************************************************************************/ u8 lcd_alarmCheckFaultMsg(void)//T2故障,屏显故障 { if ((NB_SS_Control_GetPara(NB_UploadFailTimes)|| //需要补报,说明通信故障 (s_lcd_check_gp30_app_msg & 0x10)) || //GPXX异常 (s_lcd_check_gp30_app_msg & 0x80) || //GPXX通信故障 (s_lcd_check_gp30_app_msg & 0x01) //过流 #if defined(VALVE)//阀门故障标志 ||(Sys_data_object.P1.ies_valve_paras.valve_err) #endif ) { return 1; } else { return 0; } } /******************************************************************************* * @fun_name: LcdDispalyMetStatus() * @brief : LCD实时显示表计报警、故障等状态(特殊字符) * @param[in] : None * @param[out]: None * @retval : None * @other : ******************************************************************************/ void LcdDispalyMetStatus() { s_lcd_check_gp30_app_msg =Gp30CheckErrDataApp(); switch (s_lcd_status_state) { case 0: { if (PowerCheckStatusSys ()!= s_vol_app_state)//T5电压低 { s_vol_app_state = PowerCheckStatusSys (); s_lcd_status_state = 1; } if ((s_lcd_check_gp30_app_msg & 0x20) != s_low_flow_alarm_app_state) //T4超低流量报警(bit5) { s_low_flow_alarm_app_state = s_lcd_check_gp30_app_msg & 0x20; s_lcd_status_state = 1; } if (lcd_alarmCheckWarningMsg() != s_alarm_app_state)//T1报警 { s_alarm_app_state = lcd_alarmCheckWarningMsg(); s_lcd_status_state = 1; } if (lcd_alarmCheckFaultMsg() != s_failure_app_state )//T2故障 { s_failure_app_state =lcd_alarmCheckFaultMsg(); s_lcd_status_state = 1; } #if defined(VALVE) if(ValveGetStateApp() != s_valve_app_state) /*添加阀门显示*/ { s_valve_app_state = ValveGetStateApp(); s_lcd_status_state = 1; } #endif break; } case 1: { if (PowerCheckStatusSys () == LOW_POWER)//电压低 { LcdDisplayVol(1); } else { LcdDisplayVol(0); } if (s_low_flow_alarm_app_state == 0x20)//超低流量报警 { LcdDisplayLowFlowAlarm(1); } else { LcdDisplayLowFlowAlarm(0); } if (s_alarm_app_state == 1)//报警 { LcdDisplayAlarm(1); } else { LcdDisplayAlarm(0); } if (s_failure_app_state == 1)//故障 { LcdDisplayFailure(1); } else { LcdDisplayFailure(0); } if(s_active_RF_app_state==0)//正在无线通信 0 代表繁忙 { LcdDisplayActiveGPRS(1); } else { LcdDisplayActiveGPRS(0); } if(VALVE_STATE_CLOSE == s_valve_app_state ||VALVE_STATE_CLOSE_EMERGENCY == s_valve_app_state || VALVE_STATE_CLOSE_LOCK == s_valve_app_state)//阀门关闭 { LcdDisplayValve(1); } else { LcdDisplayValve(0); } s_lcd_status_state = 0; break; } default: { s_lcd_status_state = 0; break; } } } /******************************************************************************* * @fun_name: LcdDisplayTimeUpChange() * @brief : LCD定时切屏状态机 * @param[in] : None * @param[out]: None * @retval : None * @other : ******************************************************************************/ void LcdDisplayTimeUpChange() { switch (s_lcd_time_state) { case 0://设置屏幕保持时间 { if ((s_fst_num == A1 && s_sec_num != A1B1 ) || s_fst_num == A2 || s_fst_num == A3) { RtccSetTimer(RTCC_TIMER_LCD_NUM, 60); //60s s_lcd_time_state = 1; } else if (s_fst_num == A4) { RtccSetTimer(RTCC_TIMER_LCD_NUM, LCD_A4_TIME); //检定状态下无按键(3h)返回A1B1 s_lcd_time_state = 1; } break; } case 1: { if (!RtccCheckTimer(RTCC_TIMER_LCD_NUM))//定时时间到,恢复默认界面 { s_fst_num = A1; s_sec_num = A1B1; LcdDisplayA1(s_sec_num); s_lcd_time_state = 0; } break; } default: { s_lcd_time_state = 0; break; } } } /******************************************************************************* * @fun_name: LcdDisplayKey() * @brief : LCD按键切屏状态机 * @param[in] : None * @param[out]: None * @retval : None * @other : ******************************************************************************/ void LcdDisplayKey() { if(s_lcd_key_state == 0)//表计重启时界面的切换 { s_lcd_key_state = 1; if(Gp30GetTestRamFlag() == GP30_COPY_RESET_TEST_FLAG)//判断是否软复位前在检定状态 { s_fst_num = A4; s_sec_num = A4B1; LcdDisplayA4(s_sec_num); } else { s_fst_num = A1; s_sec_num = A1B1; LcdDisplayA1(s_sec_num); } } else if(KeyCheckLcdMsgApp(MENU_ONE))//一级菜单的切换 { s_lcd_time_state = 0; //切一级菜单 KeyClearLcdMsgApp(MENU_ONE); if ((s_fst_num == A4)&&(s_sec_num == A4B3))//检定状态在瞬时流量退检定 { s_fst_num = A1; s_sec_num = AB0; LcdClearAll(); //清屏 LcdDisplayMenu(s_fst_num); } else { if(s_fst_num != A4)//非检定界面的切换 { s_fst_num %= AU; s_fst_num++; s_sec_num = AB0; LcdClearAll(); //清屏 LcdDisplayMenu(s_fst_num); } } } else if(KeyCheckLcdMsgApp(MENU_TWO))//二级菜单切换 { s_lcd_time_state = 0; //切二级菜单 LcdClearAll(); //清屏 KeyClearLcdMsgApp(MENU_TWO); if (s_fst_num == A1) { s_sec_num %= B1U; s_sec_num++; LcdDisplayA1(s_sec_num); } if (s_fst_num == A2) { s_sec_num %= B2U; s_sec_num++; LcdDisplayA2(s_sec_num); } if (s_fst_num == A3) { s_sec_num %= B3U; s_sec_num++; LcdDisplayA3(s_sec_num); } if (s_fst_num == A4) { s_sec_num %= B4U; s_sec_num++; LcdDisplayA4(s_sec_num); } } else if(KeyCheckLcdMsgApp(MENU_DEFAULT))//异常按键切换到默认菜单 { s_lcd_time_state = 0; KeyClearLcdMsgApp(MENU_DEFAULT); if (s_fst_num != A4 ) { LcdClearAll(); //清屏 //切默认菜单 s_fst_num = A1; s_sec_num = A1B1; LcdDisplayA1(s_sec_num); } } else if(KeyCheckLcdMsgApp(MENU_TEST))//按键进检定 { s_lcd_time_state = 0; LcdClearAll(); //清屏 //切检定菜单 KeyClearLcdMsgApp(MENU_TEST); s_fst_num = A4; s_sec_num = AB0; LcdDisplayMenu(s_fst_num); LcdDisplayFun(LcdGetDisplayFun() | FUN_TEST ); } else if (FrameCheckMsgApp(LcdDisplayAllMsg))//全显 { s_lcd_time_state = 0; LcdClearAll(); //清屏 FrameClearMsgApp(LcdDisplayAllMsg); s_fst_num = A1; s_sec_num = A1B5; LcdDisplayA1(s_sec_num); } else if (FrameCheckMsgApp(SetVerificationMsg))//进检定 { s_lcd_time_state = 0; LcdClearAll(); //清屏 FrameClearMsgApp(SetVerificationMsg); s_fst_num = A4; s_sec_num = A4B1; LcdDisplayA4(s_sec_num); } else if (FrameCheckMsgApp(OutVerificationMsg))//退检定 { s_lcd_time_state = 0; LcdClearAll(); //清屏 FrameClearMsgApp(OutVerificationMsg); s_fst_num = A1; s_sec_num = A1B1; LcdDisplayA1(s_sec_num); } } /************************************************************************************* * @fun_name void LcdMachineApp(void) * @brief LCD应用层状态机 * @param[in] None * @param[out] None * @retval None * @other None *************************************************************************************/ void LcdMachineApp(void) { if(!RtccCheckTimer(RTCC_TIMER_LCD_METSTATUES)) { RtccSetTimer(RTCC_TIMER_LCD_METSTATUES,LCD_UPDATE_TIME); //定时1秒 LcdDispalyMetStatus(); LcdDisplayTimeUpChange(); LcdUpdateData(); #if MODULE_BLE_USED if((BleConnectIfIdle() == TASK_IDLE)&&(BleIfSleep()==TASK_IDLE)) { LcdDisplayActiveGPRS(0);//清除无线符号 } else { LcdDisplayActiveGPRS(1);//显示无线符号 } #else if(FixedTimeNbIoTUploadIfIdle() == TASK_IDLE) { LcdDisplayActiveGPRS(0);//清除无线符号 } else { LcdDisplayActiveGPRS(1);//显示无线符号 } #endif } LcdDisplayKey(); } /*void setLcdA2B14(void) { s_lcd_time_state = 0; LcdClearAll(); //清屏 s_fst_num = A2; s_sec_num = A2B14; LcdDisplayA2(s_sec_num); }*/