#include "includes.h" // 双压力滚动显示序号 volatile uint8_t Form_rollIdx = 0; // 窗口ID typedef enum { FORM_ID_START, // 启动界面 FORM_ID_METER, // 表盘显示 FORM_ID_PWD, // 输密码界面 FORM_ID_000, // 主菜单 FORM_ID_100, // PSN设置 FORM_ID_200, // 储罐信息设置 FORM_ID_210, // 储罐类型设置 FORM_ID_220, // 介质设置 FORM_ID_230, // 长度设置 FORM_ID_240, // 氢压力容积设置 FORM_ID_250, // 充装比设置 FORM_ID_260, // 密度设置 FORM_ID_270, // 压力报警点设置 FORM_ID_280, // 容积显示 FORM_ID_300, // 上报周期设置 FORM_ID_310, // 采集周期设置 FORM_ID_320, // 发送周期设置 FORM_ID_400, // 标定界面 FORM_ID_410, // 电容标定 FORM_ID_411, // C1(100pF)标定 FORM_ID_412, // C2(400pF)标定 FORM_ID_420, // 压力标定 FORM_ID_421, // 低压力标定 FORM_ID_422, // 高压力标定 FORM_ID_430, // 温度标定 FORM_ID_431, // 低温度标定 FORM_ID_432, // 高温度标定 FORM_ID_500, // 量程设置 FORM_ID_510, // 电容量程 FORM_ID_511, // 底电容设置 FORM_ID_512, // 增长电容设置 FORM_ID_520, // 压力量程 FORM_ID_521, // 压力低量程设置 FORM_ID_522, // 压力高量程设置 FORM_ID_530, // 温度量程 FORM_ID_531, // 温度低量程设置 FORM_ID_532, // 温度高量程设置 FORM_ID_600, // 系统信息 } TForm_Id; void Change_Form(TForm_Id formId); uint32_t Comm_Sample(); // 主界面参数 typedef struct { u8 blinkVisible; // 闪烁状态:亮或熄 u8 menuIdx[3]; // 各级菜单当前项 u8 privilege; // 操作权限:0-查询,1-设置参数,2-标定 u8 meterPage; // 表盘显示页面:测量页面、GPRS/GPS页面1、GPRS/GPS页面2 u8 infoPage; // 信息显示页面:软件版本、硬件版本 u8 caliIdx; // 标定传感器路数 } TForm_Params; TForm_Params formParam; // 是否显示氢压力 volatile uint8_t H2Press_Display_Disabled = 0; // 是否主界面 uint8_t MeterInMeterPage() { return (formParam.meterPage == 0); } // 是否在测试界面 uint8_t MeterInSamplePage() { return (formParam.meterPage == 3); } // 是否需要切换显示 uint8_t MeterNeedRoll() { if(!dcBuff.sampleData.staExtPress[0].notConnect) return 1; // 强制回到0通道 Form_rollIdx = 0; return 0; } // 显示容积百分比(指针) void Meter_DispNeedle() { u8 needle; if(dcBuff.sampleData.staPress.notConnect) { Disp_WriteNeedle(0); } else if(dcBuff.sampleData.staPress.underFlow) { Disp_WriteNeedle(0); } else if(dcBuff.sampleData.staPress.overFlow) { Disp_WriteNeedle(0); } else { // 百分比:10段显示 needle = (u8) ((dcBuff.sampleData.volumePct / 100 + 5) / 10); Disp_WriteNeedle(needle); } } // 显示PSI数据 void Meter_DispPSIData() { s8 text[10]; sensor_status_t staPress = dcBuff.sampleData.staPress; float psi = KPa2PSI(dcBuff.sampleData.pressure); if(Form_rollIdx == 1) { staPress = dcBuff.sampleData.staExtPress[0]; psi = KPa2PSI(dcBuff.sampleData.extPressure[0]); } Disp_H2PressPointOff(); if(staPress.notConnect) { Disp_H2PressText(" --- "); } else if(staPress.underFlow) { Disp_H2PressText(" -EE "); } else if(staPress.overFlow) { Disp_H2PressText(" +EE "); } else { if(psi >= 10000) // 不显示小数 { sprintf(text, "%d", (uint16_t) (psi)); Disp_H2PressText(text); } else if(psi >= 1000) // 显示1位小数 { sprintf(text, "%d", (uint16_t) (psi * 10)); Disp_H2PressText(text); Disp_H2PressPointOn(1); } else // 显示2位小数 { sprintf(text, "%05d", (uint16_t) (psi * 100)); // 至少要显示三位数字 if(text[0] == '0') { if(text[1] == '0') Disp_H2PressText(text + 2); else Disp_H2PressText(text + 1); } else Disp_H2PressText(text); Disp_H2PressPointOn(2); } } } // 显示MPa数据 void Meter_DispMPaData() { s8 text[10]; sensor_status_t staPress = dcBuff.sampleData.staPress; float mpa = KPa2MPa(dcBuff.sampleData.pressure); if(Form_rollIdx == 1) { staPress = dcBuff.sampleData.staExtPress[0]; mpa = KPa2MPa(dcBuff.sampleData.extPressure[0]); } Disp_H2PressPointOff(); if(staPress.notConnect) { Disp_H2PressText(" --- "); } else if(staPress.underFlow) { Disp_H2PressText(" -EE "); } else if(staPress.overFlow) { Disp_H2PressText(" +EE "); } else { if(mpa >= 10000) // 不显示小数 { sprintf(text, "%d", (uint16_t) (mpa)); Disp_H2PressText(text); } else if(mpa >= 1000) // 显示1位小数 { sprintf(text, "%d", (uint16_t) (mpa * 10)); Disp_H2PressText(text); Disp_H2PressPointOn(1); } else // 显示2位小数 { sprintf(text, "%05d", (uint16_t) (mpa * 100)); // 至少要显示三位数字 if(text[0] == '0') { if(text[1] == '0') Disp_H2PressText(text + 2); else Disp_H2PressText(text + 1); } else Disp_H2PressText(text); Disp_H2PressPointOn(2); } } } // 显示体积数据 void Meter_DispVolumeData() { s8 text[10]; sensor_status_t staPress = dcBuff.sampleData.staPress; float m3 = dcBuff.sampleData.volume * 0.001; if(Form_rollIdx == 1) { staPress = dcBuff.sampleData.staExtPress[0]; m3 = 0; } Disp_H2PressPointOff(); if(staPress.notConnect) { Disp_H2PressText(" --- "); } else if(staPress.underFlow) { Disp_H2PressText(" -EE "); } else if(staPress.overFlow) { Disp_H2PressText(" +EE "); } else { if(m3 >= 10000) // 不显示小数 { sprintf(text, "%d", (uint32_t) (m3)); Disp_H2PressText(text); } else if(m3 >= 1000) // 显示1位小数 { sprintf(text, "%d", (uint32_t) (m3 * 10)); Disp_H2PressText(text); Disp_H2PressPointOn(1); } else // 显示2位小数 { sprintf(text, "%05d", (uint32_t) (m3 * 100)); // 至少要显示三位数字 if(text[0] == '0') { if(text[1] == '0') Disp_H2PressText(text + 2); else Disp_H2PressText(text + 1); } else Disp_H2PressText(text); Disp_H2PressPointOn(2); } } } // 显示百分比数据 void Meter_DispPercentData() { s8 text[10]; sensor_status_t staPress = dcBuff.sampleData.staPress; uint16_t pct = dcBuff.sampleData.volumePct; if(Form_rollIdx == 1) { staPress = dcBuff.sampleData.staExtPress[0]; pct = 0; } Disp_H2PressPointOff(); if(staPress.notConnect) { Disp_H2PressText(" --- "); } else if(staPress.underFlow) { Disp_H2PressText(" -EE "); } else if(staPress.overFlow) { Disp_H2PressText(" +EE "); } else if(staPress.full) { Disp_H2PressText(" FULL"); } else { if(pct >= 10000) { sprintf(text, "%d", pct / 100); Disp_H2PressText(text); } else { sprintf(text, "%04d", pct); // 至少要显示三位数字 if(text[0] == '0') Disp_H2PressText(text + 1); else Disp_H2PressText(text); Disp_H2PressPointOn(2); } } } // 显示压力数据 void Meter_DispPresData() { s8 text[10]; Disp_PresPointOff(); if(dcBuff.sampleData.staPress.notConnect) { Disp_PresText("---"); } else if(dcBuff.sampleData.staPress.underFlow) { Disp_PresText("-EE"); } else if(dcBuff.sampleData.staPress.overFlow) { Disp_PresText("+EE"); } else { sprintf(text, "%03d", (uint16_t) ((dcBuff.sampleData.pressure + 5) / 10)); Disp_PresText(text); Disp_PresPointOn(); } } // 显示温度数据 void Meter_DispTempData() { s8 text[10]; if(dcBuff.sampleData.staExtTempr[Form_rollIdx].notConnect) { Disp_TempText("---"); } else if(dcBuff.sampleData.staExtTempr[Form_rollIdx].underFlow) { Disp_TempText("-EE"); } else if(dcBuff.sampleData.staExtTempr[Form_rollIdx].overFlow) { Disp_TempText("+EE"); } else { sprintf(text, "%d", dcBuff.sampleData.extTempr[Form_rollIdx]); Disp_TempText(text); } } // 显示真空数据 void Meter_DispVacuData() { s8 text[10]; // 如无真空计则不显示 if(dcBuff.sampleData.vacuum[0].staVacuum == VACUUM_STATUS_COMM_FAULT) return; if(dcBuff.sampleData.vacuum[0].staVacuum == VACUUM_STATUS_FAULT || dcBuff.sampleData.vacuum[0].vacuum > 99.99999999) Disp_VacuText("+EE"); else if(dcBuff.sampleData.vacuum[0].vacuum > 0.00999999) { if(dcBuff.sampleData.vacuum[0].vacuum > 0.09999999) { sprintf(text, "%03d", (uint16_t) (dcBuff.sampleData.vacuum[0].vacuum * 10)); Disp_VacuPointOn(); } else sprintf(text, "%d^2", (uint16_t) (dcBuff.sampleData.vacuum[0].vacuum * 100)); // 至少要显示两位数字 if(text[0] == '0') Disp_VacuText(text + 1); else Disp_VacuText(text); } else Disp_VacuText("-EE"); } // 刷新状态信息:gprs信号,联网,电池电量 void Meter_RefreshStatus() { Disp_WriteBattery((dcBuff.dtuData.batPct + 16) / 33); Disp_WriteStrength((dcBuff.dtuData.rssi + 12) / 25); Disp_WriteCommunication(!VCC_POWER_STATUS() && dcBuff.dtuData.batLow); } void Meter_DispData() { Meter_DispNeedle(); if(H2Press_Display_Disabled) { Disp_H2PressPointOff(); Disp_H2PressUnitOff(); } else if(dcBuff.configDisplay.L_Unit == UNIT_PSI) Meter_DispPSIData(); else if(dcBuff.configDisplay.L_Unit == UNIT_PCT) Meter_DispPercentData(); else if(dcBuff.configDisplay.L_Unit == UNIT_M3) Meter_DispVolumeData(); else Meter_DispMPaData(); Meter_DispTempData(); Meter_DispVacuData(); } void Meter_Disp() { s8 text[7] = ""; u8 i; // 清屏 Disp_Clear(); Meter_RefreshStatus(); if(formParam.meterPage == 0) { Disp_SwitchH2PressUnit(dcBuff.configDisplay.L_Unit); // 显示单位 Disp_TempUnitOn(); Meter_DispData(); // 显示第几路传感器 if(MeterNeedRoll()) { sprintf(text, " %02d", Form_rollIdx + 1); Disp_PresText(text); } } else if(formParam.meterPage == 1) { // 发送成功次数 sprintf(text, "%d", dcBuff.powerInfo.gprsSuccCount % 100000); // sprintf(text, "%d %d", Motion_Detected, Motion_Status); Disp_H2PressText(text); // 定位时间 sprintf(text, "%02d%02d%02d", dcBuff.dtuData.sysTime.hour, dcBuff.dtuData.sysTime.minute, dcBuff.dtuData.sysTime.second); for(i = 0; i < 6; i++) Disp_DispChar(5 + i, text[i]); Disp_PresPointOn(); Disp_TempPointOn(); // 电池电压 sprintf(text, "%03d", dcBuff.dtuData.batVoltage / 10); Disp_VacuText(text); } else if(formParam.meterPage == 2) { // GPRS错误代码 Disp_H2PressText(dcBuff.powerInfo.gprsFailCode); // sprintf(text, "%d", SYS_RSTSTS); // 复位原因; // Disp_H2PressText(text); // 定位日期 sprintf(text, "%02d%02d%02d", dcBuff.dtuData.sysTime.year, dcBuff.dtuData.sysTime.month, dcBuff.dtuData.sysTime.day); for(i = 0; i < 6; i++) Disp_DispChar(5 + i, text[i]); Disp_PresPointOn(); Disp_TempPointOn(); // 发送失败次数 sprintf(text, "%d", (dcBuff.powerInfo.gprsSendCount - dcBuff.powerInfo.gprsSuccCount) % 1000); Disp_VacuText(text); } else // 显示测量值 { // 显示MPa Disp_SwitchH2PressUnit(UNIT_MPA); Meter_DispMPaData(); // 显示温度 Disp_TempUnitOn(); Meter_DispTempData(); // 显示第几路传感器 if(MeterNeedRoll()) { sprintf(text, " %02d", Form_rollIdx + 1); Disp_PresText(text); } // 提示测试界面 if(VCC_POWER_STATUS()) Disp_VacuText("POR"); else Disp_VacuText("BAT"); } } void Meter_Write_Bat_Volt(float volt) { if(volt < 3.74) // 20% Disp_WriteBattery(0); else if(volt < 3.79) // 40% Disp_WriteBattery(1); else if(volt < 3.87) // 60% Disp_WriteBattery(2); else if(volt < 3.98) // 80% Disp_WriteBattery(3); else Disp_WriteBattery(4); } // ******************************************** // 以下为窗口界面实现 // ******************************************** // 查询菜单 const char menu_000_items[][6] = { "PSN", "PARA", "PERI", "CALI", "RANG", "INFO", }; // 设置菜单 const char menu_001_items[][6] = { "PARA", }; // 标定菜单 const char menu_002_items[][6] = { "PSN", "PERI", "CALI", "RANG", }; // 储罐信息菜单 const char menu_200_items[][6] = { "ALAR", "VOL" }; // 储罐类型选项 const char menu_210_items[][6] = { "STAN", "LIE", "BALL" }; // 介质选项 const char menu_220_items[][6] = { "LNG", "O2", "N2", "AR", "CO2", "H2", "CNG", "HE", "C2H4", "LPG", "NH3", "PENT", "POPO" }; // 上报周期菜单 const char menu_300_items[][6] = { "CAPT", "SEND" }; // 标定菜单 const char menu_400_items[][6] = { "PRES1", "PRES2", "TEPR1", "TEPR2" }; // 电容标定菜单 const char menu_410_items[][2][6] = { {"LO", "HIGH"}, {"C1", "C2"} }; // 压力标定菜单 const char menu_420_items[][6] = { "LO", "HIGH" }; // 温度标定菜单 const char menu_430_items[][2][6] = { {"LO", "HIGH"}, {"CALT", "CALR"} }; // 量程菜单 const char menu_500_items[][6] = { "PRES1", "PRES2", "TEPR1", "TEPR2" }; // 电容量程菜单 const char menu_510_items[][2][6] = { {"LO", "HIGH"}, {"BASE", "REF"} }; // 压力量程菜单 const char menu_520_items[][6] = { "LO", "HIGH" }; // 温度量程菜单 const char menu_530_items[][6] = { "LO", "HIGH" }; // 函数类型定义:事件 typedef void (*TEvent)(void); typedef void (*TKeyEvent)(u8); // 窗口控件结构 typedef struct { // 控件 TButton Button1; // 按钮:自动测量 TEditBox Edit2; // 编辑框:输入(与选择框二选一) TSelectBox Select3; // 选择框:输入(与编辑框二选一) TButton Button4; // 按钮:YES TButton Button5; // 按钮:ESC // 事件 TEvent OnButton1; // 按钮1回调函数 TEvent OnButton4; // 按钮4回调函数 TEvent OnButton5; // 按钮5回调函数 TEvent OnTimeOut; // 超时回调函数(自动返回主界面) TEvent OnDrawOthers;// 绘制屏幕上除控件以外的其它文字或符号,直接调用底层函数实现 TKeyEvent OnKey; // 默认按键处理 // 属性 u8 cursorId; // 当前控件:0-无,1-Button1,2-Edit2, 3-Select3,4-Button4, 5-Button5 } TForm; volatile u32 Form_timer = 0; // 最近动作时间,用于超时处理 volatile u16 Form_timeout = 4; // 超时时间 volatile u8 Form_timeouted = 0; // 是否已执行超时动作 // 窗口结构 TForm form; void Form_ResetTimer() { S_RTC_TIME_DATA_T sRTC; // 获取当前时间 RTC_GetDateAndTime(&sRTC); // 计算自上次gps定位以来的时间 Form_timer = Calc_SecondsFromYear(INITIAL_YEAR, sRTC.u32Year, sRTC.u32Month, sRTC.u32Day, sRTC.u32Hour, sRTC.u32Minute, sRTC.u32Second); Form_timeouted = 0; } // 设置焦点控件 void Form_SetFocus() { if(form.cursorId == 1) Button_SetFocus(&form.Button1); else if(form.cursorId == 2) EditBox_SetFocus(&form.Edit2); else if(form.cursorId == 3) SelectBox_SetFocus(&form.Select3); else if(form.cursorId == 4) Button_SetFocus(&form.Button4); else if(form.cursorId == 5) Button_SetFocus(&form.Button5); else Disp_ClearCursor(); } // 切换到第一个控件 void Form_FocusFirst() { if(!form.Button1.hide) form.cursorId = 1; else if(!form.Edit2.hide) form.cursorId = 2; else if(!form.Select3.hide) form.cursorId = 3; else if(!form.Button4.hide) form.cursorId = 4; else if(!form.Button5.hide) form.cursorId = 5; else form.cursorId = 0; // 设置焦点控件 Form_SetFocus(); } // 切换到下一个控件 void Form_FocusNext() { if(form.cursorId == 1) { if(!form.Edit2.hide) form.cursorId = 2; else if(!form.Select3.hide) form.cursorId = 3; else if(!form.Button4.hide) form.cursorId = 4; else if(!form.Button5.hide) form.cursorId = 5; } else if(form.cursorId == 2) { if(!form.Select3.hide) form.cursorId = 3; else if(!form.Button4.hide) form.cursorId = 4; else if(!form.Button5.hide) form.cursorId = 5; else if(!form.Button1.hide) form.cursorId = 1; } else if(form.cursorId == 3) { if(!form.Button4.hide) form.cursorId = 4; else if(!form.Button5.hide) form.cursorId = 5; else if(!form.Button1.hide) form.cursorId = 1; else if(!form.Edit2.hide) form.cursorId = 2; } else if(form.cursorId == 4) { if(!form.Button5.hide) form.cursorId = 5; else if(!form.Button1.hide) form.cursorId = 1; else if(!form.Edit2.hide) form.cursorId = 2; else if(!form.Select3.hide) form.cursorId = 3; } else if(form.cursorId == 5) { if(!form.Button1.hide) form.cursorId = 1; else if(!form.Edit2.hide) form.cursorId = 2; else if(!form.Select3.hide) form.cursorId = 3; else if(!form.Button4.hide) form.cursorId = 4; } // 设置焦点控件 Form_SetFocus(); } void Form_OnKey(u8 key) { if(form.cursorId == 1 && Button_OnKey(&form.Button1, key) != KEY_INVALID) { if(key == KEY_FUNC) Form_FocusNext(); else if(key == KEY_SET && form.OnButton1 != NULL) form.OnButton1(); return; } if(form.cursorId == 2 && EditBox_OnKey(&form.Edit2, key) != KEY_INVALID) { if(key == KEY_FUNC) Form_FocusNext(); return; } if(form.cursorId == 3 && SelectBox_OnKey(&form.Select3, key) != KEY_INVALID) { if(key == KEY_FUNC) Form_FocusNext(); return; } if(form.cursorId == 4 && Button_OnKey(&form.Button4, key) != KEY_INVALID) { if(key == KEY_FUNC) Form_FocusNext(); else if(key == KEY_SET && form.OnButton4 != NULL) form.OnButton4(); return; } if(form.cursorId == 5 && Button_OnKey(&form.Button5, key) != KEY_INVALID) { if(key == KEY_FUNC) Form_FocusNext(); else if(key == KEY_SET && form.OnButton5 != NULL) form.OnButton5(); return; } if(form.OnKey != NULL) form.OnKey(key); } // 刷新控件 void Form_RefreshCtrls() { if(!form.Button1.hide) Button_Refresh(&form.Button1); if(!form.Edit2.hide) EditBox_Refresh(&form.Edit2); if(!form.Select3.hide) SelectBox_Refresh(&form.Select3); if(!form.Button4.hide) Button_Refresh(&form.Button4); if(!form.Button5.hide) Button_Refresh(&form.Button5); } void Form_Refresh() { if(form.OnDrawOthers != NULL) form.OnDrawOthers(); Form_RefreshCtrls(); // 实际写屏 HT1621_Refresh(); } void Form_OnTimer() { S_RTC_TIME_DATA_T sRTC; // 切换闪烁状态 formParam.blinkVisible = !formParam.blinkVisible; Disp_SetBlinkVisible(formParam.blinkVisible); // 处理超时 if(form.OnTimeOut != NULL && !Form_timeouted) { // 获取当前时间 RTC_GetDateAndTime(&sRTC); // 计算自上次gps定位以来的时间 if(Calc_SecondsFromYear(INITIAL_YEAR, sRTC.u32Year, sRTC.u32Month, sRTC.u32Day, sRTC.u32Hour, sRTC.u32Minute, sRTC.u32Second) >= Form_timer + Form_timeout) { Form_timeouted = 1; form.OnTimeOut(); } } Form_Refresh(); } // ******************************************** // 以下为各个功能界面函数 // ******************************************** // 默认超时:查看30秒,设置60秒,标定120秒 #define OPERATE_TIMEOUT (formParam.privilege == 0 ? 30 : (formParam.privilege == 1 ? 60 : 120)) #define METER_DISP_TIMEOUT 4 // 正常界面:4秒钟休眠 #define METER_TEST_TIMEOUT 60 // 测试界面:1分钟休眠 // 超时:进入主界面 void Form_Return2Meter() { formParam.menuIdx[0] = 0; formParam.menuIdx[1] = 0; formParam.menuIdx[2] = 0; formParam.meterPage = 0; Change_Form(FORM_ID_METER); } // 启动界面进入,或功能界面返回到设置菜单 void Form_Return2_000() { formParam.menuIdx[1] = 0; formParam.menuIdx[2] = 0; Change_Form(FORM_ID_000); } // ******************************************** // 启动界面 // ******************************************** void Form_Start_OnDrawOthers() { char psn[20]; u8 i; // 显示13位PSN号 sprintf(psn, "20%02d%02d%02d%02d%03d", dcBuff.configBottle.PSN[0], dcBuff.configBottle.PSN[1], dcBuff.configBottle.PSN[2], dcBuff.configBottle.PSN[3], (dcBuff.configBottle.PSN[4] << 8) | dcBuff.configBottle.PSN[5]); for(i = 0; i < 13; i++) Disp_DispChar(i + 1, psn[i]); } // 无控件,4秒超时 void Form_Start_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); SelectBox_Hide(&form.Select3); Button_Hide(&form.Button4); Button_Hide(&form.Button5); Form_timeout = 4; // 4秒超时 // 事件回调 form.OnDrawOthers = Form_Start_OnDrawOthers; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 主界面 // ******************************************** void Form_Meter_OnDrawOthers() { // 显示表盘全部数据 Meter_Disp(); // 贴片厂测试软件打开 // Disp_VacuText("ooo"); } // 主界面超时 void Form_Meter_OnTimeOut() { if(formParam.meterPage == 3) { formParam.meterPage = 0; Form_timeout = METER_DISP_TIMEOUT; // 刷新屏幕 NVIC_SetPendingIRQ(TMR0_IRQn); } // 允许休眠 LCD_Disabled = 1; } void Form_Meter_OnKey(u8 key) { // 按FUNC键进入查询界面 if(key == KEY_FUNC) { formParam.privilege = 0; Change_Form(FORM_ID_PWD); } // 按SET键进入设置界面 else if(key == KEY_SET) { if(formParam.meterPage == 0) { // 手动开关氢压力显示 H2Press_Display_Disabled = !H2Press_Display_Disabled; if(!H2Press_Display_Disabled) { // 采集数据 if(!Sample_Busy()) NVIC_SetPendingIRQ(TMR1_IRQn); } } else if(formParam.meterPage == 3 && MeterNeedRoll()) Form_rollIdx = 1 - Form_rollIdx; // 切换显示第几路 } else if(key == KEY_DOWN) { if(formParam.meterPage >= 3) formParam.meterPage = 0; else formParam.meterPage++; if(formParam.meterPage == 3) { Form_rollIdx = 0; // 默认在第1路 Form_timeout = METER_TEST_TIMEOUT; } else Form_timeout = METER_DISP_TIMEOUT; } else if(key == KEY_UP) { if(formParam.meterPage == 0) { if(dcBuff.configDisplay.L_Unit == UNIT_MPA) dcBuff.configDisplay.L_Unit = UNIT_M3; else if(dcBuff.configDisplay.L_Unit == UNIT_M3) dcBuff.configDisplay.L_Unit = UNIT_PSI; else dcBuff.configDisplay.L_Unit = UNIT_MPA; // 保存 Config_SaveConfig(); } else if((formParam.meterPage == 1 || formParam.meterPage == 2) && (CLK->WK_INTSTS & CLK_WK_INTSTS_PD_WK_IS_Msk)) { // 清除错误代码 strcpy(dcBuff.powerInfo.gprsFailCode, ""); dcBuff.powerInfo.gprsSuccCount = 0; dcBuff.powerInfo.gprsSendCount = 0; if(formParam.meterPage == 1) { // 强制上传 DTU_dataConn = 1; } else { // 强制连接维护平台 DTU_ldmsConn = 1; // 强制定位 GPS_Located = 0; GPS_Locate = 1; } // 并发送 DTU_semSync = 1; } } } // 无控件 void Form_Meter_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); SelectBox_Hide(&form.Select3); Button_Hide(&form.Button4); Button_Hide(&form.Button5); Form_timeout = METER_DISP_TIMEOUT; // 事件回调 form.OnDrawOthers = Form_Meter_OnDrawOthers; form.OnTimeOut = Form_Meter_OnTimeOut; form.OnKey = Form_Meter_OnKey; } // ******************************************** // 输密码界面 // ******************************************** // 确认按钮 void Form_Pwd_OnButton4() { // 不输入密码,进入查询界面 if(strcmp(form.Edit2.text, "oooo") == 0) { formParam.privilege = 0; Form_Return2_000(); } // 输入密码1:设置储罐参数 else if(strcmp(form.Edit2.text, dcBuff.configDisplay.pwd1) == 0) { formParam.privilege = 1; //Form_Return2_000(); Change_Form(FORM_ID_200); // 一级菜单只有一项,直接进入二级菜单 } // 输入密码2:设置标定等参数 else if(strcmp(form.Edit2.text, dcBuff.configDisplay.pwd2) == 0) { formParam.privilege = 2; Form_Return2_000(); } // 输入错误密码:返回主界面 else Form_Return2Meter(); } void Form_Pwd_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 4, 4, "oooo"); SelectBox_Hide(&form.Select3); Button_Create(&form.Button4, 5, 3, "YES"); Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_Pwd_OnButton4; form.OnButton5 = Form_Return2Meter; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 设置菜单界面 // ******************************************** // 确认按钮 void Form_000_OnButton4() { // 保存选项序号 formParam.menuIdx[0] = form.Select3.idx; if(formParam.privilege == 0) { switch(form.Select3.idx) { case 0: // 设置PSN Change_Form(FORM_ID_100); break; case 1: // 设置储罐参数 Change_Form(FORM_ID_200); break; case 2: // 设置上报周期 Change_Form(FORM_ID_300); break; case 3: // 标定 Change_Form(FORM_ID_400); break; case 4: // 量程 Change_Form(FORM_ID_500); break; case 5: // 信息 Change_Form(FORM_ID_600); break; default: break; } } else if(formParam.privilege == 1) // 这个地方不会执行到,因为一级菜单只有一项,故直接进入二级菜单 { switch(form.Select3.idx) { case 0: // 设置储罐参数 Change_Form(FORM_ID_200); break; default: break; } } else { switch(form.Select3.idx) { case 0: // 设置PSN Change_Form(FORM_ID_100); break; case 1: // 设置上报周期 Change_Form(FORM_ID_300); break; case 2: // 标定 Change_Form(FORM_ID_400); break; case 3: // 量程 Change_Form(FORM_ID_500); break; default: break; } } } void Form_000_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); if(formParam.privilege == 0) SelectBox_Create(&form.Select3, 1, 4, 6, menu_000_items, formParam.menuIdx[0]); else if(formParam.privilege == 1) SelectBox_Create(&form.Select3, 1, 4, 1, menu_001_items, formParam.menuIdx[0]); else SelectBox_Create(&form.Select3, 1, 4, 4, menu_002_items, formParam.menuIdx[0]); Button_Create(&form.Button4, 5, 3, "YES"); Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_000_OnButton4; form.OnButton5 = Form_Return2Meter; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 设置PSN界面 // ******************************************** // 确认按钮 void Form_100_OnButton4() { char psn[20]; u16 serial; // 保存PSN strcpy(psn, form.Edit2.text); serial = atoi(psn + 10); dcBuff.configBottle.PSN[5] = serial & 0xFF; dcBuff.configBottle.PSN[4] = serial >> 8; psn[10] = 0; dcBuff.configBottle.PSN[3] = atoi(psn + 8); psn[8] = 0; dcBuff.configBottle.PSN[2] = atoi(psn + 6); psn[6] = 0; dcBuff.configBottle.PSN[1] = atoi(psn + 4); psn[4] = 0; dcBuff.configBottle.PSN[0] = atoi(psn + 2); dcBuff.configBottle.updateFlag = 1; // 参数更新标志 // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_000(); } void Form_100_Create() { char psn[20]; // 显示13位PSN号 sprintf(psn, "20%02d%02d%02d%02d%03d", dcBuff.configBottle.PSN[0], dcBuff.configBottle.PSN[1], dcBuff.configBottle.PSN[2], dcBuff.configBottle.PSN[3], (dcBuff.configBottle.PSN[4] << 8) | dcBuff.configBottle.PSN[5]); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 4, 13, psn); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_100_OnButton4; form.OnButton5 = Form_Return2_000; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 储罐参数设置界面 // ******************************************** // 确认按钮 void Form_200_OnButton4() { // 保存选项序号 formParam.menuIdx[1] = form.Select3.idx; switch(form.Select3.idx) { case 0: // 压力报警点 Change_Form(FORM_ID_270); break; case 1: // 氢压力容积 Change_Form(FORM_ID_240); break; default: break; } } void Form_200_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); SelectBox_Create(&form.Select3, 1, 4, 2, menu_200_items, formParam.menuIdx[1]); Button_Create(&form.Button4, 5, 3, "YES"); Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_200_OnButton4; if(formParam.privilege == 0) form.OnButton5 = Form_Return2_000; else // 无一级菜单 form.OnButton5 = Form_Return2Meter; form.OnTimeOut = Form_Return2Meter; } // 返回上级菜单 void Form_Return2_200() { formParam.menuIdx[2] = 0; Change_Form(FORM_ID_200); } // ******************************************** // 储罐类型设置界面 // ******************************************** // 确认按钮 void Form_210_OnButton4() { // 保存类型 dcBuff.configBottle.type = form.Select3.idx; dcBuff.configBottle.updateFlag = 1; // 参数更新标志 // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_200(); } void Form_210_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); SelectBox_Create(&form.Select3, 1, 4, 3, menu_210_items, dcBuff.configBottle.type); if(formParam.privilege == 1) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); SelectBox_ReadOnly(&form.Select3); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_210_OnButton4; form.OnButton5 = Form_Return2_200; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 液源设置界面 // ******************************************** // 确认按钮 void Form_220_OnButton4() { // 保存液源 dcBuff.configBottle.source = form.Select3.idx; dcBuff.configBottle.updateFlag = 1; // 参数更新标志 // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_200(); } void Form_220_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); SelectBox_Create(&form.Select3, 1, 4, 13, menu_220_items, dcBuff.configBottle.source); if(formParam.privilege == 1) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); SelectBox_ReadOnly(&form.Select3); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_220_OnButton4; form.OnButton5 = Form_Return2_200; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 储罐长度设置界面 // ******************************************** // 确认按钮 void Form_230_OnButton4() { // 保存长度 dcBuff.configBottle.len = atoi(form.Edit2.text); dcBuff.configBottle.updateFlag = 1; // 参数更新标志 // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_200(); } void Form_230_Create() { char len[8]; sprintf(len, "%05d", dcBuff.configBottle.len); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 4, 5, len); SelectBox_Hide(&form.Select3); if(formParam.privilege == 1) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_230_OnButton4; form.OnButton5 = Form_Return2_200; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 氢压力容积设置界面 // ******************************************** // 确认按钮 void Form_240_OnButton4() { // 保存氢压力容积 dcBuff.configBottle.vol = atoi(form.Edit2.text); dcBuff.configBottle.updateFlag = 1; // 参数更新标志 // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_200(); } void Form_240_Create() { char vol[8]; sprintf(vol, "%05d", dcBuff.configBottle.vol); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 0, 5, 5, vol); SelectBox_Hide(&form.Select3); if(formParam.privilege == 1) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_240_OnButton4; form.OnButton5 = Form_Return2_200; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 充装比设置界面 // ******************************************** // 确认按钮 void Form_250_OnButton4() { // 保存充装比 dcBuff.configBottle.chargePct = atoi(form.Edit2.text); dcBuff.configBottle.updateFlag = 1; // 参数更新标志 // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_200(); } void Form_250_Create() { char chargePct[8]; sprintf(chargePct, "%03d", dcBuff.configBottle.chargePct); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 3, 3, chargePct); SelectBox_Hide(&form.Select3); if(formParam.privilege == 1) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_250_OnButton4; form.OnButton5 = Form_Return2_200; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 液体密度设置界面 // ******************************************** // 确认按钮 void Form_260_OnButton4() { // 保存密度 Config_SetDensity(dcBuff.configBottle.source, atoi(form.Edit2.text) * 0.001); dcBuff.configBottle.updateFlag = 1; // 参数更新标志 // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_200(); } void Form_260_Create() { char density[8]; sprintf(density, "%04d", (uint16_t) (Config_GetDensity(dcBuff.configBottle.source) * 1000)); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 4, 4, density); SelectBox_Hide(&form.Select3); if(formParam.privilege == 1) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_260_OnButton4; form.OnButton5 = Form_Return2_200; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 压力报警点设置界面 // ******************************************** void Form_DispPoint2() { Disp_H2PressPointOn(2); } void Form_DispPoint1() { Disp_H2PressPointOn(1); } // 确认按钮 void Form_270_OnButton4() { // 保存报警参数 dcBuff.configBottle.warnPress = atoi(form.Edit2.text) * 10; dcBuff.configBottle.updateFlag = 1; // 参数更新标志 // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_200(); } void Form_270_Create() { char warnPress[8]; sprintf(warnPress, "%04d", dcBuff.configBottle.warnPress / 10); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 4, 4, warnPress); SelectBox_Hide(&form.Select3); if(formParam.privilege == 1) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnDrawOthers = Form_DispPoint2; form.OnButton4 = Form_270_OnButton4; if(formParam.privilege == 0) form.OnButton5 = Form_Return2_000; else form.OnButton5 = Form_Return2_200; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 储罐容积显示界面 // ******************************************** void Form_280_Create() { char volumeTotal[8]; Calculate_Theoretical_Params(); sprintf(volumeTotal, "%06d", Theoretical_Param.v); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 4, 6, volumeTotal); SelectBox_Hide(&form.Select3); Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_Return2_200; form.OnButton5 = Form_Return2_200; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 周期设置界面 // ******************************************** // 确认按钮 void Form_300_OnButton4() { // 保存选项序号 formParam.menuIdx[1] = form.Select3.idx; switch(form.Select3.idx) { case 0: // 采集周期 Change_Form(FORM_ID_310); break; case 1: // 发送周期 Change_Form(FORM_ID_320); break; default: break; } } void Form_300_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); SelectBox_Create(&form.Select3, 1, 4, 2, menu_300_items, formParam.menuIdx[1]); Button_Create(&form.Button4, 5, 3, "YES"); Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_300_OnButton4; form.OnButton5 = Form_Return2_000; form.OnTimeOut = Form_Return2Meter; } void Form_Return2_300() { formParam.menuIdx[2] = 0; Change_Form(FORM_ID_300); } // ******************************************** // 采集周期设置界面 // ******************************************** // 确认按钮 void Form_310_OnButton4() { // 保存周期 dcBuff.configData.intervalSample = atoi(form.Edit2.text); dcBuff.configBottle.updateFlag = 1; // 参数更新标志 // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_300(); } void Form_310_Create() { char intervalSample[8]; sprintf(intervalSample, "%04d", dcBuff.configData.intervalSample); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 4, 4, intervalSample); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_310_OnButton4; form.OnButton5 = Form_Return2_300; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 上报周期设置界面 // ******************************************** // 确认按钮 void Form_320_OnButton4() { // 保存周期 dcBuff.configData.intervalTrans = atoi(form.Edit2.text); dcBuff.configBottle.updateFlag = 1; // 参数更新标志 // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_300(); } void Form_320_Create() { char intervalTrans[8]; sprintf(intervalTrans, "%06d", dcBuff.configData.intervalTrans); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 4, 6, intervalTrans); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_320_OnButton4; form.OnButton5 = Form_Return2_300; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 标定界面 // ******************************************** // 确认按钮 void Form_400_OnButton4() { // 保存选项序号 formParam.menuIdx[1] = form.Select3.idx; switch(form.Select3.idx) { case 0: // 压力标定 case 1: formParam.caliIdx = form.Select3.idx; Change_Form(FORM_ID_420); break; case 2: // 温度标定 case 3: formParam.caliIdx = form.Select3.idx - 2; Change_Form(FORM_ID_430); break; default: break; } } void Form_400_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); // 3线制温度传感器无须标定(从v84开始,不区分2线/3线制) // SelectBox_Create(&form.Select3, 0, 5, dcBuff.configDisplay.op_PT100_3LINE ? 2 : 4, menu_400_items, formParam.menuIdx[1]); SelectBox_Create(&form.Select3, 0, 5, 4, menu_400_items, formParam.menuIdx[1]); Button_Create(&form.Button4, 5, 3, "YES"); Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_400_OnButton4; form.OnButton5 = Form_Return2_000; form.OnTimeOut = Form_Return2Meter; } // 返回按钮 void Form_Return2_400() { formParam.menuIdx[2] = 0; Change_Form(FORM_ID_400); } // ******************************************** // 电容标定界面 // ******************************************** // 确认按钮 void Form_410_OnButton4() { // 保存选项序号 formParam.menuIdx[2] = form.Select3.idx; switch(form.Select3.idx) { case 0: // C1电容标定 Change_Form(FORM_ID_411); break; case 1: // C2电容标定 Change_Form(FORM_ID_412); break; default: break; } } void Form_410_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); SelectBox_Create(&form.Select3, 1, 4, 2, menu_410_items[dcBuff.configDisplay.op_USE_CAPACITY_SENSOR], formParam.menuIdx[2]); Button_Create(&form.Button4, 4, 3, "YES"); Button_Create(&form.Button5, 7, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_410_OnButton4; form.OnButton5 = Form_Return2_400; form.OnTimeOut = Form_Return2Meter; } // 返回按钮 void Form_Return2_410() { Change_Form(FORM_ID_410); } // ******************************************** // C1电容标定界面 // ******************************************** void Form_411_OnButton1() { // 自动采集电容AD值 if(Comm_Sample()) { sprintf(form.Edit2.text, "%04d", dcBuff.sampleData.adDPress); form.cursorId = 4; // 光标到确认按钮 } else form.cursorId = 5; // 光标到返回按钮 Form_SetFocus(); } // 确认按钮 void Form_411_OnButton4() { // 保存C1 if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) dcBuff.configSensor.sensorDPress.zeroValue = atoi(form.Edit2.text); else dcBuff.configSensor.sensorCap.c1ADC = atoi(form.Edit2.text); // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_410(); } void Form_411_Create() { char c1[10]; if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) sprintf(c1, "%04d", dcBuff.configSensor.sensorDPress.zeroValue); else sprintf(c1, "%04d", dcBuff.configSensor.sensorCap.c1ADC); memset(&form, 0, sizeof(form)); // 控件 EditBox_Create(&form.Edit2, 1, 4, 4, c1); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) { Button_Create(&form.Button1, 10, 3, "AUT"); Button_Create(&form.Button4, 4, 3, "YES"); } else { Button_Hide(&form.Button1); Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 7, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton1 = Form_411_OnButton1; form.OnButton4 = Form_411_OnButton4; form.OnButton5 = Form_Return2_410; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // C2电容标定界面 // ******************************************** // 确认按钮 void Form_412_OnButton4() { // 保存C2 if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) dcBuff.configSensor.sensorDPress.fullValue = atoi(form.Edit2.text); else dcBuff.configSensor.sensorCap.c2ADC = atoi(form.Edit2.text); // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_410(); } void Form_412_Create() { char c2[10]; if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) sprintf(c2, "%04d", dcBuff.configSensor.sensorDPress.fullValue); else sprintf(c2, "%04d", dcBuff.configSensor.sensorCap.c2ADC); memset(&form, 0, sizeof(form)); // 控件 EditBox_Create(&form.Edit2, 1, 4, 4, c2); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) { Button_Create(&form.Button1, 10, 3, "AUT"); Button_Create(&form.Button4, 4, 3, "YES"); } else { Button_Hide(&form.Button1); Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 7, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton1 = Form_411_OnButton1; form.OnButton4 = Form_412_OnButton4; form.OnButton5 = Form_Return2_410; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 压力标定界面 // ******************************************** // 确认按钮 void Form_420_OnButton4() { // 保存选项序号 formParam.menuIdx[2] = form.Select3.idx; switch(form.Select3.idx) { case 0: // 低压力标定 Change_Form(FORM_ID_421); break; case 1: // 高压力标定 Change_Form(FORM_ID_422); break; default: break; } } void Form_420_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); SelectBox_Create(&form.Select3, 1, 4, 2, menu_420_items, formParam.menuIdx[2]); Button_Create(&form.Button4, 5, 3, "YES"); Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_420_OnButton4; form.OnButton5 = Form_Return2_400; form.OnTimeOut = Form_Return2Meter; } // 返回按钮 void Form_Return2_420() { Change_Form(FORM_ID_420); } // ******************************************** // 低压力标定界面 // ******************************************** void Form_421_OnButton1() { // 自动采集压力AD值 if(Comm_Sample()) { if(formParam.caliIdx == 0) sprintf(form.Edit2.text, "%04d", dcBuff.sampleData.adPress); else sprintf(form.Edit2.text, "%04d", dcBuff.sampleData.adExtPress[0]); form.cursorId = 4; // 光标到确认按钮 } else form.cursorId = 5; // 光标到返回按钮 Form_SetFocus(); } // 确认按钮 void Form_421_OnButton4() { // 保存低压力 if(formParam.caliIdx == 0) dcBuff.configSensor.sensorPress.zeroValue = atoi(form.Edit2.text); else dcBuff.configSensor.sensorEPress[0].zeroValue = atoi(form.Edit2.text); // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_420(); } void Form_421_Create() { char press[10]; if(formParam.caliIdx == 0) sprintf(press, "%04d", dcBuff.configSensor.sensorPress.zeroValue); else sprintf(press, "%04d", dcBuff.configSensor.sensorEPress[0].zeroValue); memset(&form, 0, sizeof(form)); // 控件 EditBox_Create(&form.Edit2, 1, 4, 4, press); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) { Button_Create(&form.Button1, 11, 3, "AUT"); Button_Create(&form.Button4, 5, 3, "YES"); } else { Button_Hide(&form.Button1); Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton1 = Form_421_OnButton1; form.OnButton4 = Form_421_OnButton4; form.OnButton5 = Form_Return2_420; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 高压力标定界面 // ******************************************** // 确认按钮 void Form_422_OnButton4() { // 保存低压力 if(formParam.caliIdx == 0) dcBuff.configSensor.sensorPress.fullValue = atoi(form.Edit2.text); else dcBuff.configSensor.sensorEPress[0].fullValue = atoi(form.Edit2.text); // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_420(); } void Form_422_Create() { char press[10]; if(formParam.caliIdx == 0) sprintf(press, "%04d", dcBuff.configSensor.sensorPress.fullValue); else sprintf(press, "%04d", dcBuff.configSensor.sensorEPress[0].fullValue); memset(&form, 0, sizeof(form)); // 控件 EditBox_Create(&form.Edit2, 1, 4, 4, press); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) { Button_Create(&form.Button1, 11, 3, "AUT"); Button_Create(&form.Button4, 5, 3, "YES"); } else { Button_Hide(&form.Button1); Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton1 = Form_421_OnButton1; form.OnButton4 = Form_422_OnButton4; form.OnButton5 = Form_Return2_420; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 温度标定界面 // ******************************************** // 确认按钮 void Form_430_OnButton4() { // 保存选项序号 formParam.menuIdx[2] = form.Select3.idx; switch(form.Select3.idx) { case 0: // 低温标定 Change_Form(FORM_ID_431); break; case 1: // 高温标定 Change_Form(FORM_ID_432); break; default: break; } } void Form_430_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); SelectBox_Create(&form.Select3, 1, 4, 2, menu_430_items[dcBuff.configDisplay.op_USE_PT100_SENSOR], formParam.menuIdx[2]); Button_Create(&form.Button4, 5, 3, "YES"); Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_430_OnButton4; form.OnButton5 = Form_Return2_400; form.OnTimeOut = Form_Return2Meter; } // 返回按钮 void Form_Return2_430() { Change_Form(FORM_ID_430); } // ******************************************** // 低温标定界面 // ******************************************** void Form_431_OnButton1() { // 自动采集温度AD值 if(Comm_Sample()) { sprintf(form.Edit2.text, "%04d", dcBuff.sampleData.adExtTempr[formParam.caliIdx]); form.cursorId = 4; // 光标到确认按钮 } else form.cursorId = 5; // 光标到返回按钮 Form_SetFocus(); } // 确认按钮 void Form_431_OnButton4() { if(!dcBuff.configDisplay.op_USE_PT100_SENSOR) // 保存低温度 dcBuff.configSensor.sensorMTempr[formParam.caliIdx].zeroValue = atoi(form.Edit2.text); else // 保存校准温度 dcBuff.configSensor.sensorPTempr[formParam.caliIdx].calibrateT = atoi(form.Edit2.text); // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_430(); } void Form_431_Create() { char tempr[10]; if(!dcBuff.configDisplay.op_USE_PT100_SENSOR) sprintf(tempr, "%04d", dcBuff.configSensor.sensorMTempr[formParam.caliIdx].zeroValue); else sprintf(tempr, "%04d", dcBuff.configSensor.sensorPTempr[formParam.caliIdx].calibrateT); memset(&form, 0, sizeof(form)); // 控件 EditBox_Create(&form.Edit2, 1, 4, 4, tempr); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) { if(!dcBuff.configDisplay.op_USE_PT100_SENSOR) Button_Create(&form.Button1, 11, 3, "AUT"); else Button_Hide(&form.Button1); Button_Create(&form.Button4, 5, 3, "YES"); } else { Button_Hide(&form.Button1); Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 if(!dcBuff.configDisplay.op_USE_PT100_SENSOR) form.OnButton1 = Form_431_OnButton1; else form.OnDrawOthers = Form_DispPoint1; form.OnButton4 = Form_431_OnButton4; form.OnButton5 = Form_Return2_430; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 高温标定界面 // ******************************************** void Form_432_OnButton1() { // 自动采集温度AD值 if(Comm_Sample()) { if(!dcBuff.configDisplay.op_USE_PT100_SENSOR) sprintf(form.Edit2.text, "%04d", dcBuff.sampleData.adExtTempr[formParam.caliIdx]); else { if(dcBuff.configDisplay.op_DIFF_RESIST) sprintf(form.Edit2.text, "%04d", (int16_t) dcBuff.sampleData.adExtTempr[formParam.caliIdx]); // 显示:Ω else sprintf(form.Edit2.text, "%04d", (int16_t) PT100_CalResit(dcBuff.sampleData.adExtTempr[formParam.caliIdx], 0)); // 显示:Ω } form.cursorId = 4; // 光标到确认按钮 } else form.cursorId = 5; // 光标到返回按钮 Form_SetFocus(); } // 确认按钮 void Form_432_OnButton4() { if(!dcBuff.configDisplay.op_USE_PT100_SENSOR) // 保存高温度 dcBuff.configSensor.sensorMTempr[formParam.caliIdx].fullValue = atoi(form.Edit2.text); else // 保存校准电阻 dcBuff.configSensor.sensorPTempr[formParam.caliIdx].calibrateR = atoi(form.Edit2.text) * 10; // 保存:0.1Ω // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_430(); } void Form_432_Create() { char tempr[10]; if(!dcBuff.configDisplay.op_USE_PT100_SENSOR) sprintf(tempr, "%04d", dcBuff.configSensor.sensorMTempr[formParam.caliIdx].fullValue); else sprintf(tempr, "%04d", dcBuff.configSensor.sensorPTempr[formParam.caliIdx].calibrateR / 10); // 显示:Ω memset(&form, 0, sizeof(form)); // 控件 EditBox_Create(&form.Edit2, 1, 4, 4, tempr); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) { Button_Create(&form.Button1, 11, 3, "AUT"); Button_Create(&form.Button4, 5, 3, "YES"); } else { Button_Hide(&form.Button1); Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 if(dcBuff.configDisplay.op_USE_PT100_SENSOR) { //form.OnDrawOthers = Form_DispPoint1; // 不显示小数点 } form.OnButton1 = Form_432_OnButton1; form.OnButton4 = Form_432_OnButton4; form.OnButton5 = Form_Return2_430; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 量程设置界面 // ******************************************** // 确认按钮 void Form_500_OnButton4() { // 保存选项序号 formParam.menuIdx[1] = form.Select3.idx; switch(form.Select3.idx) { case 0: // 压力量程 case 1: formParam.caliIdx = form.Select3.idx; Change_Form(FORM_ID_520); break; case 2: // 温度量程 case 3: formParam.caliIdx = form.Select3.idx - 2; Change_Form(FORM_ID_530); break; default: break; } } void Form_500_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); // PT100温度传感器不设置量程 SelectBox_Create(&form.Select3, 0, 5, dcBuff.configDisplay.op_USE_PT100_SENSOR ? 2 : 4, menu_500_items, formParam.menuIdx[1]); Button_Create(&form.Button4, 5, 3, "YES"); Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_500_OnButton4; form.OnButton5 = Form_Return2_000; form.OnTimeOut = Form_Return2Meter; } // 返回按钮 void Form_Return2_500() { formParam.menuIdx[2] = 0; Change_Form(FORM_ID_500); } // ******************************************** // 电容设置界面 // ******************************************** // 确认按钮 void Form_510_OnButton4() { // 保存选项序号 formParam.menuIdx[2] = form.Select3.idx; switch(form.Select3.idx) { case 0: // 底电容设置 Change_Form(FORM_ID_511); break; case 1: // 增长电容设置 Change_Form(FORM_ID_512); break; default: break; } } void Form_510_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); SelectBox_Create(&form.Select3, 1, 4, 2, menu_510_items[dcBuff.configDisplay.op_USE_CAPACITY_SENSOR], formParam.menuIdx[2]); Button_Create(&form.Button4, 4, 3, "YES"); Button_Create(&form.Button5, 7, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_510_OnButton4; form.OnButton5 = Form_Return2_500; form.OnTimeOut = Form_Return2Meter; } // 返回按钮 void Form_Return2_510() { Change_Form(FORM_ID_510); } // ******************************************** // 底电容设置界面 // ******************************************** void Form_511_OnButton1() { // 自动采集电容值 if(Comm_Sample()) { sprintf(form.Edit2.text, "%04d", (int16_t) dcBuff.sampleData.diff); form.cursorId = 4; // 光标到确认按钮 } else form.cursorId = 5; // 光标到返回按钮 Form_SetFocus(); } // 确认按钮 void Form_511_OnButton4() { // 保存底电容 if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) dcBuff.configSensor.sensorDPress.lowRange = atoi(form.Edit2.text); else dcBuff.configSensor.sensorCap.baseC = atoi(form.Edit2.text); // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_510(); } void Form_511_Create() { char baseC[10]; if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) sprintf(baseC, "%04d", dcBuff.configSensor.sensorDPress.lowRange); else sprintf(baseC, "%04d", dcBuff.configSensor.sensorCap.baseC); memset(&form, 0, sizeof(form)); // 控件 EditBox_Create(&form.Edit2, 1, 4, 4, baseC); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) { if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) Button_Hide(&form.Button1); else Button_Create(&form.Button1, 10, 3, "AUT"); Button_Create(&form.Button4, 4, 3, "YES"); } else { Button_Hide(&form.Button1); Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 7, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton1 = Form_511_OnButton1; form.OnButton4 = Form_511_OnButton4; form.OnButton5 = Form_Return2_510; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 增长电容设置界面 // ******************************************** void Form_512_OnButton1() { const float e = e_Src[dcBuff.configBottle.source]; uint32_t d = dcBuff.configBottle.diameter; uint16_t refC; if(dcBuff.configBottle.type == BOTTLE_TYPE_STAND) d = dcBuff.configBottle.len + dcBuff.configBottle.lenExtra * 2 + dcBuff.configBottle.diameter / 2; // 自动计算增长电容 refC = (uint16_t) (Adc_Sensor_Tables[0].k * (d - Adc_Sensor_Tables[0].nl_len) * (e - 1)); sprintf(form.Edit2.text, "%04d", refC); form.cursorId = 4; // 光标到确认按钮 Form_SetFocus(); } // 确认按钮 void Form_512_OnButton4() { // 保存底电容 if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) dcBuff.configSensor.sensorDPress.highRange = atoi(form.Edit2.text); else dcBuff.configSensor.sensorCap.refC = atoi(form.Edit2.text); // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_510(); } void Form_512_Create() { char refC[10]; if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) sprintf(refC, "%04d", dcBuff.configSensor.sensorDPress.highRange); else sprintf(refC, "%04d", dcBuff.configSensor.sensorCap.refC); memset(&form, 0, sizeof(form)); // 控件 EditBox_Create(&form.Edit2, 1, 4, 4, refC); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) { if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) Button_Hide(&form.Button1); else Button_Create(&form.Button1, 10, 3, "AUT"); Button_Create(&form.Button4, 4, 3, "YES"); } else { Button_Hide(&form.Button1); Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 7, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton1 = Form_512_OnButton1; form.OnButton4 = Form_512_OnButton4; form.OnButton5 = Form_Return2_510; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 压力量程设置界面 // ******************************************** // 确认按钮 void Form_520_OnButton4() { // 保存选项序号 formParam.menuIdx[2] = form.Select3.idx; switch(form.Select3.idx) { case 0: // 压力低量程设置 Change_Form(FORM_ID_521); break; case 1: // 压力高量程设置 Change_Form(FORM_ID_522); break; default: break; } } void Form_520_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); SelectBox_Create(&form.Select3, 1, 4, 2, menu_520_items, formParam.menuIdx[2]); Button_Create(&form.Button4, 5, 3, "YES"); Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_520_OnButton4; form.OnButton5 = Form_Return2_500; form.OnTimeOut = Form_Return2Meter; } // 返回按钮 void Form_Return2_520() { Change_Form(FORM_ID_520); } // ******************************************** // 压力低量程设置界面 // ******************************************** // 确认按钮 void Form_521_OnButton4() { // 保存压力低量程 if(formParam.caliIdx == 0) dcBuff.configSensor.sensorPress.lowRange = atoi(form.Edit2.text) * 10; else dcBuff.configSensor.sensorEPress[0].lowRange = atoi(form.Edit2.text) * 10; // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_520(); } void Form_521_Create() { char range[10]; if(formParam.caliIdx == 0) sprintf(range, "%04d", dcBuff.configSensor.sensorPress.lowRange / 10); else sprintf(range, "%04d", dcBuff.configSensor.sensorEPress[0].lowRange / 10); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 4, 4, range); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnDrawOthers = Form_DispPoint2; form.OnButton4 = Form_521_OnButton4; form.OnButton5 = Form_Return2_520; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 压力高量程设置界面 // ******************************************** // 确认按钮 void Form_522_OnButton4() { // 保存压力低量程 if(formParam.caliIdx == 0) dcBuff.configSensor.sensorPress.highRange = atoi(form.Edit2.text) * 10; else dcBuff.configSensor.sensorEPress[0].highRange = atoi(form.Edit2.text) * 10; // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_520(); } void Form_522_Create() { char range[10]; if(formParam.caliIdx == 0) sprintf(range, "%04d", dcBuff.configSensor.sensorPress.highRange / 10); else sprintf(range, "%04d", dcBuff.configSensor.sensorEPress[0].highRange / 10); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 4, 4, range); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnDrawOthers = Form_DispPoint2; form.OnButton4 = Form_522_OnButton4; form.OnButton5 = Form_Return2_520; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 温度量程设置界面 // ******************************************** // 确认按钮 void Form_530_OnButton4() { // 保存选项序号 formParam.menuIdx[2] = form.Select3.idx; switch(form.Select3.idx) { case 0: // 温度低量程设置 Change_Form(FORM_ID_531); break; case 1: // 温度高量程设置 Change_Form(FORM_ID_532); break; default: break; } } void Form_530_Create() { memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Hide(&form.Edit2); SelectBox_Create(&form.Select3, 1, 4, 2, menu_530_items, formParam.menuIdx[2]); Button_Create(&form.Button4, 5, 3, "YES"); Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_530_OnButton4; form.OnButton5 = Form_Return2_500; form.OnTimeOut = Form_Return2Meter; } // 返回按钮 void Form_Return2_530() { Change_Form(FORM_ID_530); } // ******************************************** // 温度低量程设置界面 // ******************************************** void Form_531_OnDrawOthers() { Disp_DispChar(0, '-'); } // 确认按钮 void Form_531_OnButton4() { // 保存温度低量程 dcBuff.configSensor.sensorMTempr[formParam.caliIdx].lowRange = -atoi(form.Edit2.text); // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_530(); } void Form_531_Create() { char range[10]; sprintf(range, "%03d", -dcBuff.configSensor.sensorMTempr[formParam.caliIdx].lowRange); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 3, 3, range); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnDrawOthers = Form_531_OnDrawOthers; form.OnButton4 = Form_531_OnButton4; form.OnButton5 = Form_Return2_530; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 温度高量程设置界面 // ******************************************** // 确认按钮 void Form_532_OnButton4() { // 保存温度高量程 dcBuff.configSensor.sensorMTempr[formParam.caliIdx].highRange = atoi(form.Edit2.text); // 保存 Config_SaveConfig(); // 返回上级菜单 Form_Return2_530(); } void Form_532_Create() { char range[10]; sprintf(range, "%03d", dcBuff.configSensor.sensorMTempr[formParam.caliIdx].highRange); memset(&form, 0, sizeof(form)); // 控件 Button_Hide(&form.Button1); EditBox_Create(&form.Edit2, 1, 3, 3, range); SelectBox_Hide(&form.Select3); if(formParam.privilege == 2) Button_Create(&form.Button4, 5, 3, "YES"); else { Button_Hide(&form.Button4); EditBox_ReadOnly(&form.Edit2); } Button_Create(&form.Button5, 8, 3, "ESC"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnButton4 = Form_532_OnButton4; form.OnButton5 = Form_Return2_530; form.OnTimeOut = Form_Return2Meter; } // ******************************************** // 系统信息界面 // ******************************************** void Form_600_OnDrawOthers() { char version[8]; if(formParam.infoPage == 0) { sprintf(version, "%02d%02d", dcBuff.displayInfo.softDate.month, dcBuff.displayInfo.softDate.day); Disp_H2PressText(version); sprintf(version, "%3d", dcBuff.displayInfo.softVer.minor); Disp_TempText(version); } else { sprintf(version, "%4d", dcBuff.displayInfo.hardVer.major); Disp_H2PressText(version); sprintf(version, "%3d", dcBuff.displayInfo.hardVer.minor); Disp_TempText(version); } } // 确认按钮 void Form_600_OnButton5() { // 复位 VCC_GSM_OFF(); delay_ms(200); NVIC_SystemReset(); } void Form_600_OnKey(u8 key) { if(key == KEY_DOWN) { if(formParam.infoPage >= 1) formParam.infoPage = 0; else formParam.infoPage++; } } void Form_600_Create() { memset(&form, 0, sizeof(form)); // 默认显示软件版本 formParam.infoPage = 0; // 控件 Button_Create(&form.Button1, 11, 3, "ESC"); EditBox_Hide(&form.Edit2); SelectBox_Hide(&form.Select3); Button_Hide(&form.Button4); Button_Create(&form.Button5, 8, 3, "RST"); Form_timeout = OPERATE_TIMEOUT; // 事件回调 form.OnDrawOthers = Form_600_OnDrawOthers; form.OnButton1 = Form_Return2_000; form.OnButton5 = Form_600_OnButton5; form.OnTimeOut = Form_Return2Meter; form.OnKey = Form_600_OnKey; } // ******************************************** // 切换各个功能界面 // ******************************************** void Change_Form(TForm_Id formId) { // 清屏 Disp_Clear(); switch(formId) { case FORM_ID_START: // 启动界面 Form_Start_Create(); break; case FORM_ID_METER: // 表盘显示 Form_Meter_Create(); break; case FORM_ID_PWD: // 输入密码 Form_Pwd_Create(); break; case FORM_ID_000: // 设置菜单 Form_000_Create(); break; case FORM_ID_100: // PSN设置 Form_100_Create(); break; case FORM_ID_200: // 储罐信息设置 Form_200_Create(); break; case FORM_ID_210: // 储罐类型设置 Form_210_Create(); break; case FORM_ID_220: // 介质设置 Form_220_Create(); break; case FORM_ID_230: // 长度设置 Form_230_Create(); break; case FORM_ID_240: // 直径设置 Form_240_Create(); break; case FORM_ID_250: // 充装比设置 Form_250_Create(); break; case FORM_ID_260: // 密度设置 Form_260_Create(); break; case FORM_ID_270: // 压力报警点设置 Form_270_Create(); break; case FORM_ID_280: // 容积显示 Form_280_Create(); break; case FORM_ID_300: // 上报周期设置 Form_300_Create(); break; case FORM_ID_310: // 采集周期设置 Form_310_Create(); break; case FORM_ID_320: // 发送周期设置 Form_320_Create(); break; case FORM_ID_400: // 标定界面 Form_400_Create(); break; case FORM_ID_410: // 差压标定 Form_410_Create(); break; case FORM_ID_411: // 差压低低标定 Form_411_Create(); break; case FORM_ID_412: // 差压高标定 Form_412_Create(); break; case FORM_ID_420: // 压力标定 Form_420_Create(); break; case FORM_ID_421: // 低压力标定 Form_421_Create(); break; case FORM_ID_422: // 高压力标定 Form_422_Create(); break; case FORM_ID_430: // 温度标定 Form_430_Create(); break; case FORM_ID_431: // 低温度标定 Form_431_Create(); break; case FORM_ID_432: // 高温度标定 Form_432_Create(); break; case FORM_ID_500: // 量程设置 Form_500_Create(); break; case FORM_ID_510: // 差压量程 Form_510_Create(); break; case FORM_ID_511: // 差压低量程设置 Form_511_Create(); break; case FORM_ID_512: // 差压高量程设置 Form_512_Create(); break; case FORM_ID_520: // 压力量程 Form_520_Create(); break; case FORM_ID_521: // 压力低量程设置 Form_521_Create(); break; case FORM_ID_522: // 压力高量程设置 Form_522_Create(); break; case FORM_ID_530: // 温度量程 Form_530_Create(); break; case FORM_ID_531: // 温度低量程设置 Form_531_Create(); break; case FORM_ID_532: // 温度高量程设置 Form_532_Create(); break; case FORM_ID_600: // 系统信息 Form_600_Create(); break; default: break; } // 第一个控件设置焦点 Form_FocusFirst(); // 重置超时计数 Form_ResetTimer(); } void Form_Start() { // 初始化 memset(&formParam, 0, sizeof(formParam)); // 启动界面 Change_Form(FORM_ID_START); } uint32_t Comm_Sample() { while(Sample_Busy()) { } Config_Sample_Request = 1; NVIC_SetPendingIRQ(TMR1_IRQn); while(Config_Sample_Request) { } }