P8UWaterPlasticIES4G/app/UWater_lcd_app.c

1788 lines
46 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*******************************************************************************
* @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);
}*/