NANO130_H2Press/User/form.c

3190 lines
67 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.

#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, // C1100pF标定
FORM_ID_412, // C2400pF标定
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-Button12-Edit2, 3-Select34-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)
{
}
}