1306 lines
47 KiB
C
1306 lines
47 KiB
C
#include "../main/SystemInclude.h"
|
||
|
||
//##############################################################################
|
||
#if(ENABLE_KEY_FUNCTION)
|
||
//##############################################################################
|
||
//==============================================================================
|
||
unsigned int keyDealFlag;
|
||
bool isKeyPressed, keySetPoint; // 键响应程序进入标志
|
||
unsigned int timerTar;
|
||
unsigned int keyFlag, menuIndex; // 键处理标志及菜单索引
|
||
unsigned int setKeyType, setIndex; // 二级菜单处理嵌套
|
||
unsigned int PassWord; // 密码
|
||
unsigned int keyValue, keyBuff, totalTime; // 键值判断
|
||
unsigned int modifyBit, keyFlashTime; // 设置参数闪烁位及时间
|
||
unsigned long int setKeyBuffer; // 参数设置缓存单元
|
||
unsigned long int temp_dcoefNode[DCOEF_MAX];
|
||
unsigned int temp_dcoefNum, temp_dcoefVal[DCOEF_MAX];
|
||
unsigned char setMin[6], setMax[6];
|
||
unsigned int parameterSetError;
|
||
|
||
/******************************************************************************/
|
||
const unsigned char PRTCL_Prompt[]={WORD_F, 1, WORD_NULL, WORD_NULL, WORD_P, WORD_R, WORD_T, WORD_C, WORD_L}; // F1 通讯协议 PRTCL
|
||
const unsigned char ADDR_Prompt[]={WORD_F, 2, WORD_NULL, WORD_NULL, WORD_A, WORD_D, WORD_D, WORD_R, WORD_NULL}; // F2 从机地址 ADDR
|
||
const unsigned char BPS_Prompt[]={WORD_F, 3, WORD_NULL, WORD_NULL, WORD_B, WORD_P, WORD_S, WORD_NULL, WORD_NULL}; // F3 波特率 BPS
|
||
//------------------------------------------------------------------------------
|
||
// 流量类(F11-F30)
|
||
const unsigned char OFFST_Prompt[]={WORD_F, 1, 1, WORD_NULL, WORD_O, WORD_F, WORD_F, WORD_S, WORD_T}; // F11 校准零点 OFFST
|
||
const unsigned char GCF_Prompt[]={WORD_F, 1, 2, WORD_NULL, WORD_G, WORD_C, WORD_F, WORD_NULL, WORD_NULL}; // F12 GCF GCF
|
||
const unsigned char FACTR_Prompt[]={WORD_F, 1, 3, WORD_NULL, WORD_F, WORD_A, WORD_C, WORD_T, WORD_R}; // F13 仪表系数 FACTR
|
||
const unsigned char CORR_Prompt[]={WORD_F, 1, 4, WORD_NULL, WORD_C, WORD_O, WORD_R, WORD_R, WORD_NULL}; // F14 二次修正系数 CORR
|
||
const unsigned char FS_Prompt[]={WORD_F, 1, 5, WORD_NULL, WORD_F, WORD_S, WORD_NULL, WORD_NULL, WORD_NULL}; // F15 量程设置 FS
|
||
const unsigned char RESPS_Prompt[]={WORD_F, 1, 6, WORD_NULL, WORD_R, WORD_E, WORD_S, WORD_P, WORD_S}; // F16 响应时间 RESPS
|
||
//------------------------------------------------------------------------------
|
||
const unsigned char CUTF_Prompt[]={WORD_F, 2, 8, WORD_NULL, WORD_C, WORD_U, WORD_T, WORD_LINE, WORD_F}; // F28 小流量切除 CUT-F
|
||
const unsigned char DIAM_Prompt[]={WORD_F, 2, 9, WORD_NULL, WORD_D, WORD_I, WORD_A, WORD_M, WORD_NULL}; // F29 管径设置 DIAM
|
||
//------------------------------------------------------------------------------
|
||
// 显示类(F31-F40)
|
||
const unsigned char UNTA_Prompt[]={WORD_F, 3, 1, WORD_NULL, WORD_U, WORD_N, WORD_T, WORD_LINE, WORD_A}; // F31 累积流量单位 UNT-A
|
||
const unsigned char UNTF_Prompt[]={WORD_F, 3, 2, WORD_NULL, WORD_U, WORD_N, WORD_T, WORD_LINE, WORD_F}; // F32 实时流量单位 UNT-F
|
||
const unsigned char UNTP_Prompt[]={WORD_F, 3, 3, WORD_NULL, WORD_U, WORD_N, WORD_T, WORD_LINE, WORD_P}; // F33 压力单位 UNT-P
|
||
|
||
const unsigned char DISP_Prompt[]={WORD_F, 3, 9, WORD_NULL, WORD_D, WORD_I, WORD_S, WORD_P, WORD_NULL}; // F39 显示模式 DISP
|
||
//------------------------------------------------------------------------------
|
||
// 模拟接口类(F31-F40)
|
||
const unsigned char PULSE_Prompt[]={WORD_F, 4, 1, WORD_NULL, WORD_P, WORD_U, WORD_L, WORD_S, WORD_E}; // F41 脉冲当量 PULSE
|
||
|
||
//------------------------------------------------------------------------------
|
||
// 报警类(F41-F50)
|
||
const unsigned char ALMH_Prompt[]={WORD_F, 5, 1, WORD_NULL, WORD_A, WORD_L, WORD_M, WORD_LINE, WORD_H}; // F51 高流量报警 ALM-H
|
||
const unsigned char ALML_Prompt[]={WORD_F, 5, 2, WORD_NULL, WORD_A, WORD_L, WORD_M, WORD_LINE, WORD_L}; // F52 低流量报警 ALM-L
|
||
const unsigned char ALMA_Prompt[]={WORD_F, 5, 3, WORD_NULL, WORD_A, WORD_L, WORD_M, WORD_LINE, WORD_A}; // F53 总量报警上限 ALM-A
|
||
const unsigned char ALMT_Prompt[]={WORD_F, 5, 4, WORD_NULL, WORD_A, WORD_L, WORD_M, WORD_LINE, WORD_T}; // F54 时间报警 ALM-T
|
||
|
||
//------------------------------------------------------------------------------
|
||
// 无线类(F71-F90)
|
||
const unsigned char LRID_Prompt[]={WORD_F, 7, 1, WORD_NULL, WORD_L, WORD_R, WORD_LINE, WORD_I, WORD_D}; // F71 LORA本机地址 LR-ID
|
||
const unsigned char NETID_Prompt[]={WORD_F, 7, 2, WORD_NULL, WORD_N, WORD_E, WORD_T, WORD_I, WORD_D}; // F72 LORA上级地址 NETID
|
||
const unsigned char LRCH_Prompt[]={WORD_F, 7, 3, WORD_NULL, WORD_L, WORD_R, WORD_LINE, WORD_C, WORD_H}; // F73 LORA信道 LR_CH
|
||
|
||
//------------------------------------------------------------------------------
|
||
// 操作类(F91-F98)
|
||
const unsigned char PASS_Prompt[]={WORD_F, 9, 1, WORD_NULL, WORD_P, WORD_A, WORD_S, WORD_S, WORD_NULL}; // F91 设置密码 PASS
|
||
const unsigned char CLRA_Prompt[]={WORD_F, 9, 2, WORD_NULL, WORD_C, WORD_L, WORD_R, WORD_LINE, WORD_A}; // F92 清除总流量 CLR-A
|
||
const unsigned char CLRT_Prompt[]={WORD_F, 9, 3, WORD_NULL, WORD_C, WORD_L, WORD_R, WORD_LINE, WORD_T}; // F93 清除时间 CLR-T
|
||
const unsigned char RS2ND_Prompt[]={WORD_F, 9, 4, WORD_NULL, WORD_R, WORD_S, WORD_2, WORD_N, WORD_D}; // F94 恢复二次修正 RS2ND
|
||
|
||
//------------------------------------------------------------------------------
|
||
const unsigned char QUIT_Prompt[]={WORD_F, 9, 9, WORD_NULL, WORD_Q, WORD_U, WORD_I, WORD_T, WORD_NULL}; // F99 退出设置 QUIT
|
||
|
||
//------------------------------------------------------------------------------
|
||
const unsigned char SAVE_Prompt[]={WORD_S, WORD_A, WORD_V, WORD_E, WORD_Y, WORD_E, WORD_S, WORD_NULL, WORD_NULL};
|
||
const unsigned char PassWord_Prompt[]={WORD_P, WORD_A, WORD_S, WORD_S, WORD_NULL, WORD_0, WORD_0, WORD_0, WORD_0};
|
||
|
||
//==============================================================================
|
||
// for key value
|
||
const unsigned char YESNO_VALUE[]={WORD_N, WORD_O, WORD_NULL, WORD_NULL, WORD_NULL, WORD_Y, WORD_E, WORD_S, WORD_NULL, WORD_NULL};
|
||
const unsigned char RS2ND_VALUE[]={WORD_R, WORD_T, WORD_N, WORD_NULL, WORD_NULL, WORD_R, WORD_E, WORD_S, WORD_E, WORD_T};
|
||
|
||
/******************************************************************************/
|
||
// for display buffer
|
||
const unsigned char DisOffset[] = {FUN_BUF_PROMPT1, FUN_BUF_PROMPT2, FUN_BUF_PROMPT3, FUN_BUF_PROMPT4, FUN_BUF_PROMPT5, FUN_BUF_DECIMAL};
|
||
|
||
/******************************************************************************/
|
||
void DisplayForKeyOperation(void)
|
||
{
|
||
display_data[FUN_BUF_PROMPT1] = CodeACC[Dis1[FUN_PROMPT1]];
|
||
display_data[FUN_BUF_PROMPT2] = CodeACC[Dis1[FUN_PROMPT2]];
|
||
display_data[FUN_BUF_PROMPT3] = CodeACC[Dis1[FUN_PROMPT3]];
|
||
display_data[FUN_BUF_PROMPT4] = CodeACC[Dis1[FUN_PROMPT4]];
|
||
display_data[FUN_BUF_PROMPT5] = CodeACC[Dis1[FUN_PROMPT5]];
|
||
display_data[FUN_BUF_DECIMAL] = CodeACC[Dis1[FUN_DECIMAL]];
|
||
|
||
display_data[FUN_BUF_CODE1] = CodeFlowRate[Dis1[FUN_CODE_1]];
|
||
display_data[FUN_BUF_CODE2] = CodeFlowRate[Dis1[FUN_CODE_2]];
|
||
display_data[FUN_BUF_CODE3] = CodeFlowRate[Dis1[FUN_CODE_3]];
|
||
display_data[FUN_BUF_CODE4] = CodeFlowRate[Dis1[FUN_CODE_4]];
|
||
|
||
if(keySetPoint) display_data[KEYSET_DOT] |= KEYSET_DOT_BIT;
|
||
|
||
LcdWriteDisplay();
|
||
}
|
||
|
||
/******************************************************************************/
|
||
#pragma vector = KEY_VECTOR
|
||
__interrupt void KeyInterrupt_isr(void)
|
||
{
|
||
intVector = KEY_IV;
|
||
intVector &= M_KEY_VECTOR+ INC_KEY_VECTOR + DEC_KEY_VECTOR;
|
||
|
||
if(intVector != 0)
|
||
{
|
||
isKeyPressed = 1;
|
||
systemProcessing |= KEY_HANDLE;
|
||
LPM1_EXIT;
|
||
}
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void KeyReset(void)
|
||
{
|
||
KEY_INPUT();
|
||
keyFlag = DIS_PARA_INT;
|
||
isKeyPressed = 0;
|
||
keyValue = 0;
|
||
menuIndex = 0;
|
||
setKeyType = 0;
|
||
setIndex = 0;
|
||
PassWord = 0;
|
||
timerTar = 0;
|
||
keyDealFlag = 0;
|
||
|
||
systemProcessing &= ~KEY_HANDLE;
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void DisableKeyInterrupt(void)
|
||
{
|
||
KEY_IE &= ~KEY_PIN;
|
||
KEY_IFG &= ~KEY_PIN; //清零中断标志
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void EnableKeyInterrupt(void)
|
||
{
|
||
KEY_IES |= KEY_PIN;
|
||
KEY_IFG &= ~KEY_PIN; //清零中断标志
|
||
KEY_IE |= KEY_PIN;
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void KeyEditInit(void)
|
||
{
|
||
// key intput interrupt
|
||
KEY_INPUT();
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void FlashBitForSetup(void)
|
||
{
|
||
unsigned char tempT, I;
|
||
|
||
if(keyFlag != FLASH_BIT) return;
|
||
if(keyFlashTime == RTCSEC) return;
|
||
|
||
keyFlashTime = RTCSEC;
|
||
I = DisOffset[modifyBit];
|
||
|
||
tempT = display_data[I];
|
||
tempT &= ~BIT0;
|
||
if(tempT == 0) display_data[I] |= CodeACC[Dis1[modifyBit]];
|
||
else display_data[I] &= (unsigned char)BIT0;
|
||
|
||
//LcdWriteDisplayFirst();
|
||
LcdWriteDisplay();
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void ComputeTime(void)
|
||
{
|
||
unsigned int timerTemp;
|
||
|
||
// main timer: 1s = 16384
|
||
// 50ms: 820
|
||
timerTemp = MAINTAR;
|
||
if(timerTar == 0) timerTar = timerTemp;
|
||
else
|
||
{
|
||
if(timerTar == 65535) return;
|
||
if(timerTar < timerTemp) timerTemp -= timerTar;
|
||
else timerTemp += 65535 - timerTar;
|
||
|
||
if(timerTemp >= KEY_RESPONSE_TIME) timerTar = 65535; //timerTar = KEY_RESPONSE_TIME;
|
||
}
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void ReadKeyValue(void)
|
||
{
|
||
KeyEditInit();
|
||
keyValue = READ_KEY_VALUE();
|
||
if(keyValue != KEY_PIN)
|
||
{
|
||
// 按键初始化
|
||
if(keyBuff != keyValue)
|
||
{
|
||
timerTar = MAINTAR;
|
||
keyBuff = keyValue;
|
||
totalTime = RTCSEC;
|
||
}
|
||
else ComputeTime();
|
||
keyValue = 0;
|
||
}
|
||
else // 按键释放,判断按键
|
||
{
|
||
keyValue = 0;
|
||
DisableKeyInterrupt();
|
||
if((keyBuff == 0) || (keyBuff == KEY_PIN))
|
||
{
|
||
keyBuff = KEY_PIN;
|
||
if(IDvalidTime >= EXIT_30S) KeyReset();
|
||
EnableKeyInterrupt();
|
||
return;
|
||
}
|
||
|
||
// 判断按键时间及键值判断
|
||
// ComputeTime();
|
||
// if(totalTime > KEY_RESPONSE_TIME)
|
||
if(timerTar == 65535)
|
||
{
|
||
keyBuff = ~keyBuff;
|
||
keyBuff &= KEY_PIN;
|
||
if(keyBuff == M_KEY)
|
||
{
|
||
keyValue = RTCSEC;
|
||
if(totalTime > keyValue) totalTime = keyValue + 60 - totalTime;
|
||
else totalTime = keyValue - totalTime;
|
||
|
||
if(totalTime > 1) keyValue = LONG_M_KEY;
|
||
else keyValue = M_KEY;
|
||
|
||
//if(totalTime < KEY_HOLD_TIME) keyValue = M_KEY;
|
||
//else keyValue = LONG_M_KEY;
|
||
}
|
||
else if(keyBuff == INC_KEY) keyValue = INC_KEY;
|
||
else if(keyBuff == DEC_KEY) keyValue = DEC_KEY;
|
||
else keyValue = 0;
|
||
}
|
||
|
||
totalTime = 0;
|
||
keyBuff = KEY_PIN;
|
||
}
|
||
}
|
||
|
||
/******************************************************************************/
|
||
unsigned long int ComputeSumOfFiveDigits(unsigned int modifyFirstBit, unsigned int modifyLastBit)
|
||
{
|
||
unsigned long int computeSum = 0;
|
||
|
||
for(; modifyFirstBit <= modifyLastBit; modifyFirstBit++)
|
||
{
|
||
computeSum *= (unsigned long int)10;
|
||
computeSum += (unsigned long int)Dis1[modifyFirstBit];
|
||
}
|
||
|
||
return computeSum;
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void JudgeKeySetMax(unsigned int setBit, unsigned int endBit)
|
||
{
|
||
unsigned int I;
|
||
|
||
for(I = 0; setBit <= endBit; setBit++, I++)
|
||
{
|
||
if(Dis1[setBit] < setMax[I]) return;
|
||
else if(Dis1[setBit] > setMax[I])
|
||
{
|
||
Dis1[setBit] = setMax[I];
|
||
parameterSetError = 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void JudgeKeySetMin(unsigned int setBit, unsigned int endBit)
|
||
{
|
||
unsigned int I;
|
||
|
||
for(I = 0; setBit <= endBit; setBit++, I++)
|
||
{
|
||
if(Dis1[setBit] > setMin[I]) return;
|
||
else if(Dis1[setBit] < setMin[I])
|
||
{
|
||
Dis1[setBit] = setMin[I];
|
||
parameterSetError = 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
/******************************************************************************/
|
||
// 设置按键提示符
|
||
void SettingKeyPrompt(const unsigned char *Prompt)
|
||
{
|
||
unsigned int I;
|
||
|
||
for(I = FUN_CODE_1; I <= FUN_CODE_4; I++) Dis1[I] = *Prompt++;
|
||
for(I = FUN_PROMPT1; I <= FUN_PROMPT5; I++) Dis1[I] = *Prompt++;
|
||
Dis1[FUN_DECIMAL] = WORD_NULL;
|
||
|
||
keyValue = 0;
|
||
keySetPoint = 0;
|
||
SetDisplayArray(0);
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void InitOfSettingArea(unsigned long int setValue, unsigned int startBit, unsigned int setLen)
|
||
{
|
||
unsigned int I;
|
||
|
||
for(I = FUN_PROMPT1; I<=FUN_DECIMAL; I++) Dis1[I] = WORD_NULL;
|
||
|
||
modifyBit = startBit;
|
||
keyValue = 0;
|
||
keyFlag = FLASH_BIT;
|
||
|
||
setKeyBuffer = setValue;
|
||
ConvertHEXToBCDArray(setValue, &Dis1[startBit], setLen, HIGH_FIRST);
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void InitOfSettingPrompt(const unsigned char *PromptF, const unsigned char *Prompt)
|
||
{
|
||
unsigned int I;
|
||
|
||
for(I = FUN_CODE_1; I <= FUN_CODE_4; I++) Dis1[I] = *PromptF++;
|
||
for(I = FUN_PROMPT1; I <= FUN_PROMPT5; I++) Dis1[I] = *Prompt++;
|
||
Dis1[FUN_DECIMAL] = WORD_NULL;
|
||
|
||
setKeyBuffer = 0;
|
||
modifyBit = FUN_PROMPT1;
|
||
keyValue = 0;
|
||
keyFlag = FLASH_BIT;
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void ReturnKeySetup(void)
|
||
{
|
||
menuIndex = STD_RETURN; // 长按键退出
|
||
keyFlag = DIS_PARA_INT;
|
||
keyValue = 0xff;
|
||
}
|
||
|
||
/******************************************************************************/
|
||
bool KeyValueOperation(unsigned int modifyFirstBit, unsigned int modifyLastBit)
|
||
{
|
||
switch(keyValue)
|
||
{
|
||
case LONG_M_KEY:
|
||
keyFlag = 0xff;
|
||
keyDealFlag = STD_RETURN; // 退出按键设置
|
||
// 菜单状态直接退出
|
||
// 参数设置直接跳至保存页面
|
||
parameterSetError = 0;
|
||
JudgeKeySetMax(modifyFirstBit, modifyLastBit);
|
||
JudgeKeySetMin(modifyFirstBit, modifyLastBit);
|
||
setKeyBuffer = (unsigned long int)ComputeSumOfFiveDigits(modifyFirstBit, modifyLastBit);
|
||
return 1;
|
||
|
||
case M_KEY:
|
||
modifyBit++;
|
||
keyValue = 0;
|
||
keyDealFlag = 0;
|
||
|
||
if((modifyBit <= modifyLastBit) && (modifyBit >= modifyFirstBit)) break;
|
||
|
||
parameterSetError = 0;
|
||
JudgeKeySetMax(modifyFirstBit, modifyLastBit);
|
||
JudgeKeySetMin(modifyFirstBit, modifyLastBit);
|
||
setKeyBuffer = (unsigned long int)ComputeSumOfFiveDigits(modifyFirstBit, modifyLastBit);
|
||
|
||
return 1;
|
||
|
||
case INC_KEY:
|
||
if(Dis1[modifyBit] >= 9) break;
|
||
Dis1[modifyBit]++;
|
||
break;
|
||
|
||
case DEC_KEY:
|
||
if(Dis1[modifyBit] == 0) break;
|
||
Dis1[modifyBit]--;
|
||
break;
|
||
|
||
default:
|
||
keyValue = 0;
|
||
return 0;
|
||
}
|
||
|
||
JudgeKeySetMax(modifyFirstBit, modifyBit);
|
||
JudgeKeySetMin(modifyFirstBit, modifyBit);
|
||
keyValue = 0;
|
||
return 0;
|
||
}
|
||
|
||
/******************************************************************************/
|
||
bool KeyValueOperateForPrompt(const unsigned char *Prompt)
|
||
{
|
||
unsigned int I;
|
||
|
||
switch(keyValue)
|
||
{
|
||
case LONG_M_KEY: keyDealFlag = STD_RETURN;
|
||
case M_KEY:
|
||
keyFlag = DIS_PARA_INT;
|
||
//setKeyType = 3;
|
||
return 1;
|
||
|
||
case INC_KEY:
|
||
Prompt += 5;
|
||
for(I = FUN_PROMPT1; I <= FUN_PROMPT5; I++) Dis1[I] = *Prompt++;
|
||
setKeyBuffer = 1;
|
||
break;
|
||
|
||
case DEC_KEY:
|
||
for(I = FUN_PROMPT1; I <= FUN_PROMPT5; I++) Dis1[I] = *Prompt++;
|
||
setKeyBuffer = 0;
|
||
break;
|
||
}
|
||
|
||
keyValue = 0;
|
||
return 0;
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void DisplaySetIndex(void)
|
||
{
|
||
if(keyFlag != DISPLAY_MENU) return;
|
||
|
||
setKeyType = 0;
|
||
switch(keyValue)
|
||
{
|
||
case LONG_M_KEY:
|
||
keyFlag = 0xff;
|
||
menuIndex = STD_RETURN; // 退出按键设置
|
||
break;
|
||
|
||
case M_KEY:
|
||
keyFlag = DIS_PARA_INT;
|
||
keyValue = 0;
|
||
break;
|
||
|
||
case DEC_KEY:
|
||
if(menuIndex > 1) menuIndex--;
|
||
else menuIndex = STD_KEY_QUIT;
|
||
|
||
break;
|
||
|
||
case INC_KEY:
|
||
menuIndex++;
|
||
if(menuIndex > STD_KEY_QUIT) menuIndex = 1;
|
||
break;
|
||
|
||
}
|
||
}
|
||
|
||
/******************************************************************************/
|
||
unsigned int SaveModifyValue(void)
|
||
{
|
||
if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
modifyBit = FUN_PROMPT1;
|
||
keyFlag = FLASH_BIT;
|
||
SettingKeyPrompt(&SAVE_Prompt[0]);
|
||
}
|
||
|
||
switch(keyValue)
|
||
{
|
||
case LONG_M_KEY:
|
||
case M_KEY:
|
||
keyValue = 0;
|
||
if( Dis1[FUN_PROMPT1] == WORD_Y ) return SAVE;
|
||
return NO;
|
||
|
||
case INC_KEY:
|
||
case DEC_KEY:
|
||
if(Dis1[FUN_PROMPT1] == WORD_N)
|
||
{
|
||
Dis1[FUN_PROMPT1] = WORD_Y;
|
||
Dis1[FUN_PROMPT2] = WORD_E;
|
||
Dis1[FUN_PROMPT3] = WORD_S;
|
||
}
|
||
else
|
||
{
|
||
Dis1[FUN_PROMPT1] = WORD_N;
|
||
Dis1[FUN_PROMPT2] = WORD_O;
|
||
Dis1[FUN_PROMPT3] = WORD_NULL;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
keyValue = 0;
|
||
return NEXT;
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void ExitKeyOperation(void)
|
||
{
|
||
if(keyFlag == DISPLAY_MENU)
|
||
{
|
||
SettingKeyPrompt(&QUIT_Prompt[0]);
|
||
return;
|
||
}
|
||
else if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
InitOfSettingPrompt(&QUIT_Prompt[0], &YESNO_VALUE[0]);
|
||
setKeyBuffer = 0;
|
||
}
|
||
|
||
if(KeyValueOperateForPrompt(&YESNO_VALUE[0]))
|
||
{
|
||
keyValue = 0xFF;
|
||
if(setKeyBuffer == 1) menuIndex = STD_RETURN;
|
||
else keyFlag = DISPLAY_MENU;
|
||
}
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void JudgeSaveAndReturn(unsigned long int judgeValue, unsigned int setGain)
|
||
{
|
||
setKeyBuffer *= (unsigned long int)setGain;
|
||
|
||
// 如果为退出标志,且参数未被修改直接退出
|
||
if(keyDealFlag == STD_RETURN)
|
||
{
|
||
if((parameterSetError != 0) || (setKeyBuffer == judgeValue))
|
||
{
|
||
ReturnKeySetup();
|
||
return;
|
||
}
|
||
}
|
||
else if(parameterSetError == 1)
|
||
{
|
||
setKeyType = 0;
|
||
keyFlag = DISPLAY_MENU;
|
||
return;
|
||
}
|
||
|
||
keyFlag = DIS_PARA_INT;
|
||
setKeyType = 1;
|
||
}
|
||
|
||
/******************************************************************************/
|
||
bool KeyPasswordInput(void)
|
||
{
|
||
if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
SetDisplayArray(0);
|
||
|
||
modifyBit = FUN_PROMPT2;
|
||
keyFlag = FLASH_BIT;
|
||
|
||
ClearDisplay();
|
||
SettingKeyPrompt(&PassWord_Prompt[0]);
|
||
ConvertHEXToBCDArray((unsigned long int)9999, &setMax[0], 4, HIGH_FIRST);
|
||
ConvertHEXToBCDArray((unsigned long int)0, &setMin[0], 4, HIGH_FIRST);
|
||
}
|
||
|
||
keyFlag = FLASH_BIT;
|
||
if(KeyValueOperation(FUN_PROMPT2, FUN_PROMPT5))
|
||
{
|
||
PassWord = (unsigned int)setKeyBuffer;
|
||
return 1;
|
||
}
|
||
else return 0;
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void JudgePasswordInput(unsigned int activePassword)
|
||
{
|
||
if(PassWord == activePassword)
|
||
{
|
||
setKeyType++;
|
||
keyFlag = DIS_PARA_INT;
|
||
return;
|
||
}
|
||
else if(!KeyPasswordInput()) return;
|
||
|
||
if(keyDealFlag == STD_RETURN)
|
||
{
|
||
keyFlag = 0xff;
|
||
menuIndex = STD_RETURN; // 退出按键设置
|
||
// 菜单状态直接退出
|
||
// 参数设置直接跳至保存页面
|
||
}
|
||
else if(PassWord == activePassword)
|
||
{
|
||
setKeyType++;
|
||
keyFlag = DIS_PARA_INT;
|
||
}
|
||
else
|
||
{
|
||
keyFlag = DISPLAY_MENU;
|
||
setKeyType = 0;
|
||
keyValue = 0xff;
|
||
}
|
||
}
|
||
|
||
/******************************************************************************/
|
||
bool ExitCurrentSetup(void)
|
||
{
|
||
unsigned int I;
|
||
|
||
I = SaveModifyValue();
|
||
keyValue = 0;
|
||
if(I == NEXT) return 0; // 继续选择是否保存?
|
||
|
||
PassWord = 0;
|
||
setKeyType = 0;
|
||
keyFlag = DISPLAY_MENU;
|
||
keyValue = 0xff;
|
||
|
||
if(keyDealFlag == STD_RETURN) menuIndex = STD_RETURN;
|
||
if(I != SAVE) return 0; // 执行保存或放弃保存操作,并返还菜单
|
||
|
||
return 1;
|
||
}
|
||
|
||
/******************************************************************************/
|
||
// 设置仪表系数
|
||
void ModifyMeterFactor(void)
|
||
{
|
||
if(setKeyType == 0)
|
||
{
|
||
// 键功能提示符
|
||
// F13 仪表系数 FACTR
|
||
if(keyFlag == DISPLAY_MENU)
|
||
{
|
||
SettingKeyPrompt(&FACTR_Prompt[0]);
|
||
return;
|
||
|
||
}
|
||
else if(keyFlag == DIS_PARA_INT) // 键参数初始化
|
||
{
|
||
InitOfSettingArea((unsigned long int)MeterFactor, FUN_PROMPT1, 5); // 初始化参数设置区域
|
||
ConvertHEXToBCDArray((unsigned long int)METER_PARAMETER_MAX, &setMax[0], 5, HIGH_FIRST);
|
||
ConvertHEXToBCDArray((unsigned long int)METER_PARAMETER_MIN, &setMin[0], 5, HIGH_FIRST);
|
||
}
|
||
|
||
// 键值处理
|
||
if(KeyValueOperation(FUN_PROMPT1, FUN_PROMPT5)) JudgeSaveAndReturn((unsigned long int)MeterFactor, 1);
|
||
}
|
||
|
||
//===========================================================================
|
||
// 保存设置参数
|
||
if(setKeyType != 1) return;
|
||
if(!ExitCurrentSetup()) return;
|
||
if(MeterFactor == setKeyBuffer) return;
|
||
|
||
tempL.DWord = (unsigned long int)setKeyBuffer;
|
||
MeterFactor = WriteShortParameterToEEPROM(METER_FACTOR, METER_FACTOR_WIDTH);
|
||
}
|
||
|
||
/******************************************************************************/
|
||
//修改二次修正点数
|
||
void SelectDcoefNode(void)
|
||
{
|
||
if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
SetDisplayArray(0);
|
||
modifyBit = FUN_PROMPT5;
|
||
keyValue = 0;
|
||
keySetPoint = 0;
|
||
keyFlag = FLASH_BIT;
|
||
|
||
//STD_KEY_CORR 14 // F14 二次修正系数 CORR
|
||
Dis1[FUN_CODE_1] = WORD_F;
|
||
Dis1[FUN_CODE_2] = 1;
|
||
Dis1[FUN_CODE_3] = 4;
|
||
Dis1[FUN_CODE_4] = WORD_NULL;
|
||
|
||
Dis1[FUN_PROMPT1] = WORD_C;
|
||
Dis1[FUN_PROMPT2] = WORD_O;
|
||
Dis1[FUN_PROMPT3] = WORD_R;
|
||
Dis1[FUN_PROMPT4] = WORD_LINE;
|
||
Dis1[FUN_PROMPT5] = setIndex+1;
|
||
Dis1[FUN_DECIMAL] = WORD_NULL;
|
||
|
||
setMax[0] = 9;
|
||
setMin[0] = 1;
|
||
//ConvertHEXToBCDArray((unsigned long int)METER_PARAMETER_MAX, &setMax[0], 5, HIGH_FIRST);
|
||
//ConvertHEXToBCDArray((unsigned long int)METER_PARAMETER_MIN, &setMin[0], 5, HIGH_FIRST);
|
||
}
|
||
|
||
if(KeyValueOperation(FUN_PROMPT5, FUN_PROMPT5))
|
||
{
|
||
if(keyDealFlag == STD_RETURN) ReturnKeySetup();
|
||
else
|
||
{
|
||
if(Dis1[FUN_PROMPT5] > dcoefNum)
|
||
{
|
||
//Dis1[FUN_PROMPT5] = dcoefNum;
|
||
setKeyType = 0;
|
||
keyValue = 0xff;
|
||
keyFlag = DISPLAY_MENU;
|
||
return;
|
||
}
|
||
setIndex = Dis1[FUN_PROMPT5]-1;
|
||
keyFlag = DIS_PARA_INT;
|
||
setKeyType++;
|
||
|
||
temp_dcoefNode[setIndex] = dcoefNode[setIndex];
|
||
temp_dcoefVal[setIndex] = dcoefVal[setIndex];
|
||
}
|
||
}
|
||
|
||
if(Dis1[FUN_PROMPT5] > dcoefNum)
|
||
{
|
||
//Dis1[FUN_PROMPT5] = dcoefNum;
|
||
setKeyType = 0;
|
||
keyValue = 0xff;
|
||
keyFlag = DISPLAY_MENU;
|
||
}
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void ModifyDcoefNode(void)
|
||
{
|
||
//unsigned long int temp;
|
||
|
||
if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
SetDisplayArray(0);
|
||
|
||
modifyBit = FUN_PROMPT2;
|
||
keyValue = 0;
|
||
keyFlag = FLASH_BIT;
|
||
|
||
Dis1[FUN_CODE_1] = WORD_P;
|
||
Dis1[FUN_CODE_2] = setIndex+1;
|
||
Dis1[FUN_CODE_3] = WORD_LINE;
|
||
Dis1[FUN_CODE_4] = WORD_LINE;
|
||
|
||
Dis1[FUN_PROMPT1] = WORD_NULL;
|
||
ConvertHEXToBCDArray(dcoefNode[setIndex]/100, &Dis1[FUN_PROMPT2], 5, HIGH_FIRST);
|
||
ConvertHEXToBCDArray((unsigned long int)99999, &setMax[0], 5, HIGH_FIRST);
|
||
ConvertHEXToBCDArray((unsigned long int)0, &setMin[0], 5, HIGH_FIRST);
|
||
|
||
keySetPoint = 1;
|
||
}
|
||
|
||
//键值处理
|
||
if(KeyValueOperation(FUN_PROMPT2, FUN_DECIMAL))
|
||
{
|
||
temp_dcoefNode[setIndex] = setKeyBuffer * 100;
|
||
|
||
if(keyDealFlag == STD_RETURN) setKeyType = 5;
|
||
else setKeyType++;
|
||
keyFlag = DIS_PARA_INT;
|
||
}
|
||
|
||
keyValue = 0;
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void ModifyDcoefVal(void)
|
||
{
|
||
if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
SetDisplayArray(0);
|
||
|
||
modifyBit = FUN_PROMPT1;
|
||
keyValue = 0;
|
||
keyFlag = FLASH_BIT;
|
||
keySetPoint = 0;
|
||
|
||
Dis1[FUN_CODE_1] = WORD_P;
|
||
Dis1[FUN_CODE_2] = setIndex+1;
|
||
Dis1[FUN_CODE_3] = WORD_LINE;
|
||
Dis1[FUN_CODE_4] = WORD_LINE;
|
||
|
||
Dis1[FUN_PROMPT1] = WORD_NULL;
|
||
Dis1[FUN_DECIMAL] = WORD_NULL;
|
||
|
||
ConvertHEXToBCDArray(dcoefVal[setIndex], &Dis1[FUN_PROMPT1], 5, HIGH_FIRST);
|
||
ConvertHEXToBCDArray((unsigned long int)METER_PARAMETER_MAX, &setMax[0], 5, HIGH_FIRST);
|
||
ConvertHEXToBCDArray((unsigned long int)METER_PARAMETER_MIN, &setMin[0], 5, HIGH_FIRST);
|
||
}
|
||
|
||
//键值处理
|
||
if(KeyValueOperation(FUN_PROMPT1, FUN_PROMPT5))
|
||
{
|
||
temp_dcoefVal[setIndex] = (unsigned int)setKeyBuffer;
|
||
|
||
//if(menuIndex == STD_RETURN) setKeyType = 5;
|
||
if(keyDealFlag == STD_RETURN) setKeyType = 5;
|
||
else setKeyType++;
|
||
keyFlag = DIS_PARA_INT;
|
||
}
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void ModifyDcoefNodeAndValue(void)
|
||
{
|
||
if(setKeyType == 0)
|
||
{
|
||
if(keyFlag == DISPLAY_MENU)
|
||
{
|
||
//STD_KEY_CORR 14 // F14 二次修正系数 CORR
|
||
SettingKeyPrompt(&CORR_Prompt[0]);
|
||
setIndex = 0;
|
||
return;
|
||
}
|
||
else if(keyFlag == DIS_PARA_INT) setKeyType = 1;
|
||
}
|
||
|
||
if(setKeyType == 1) JudgePasswordInput(LEVEL_2_PASSWORD); //2222
|
||
if(setKeyType == 2) SelectDcoefNode();
|
||
if(setKeyType == 3) ModifyDcoefNode();
|
||
if(setKeyType == 4) ModifyDcoefVal();
|
||
|
||
//===========================================================================
|
||
// 保存设置参数
|
||
if(setKeyType != 5) return;
|
||
unsigned int keyState;
|
||
|
||
if(keyDealFlag == STD_RETURN)
|
||
{
|
||
if((dcoefNode[setIndex] == temp_dcoefNode[setIndex]) && (dcoefVal[setIndex] == temp_dcoefVal[setIndex]))
|
||
{
|
||
ReturnKeySetup();
|
||
return;
|
||
}
|
||
}
|
||
|
||
keyState = SaveModifyValue();
|
||
keyValue = 0;
|
||
if(keyState == NEXT) return; // 继续选择是否保存?
|
||
if(keyDealFlag == STD_RETURN) menuIndex = STD_RETURN; // 长按键退出
|
||
|
||
setKeyType = 2;
|
||
keyFlag = DIS_PARA_INT;
|
||
keyValue = 0xff;
|
||
if(keyState != SAVE) return; // 执行保存或放弃保存操作,并返还菜单
|
||
|
||
// 存储二次修正系数
|
||
dcoefNode[setIndex] = temp_dcoefNode[setIndex];
|
||
dcoefVal[setIndex] = temp_dcoefVal[setIndex];
|
||
StoreDevCoefNodeAndValue(setIndex);
|
||
// RetriveDevCoef();
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void ModifyMaxFlowRate(void)
|
||
{
|
||
if(setKeyType == 0)
|
||
{
|
||
if(keyFlag == DISPLAY_MENU) // 键功能提示符
|
||
{
|
||
// STD_KEY_ADDR 2 // F15 FS
|
||
SettingKeyPrompt(&FS_Prompt[0]);
|
||
return;
|
||
}
|
||
else if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
InitOfSettingArea((unsigned long int)maxFlowRate/100, FUN_PROMPT2, 5); // 初始化参数设置区域
|
||
ConvertHEXToBCDArray((unsigned long int)99999, &setMax[0], 5, HIGH_FIRST);
|
||
ConvertHEXToBCDArray((unsigned long int)0, &setMin[0], 5, HIGH_FIRST);
|
||
|
||
display_data[ACC_POINT] |= (unsigned char)ACC_POINT_BIT;
|
||
}
|
||
|
||
// 键值处理
|
||
if(KeyValueOperation(FUN_PROMPT2, FUN_DECIMAL)) JudgeSaveAndReturn((unsigned long int)maxFlowRate, 100);
|
||
}
|
||
|
||
//===========================================================================
|
||
// 保存设置参数
|
||
if(setKeyType != 1) return;
|
||
if(!ExitCurrentSetup()) return;
|
||
if(maxFlowRate == setKeyBuffer) return;
|
||
tempDev.DWord[0] = (unsigned long int)setKeyBuffer;
|
||
maxFlowRate = WriteLongParameterToEEPROM(MAX_FLOW, MAX_FLOW_WIDTH);
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void ModifyWorkDiameter(void)
|
||
{
|
||
if(setKeyType == 0)
|
||
{
|
||
if(keyFlag == DISPLAY_MENU) // 键功能提示符
|
||
{
|
||
// F29 DIAM
|
||
SettingKeyPrompt(&DIAM_Prompt[0]);
|
||
return;
|
||
}
|
||
else if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
InitOfSettingArea((unsigned long int)workDiameter, FUN_PROMPT2, 4); // 初始化参数设置区域
|
||
ConvertHEXToBCDArray((unsigned long int)1500, &setMax[0], 4, HIGH_FIRST);
|
||
ConvertHEXToBCDArray((unsigned long int)25, &setMin[0], 4, HIGH_FIRST);
|
||
}
|
||
|
||
// 键值处理
|
||
if(KeyValueOperation(FUN_PROMPT2, FUN_PROMPT5)) JudgeSaveAndReturn((unsigned long int)workDiameter, 1);
|
||
}
|
||
|
||
//===========================================================================
|
||
// 保存设置参数
|
||
if(setKeyType != 1) return;
|
||
if(!ExitCurrentSetup()) return;
|
||
if(workDiameter == setKeyBuffer) return;
|
||
tempL.DWord = (unsigned int)setKeyBuffer;
|
||
workDiameter = WriteShortParameterToEEPROM(WORK_DIAMETER, WORK_DIAMETER_WIDTH);
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void ModifySamplingInterval(void)
|
||
{
|
||
if(setKeyType == 0)
|
||
{
|
||
if(keyFlag == DISPLAY_MENU) // 键功能提示符
|
||
{
|
||
//F16 响应时间 RESPS
|
||
SettingKeyPrompt(&RESPS_Prompt[0]);
|
||
return;
|
||
}
|
||
else if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
InitOfSettingArea((unsigned long int)factoryInterval, FUN_PROMPT5, 1); // 初始化参数设置区域
|
||
setMax[0] = SAMPLE_PERIOD_MAX;
|
||
setMin[0] = SAMPLE_PERIOD_MIN;
|
||
}
|
||
|
||
// 键值处理
|
||
if(KeyValueOperation(FUN_PROMPT5, FUN_PROMPT5)) JudgeSaveAndReturn((unsigned long int)factoryInterval, 1);
|
||
}
|
||
|
||
//===========================================================================
|
||
// 保存设置参数
|
||
if(setKeyType != 1) return;
|
||
if(!ExitCurrentSetup()) return;
|
||
if(factoryInterval == setKeyBuffer) return;
|
||
tempL.DWord = (unsigned int)setKeyBuffer;
|
||
factoryInterval = WriteShortParameterToEEPROM(SAMPLE_PERIOD, SAMPLE_PERIOD_WIDTH);
|
||
}
|
||
|
||
/*******************************************************************************
|
||
按键操作校准小传感器的燃气零点。
|
||
通过按键校准小传感器零点,操作者必须注意以下几个条件是否满足:
|
||
1、管道内气流静止;
|
||
2、在气流静止的情况下,流量计至少稳定工作1min
|
||
如以上条件任意一个不成立,有可能对校零的结果造成影响。
|
||
|
||
通过密码执行校零操作后,显示面板将显示校零操作前后的小传感器气体零点值,按下 SET按键后,退出校零状态。
|
||
如操作者认为校零结果不满意,可重复执行此操作。
|
||
在退出菜单操作之前,如用户选择不存储修改值,则“键盘校零”操作结果无效。
|
||
*******************************************************************************/
|
||
void CalibrateOffsetC(void)
|
||
{
|
||
if(setKeyType == 0)
|
||
{
|
||
if(keyFlag == DISPLAY_MENU)
|
||
{
|
||
//STD_KEY_OFFST 11 // F11 校准零点 OFFST
|
||
SettingKeyPrompt(&OFFST_Prompt[0]);
|
||
return;
|
||
}
|
||
else if(keyFlag == DIS_PARA_INT) setKeyType++;
|
||
}
|
||
|
||
if(setKeyType == 1) JudgePasswordInput(LEVEL_3_PASSWORD); // 0520
|
||
if(setKeyType == 2)
|
||
{
|
||
if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
modifyBit = FUN_PROMPT5;
|
||
keyValue = INC_KEY;
|
||
keyFlag = FLASH_BIT;
|
||
}
|
||
|
||
//键值处理
|
||
switch(keyValue)
|
||
{
|
||
case LONG_M_KEY:
|
||
if(offsetGas == setIndex)
|
||
{
|
||
keyValue = 0xff;
|
||
menuIndex = STD_RETURN;
|
||
return;
|
||
}
|
||
keyDealFlag = STD_RETURN;
|
||
|
||
case M_KEY:
|
||
keyValue = 0;
|
||
setKeyType++;
|
||
keyFlag = DIS_PARA_INT;
|
||
break;
|
||
|
||
case INC_KEY:
|
||
Dis1[FUN_CODE_1] = WORD_C;
|
||
Dis1[FUN_CODE_2] = WORD_U;
|
||
Dis1[FUN_CODE_3] = WORD_R;
|
||
Dis1[FUN_CODE_4] = WORD_NULL;
|
||
|
||
setKeyBuffer = voltageDetected[NIDX]; //ReadDataFromMovingAverage(NIDX);
|
||
ConvertHEXToBCDArray((unsigned long int)setKeyBuffer, &Dis1[FUN_PROMPT1], 5, HIGH_FIRST);
|
||
break;
|
||
|
||
case DEC_KEY:
|
||
Dis1[FUN_CODE_1] = WORD_O;
|
||
Dis1[FUN_CODE_2] = WORD_L;
|
||
Dis1[FUN_CODE_3] = WORD_D;
|
||
Dis1[FUN_CODE_4] = WORD_NULL;
|
||
|
||
ConvertHEXToBCDArray((unsigned long int)offsetGas, &Dis1[FUN_PROMPT1], 5, HIGH_FIRST);
|
||
break;
|
||
|
||
default: break;
|
||
}
|
||
keyValue = 0;
|
||
}
|
||
|
||
if(setKeyType != 3) return;
|
||
if(!ExitCurrentSetup()) return;
|
||
//if(offsetGas == (unsigned long int)setKeyBuffer)
|
||
|
||
tempL.DWord = (unsigned long int)setKeyBuffer;
|
||
offsetGas = WriteShortParameterToEEPROM(OFFSET_GAS, OFFSET_GAS_WIDTH);
|
||
|
||
#if(ENABLE_A_TYPE_FLOWRATE)
|
||
tempL.DWord = (unsigned long int)ReadDataFromMovingAverage(SDT);
|
||
offsetGasA = WriteShortParameterToEEPROM(OFFSET_A, OFFSET_A_WIDTH);
|
||
#endif
|
||
}
|
||
|
||
/*********************************************************************************/
|
||
//修改脉冲当量
|
||
void ModifyLPFactoryLiterPerPulse(void)
|
||
{
|
||
if(setKeyType == 0)
|
||
{
|
||
if(keyFlag == DISPLAY_MENU)
|
||
{
|
||
// STD_KEY_PULSE 41 // F41 脉冲当量 PULSE
|
||
SettingKeyPrompt(&PULSE_Prompt[0]);
|
||
return;
|
||
}
|
||
else if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
InitOfSettingArea((unsigned long int)factoryUnitPerPulse, FUN_PROMPT2, 5); // 初始化参数设置区域
|
||
ConvertHEXToBCDArray((unsigned long int)10000, &setMax[0], 5, HIGH_FIRST); // 参数最大值
|
||
ConvertHEXToBCDArray((unsigned long int)100, &setMin[0], 5, HIGH_FIRST); // 参数最小值
|
||
}
|
||
|
||
display_data[ACC_POINT] |= (unsigned char)ACC_POINT_BIT;
|
||
if(KeyValueOperation(FUN_PROMPT2, FUN_DECIMAL)) JudgeSaveAndReturn((unsigned long int)factoryUnitPerPulse, 1);
|
||
}
|
||
|
||
//===========================================================================
|
||
// 保存设置参数
|
||
if(setKeyType != 1) return;
|
||
if(!ExitCurrentSetup()) return;
|
||
if(factoryUnitPerPulse == (unsigned int)setKeyBuffer) return;
|
||
|
||
lastRemaining = 0;
|
||
tempL.DWord = (unsigned long int)setKeyBuffer;
|
||
factoryUnitPerPulse = WriteShortParameterToEEPROM(PULSE_UNIT, PULSE_UNIT_WIDTH);
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void ModifyModBusAdr(void)
|
||
{
|
||
if(setKeyType == 0)
|
||
{
|
||
if(keyFlag == DISPLAY_MENU) // 键功能提示符
|
||
{
|
||
// STD_KEY_ADDR 2 // F2 从机地址 ADDR
|
||
SettingKeyPrompt(&ADDR_Prompt[0]);
|
||
return;
|
||
}
|
||
else if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
InitOfSettingArea((unsigned long int)localAddress, FUN_PROMPT3, 3); // 初始化参数设置区域
|
||
ConvertHEXToBCDArray((unsigned long int)247, &setMax[0], 3, HIGH_FIRST); // 参数最大值
|
||
ConvertHEXToBCDArray((unsigned long int)1, &setMin[0], 3, HIGH_FIRST); // 参数最小值
|
||
}
|
||
|
||
// 键值处理
|
||
if(KeyValueOperation(FUN_PROMPT3, FUN_PROMPT5)) JudgeSaveAndReturn((unsigned long int)localAddress, 1);
|
||
}
|
||
|
||
//===========================================================================
|
||
// 保存设置参数
|
||
if(setKeyType != 1) return;
|
||
if(!ExitCurrentSetup()) return;
|
||
|
||
if(localAddress == (unsigned int)setKeyBuffer) return;
|
||
tempL.DWord = (unsigned long int)setKeyBuffer;
|
||
localAddress = WriteShortParameterToEEPROM(SLAVER_ADDR, SLAVER_ADDR_WIDTH);
|
||
}
|
||
|
||
/******************************************************************************/
|
||
//void ModifyDisplayMod(voiod)
|
||
//{
|
||
// if(setKeyType == 0)
|
||
// {
|
||
// if(keyFlag == DISPLAY_MENU) // 键功能提示符
|
||
// {
|
||
// // STD_KEY_ADDR 2 // F2 从机地址 ADDR
|
||
// SettingKeyPrompt(&DISMod_Prompt[0]);
|
||
// return;
|
||
// }
|
||
// else if(keyFlag == DIS_PARA_INT)
|
||
// {
|
||
// InitOfSettingArea((unsigned long int)SysLcd, FUN_PROMPT3, 3); // 初始化参数设置区域
|
||
// ConvertHEXToBCDArray((unsigned long int)247, &setMax[0], 3, HIGH_FIRST); // 参数最大值
|
||
// ConvertHEXToBCDArray((unsigned long int)1, &setMin[0], 3, HIGH_FIRST); // 参数最小值
|
||
// }
|
||
//
|
||
// // 键值处理
|
||
// if(KeyValueOperation(FUN_PROMPT3, FUN_PROMPT5)) JudgeSaveAndReturn((unsigned long int)localAddress, 1);
|
||
// }
|
||
//
|
||
// //===========================================================================
|
||
// // 保存设置参数
|
||
// if(setKeyType != 1) return;
|
||
// if(!ExitCurrentSetup()) return;
|
||
//
|
||
// if(localAddress == (unsigned int)setKeyBuffer) return;
|
||
// tempL.DWord = (unsigned long int)setKeyBuffer;
|
||
// localAddress = WriteShortParameterToEEPROM(SLAVER_ADDR, SLAVER_ADDR_WIDTH);
|
||
//}
|
||
|
||
/******************************************************************************/
|
||
void ModifyUartDecimalPoint(void)
|
||
{
|
||
// if(setKeyType == 0)
|
||
// {
|
||
// if(keyFlag == DISPLAY_MENU) // 键功能提示符
|
||
// {
|
||
// // STD_UART_Decimal 2 // F2 从机地址 ADDR
|
||
// SettingKeyPrompt(&DECI_Prompt[0]);
|
||
// return;
|
||
// }
|
||
// else if(keyFlag == DIS_PARA_INT)
|
||
// {
|
||
// modifyBit = FUN_PROMPT5;
|
||
// keyValue = 0;
|
||
// keyFlag = FLASH_BIT;
|
||
//
|
||
// setKeyBuffer = uartDecimalPoint;
|
||
// Dis1[FUN_PROMPT1] = WORD_NULL;
|
||
// Dis1[FUN_PROMPT2] = WORD_NULL;
|
||
// Dis1[FUN_PROMPT3] = WORD_NULL;
|
||
// Dis1[FUN_PROMPT4] = WORD_NULL;
|
||
// Dis1[FUN_PROMPT5] = (unsigned char)setKeyBuffer;
|
||
// Dis1[FUN_DECIMAL] = WORD_NULL;
|
||
// setMax[0] = 4;
|
||
// setMin[0] = 3;
|
||
// }
|
||
//
|
||
// if(KeyValueOperation(FUN_PROMPT5, FUN_PROMPT5)) JudgeSaveAndReturn((unsigned long int)uartDecimalPoint, 1);
|
||
// }
|
||
//
|
||
// //===========================================================================
|
||
// // 保存设置参数
|
||
// if(setKeyType != 1) return;
|
||
// if(!ExitCurrentSetup()) return;
|
||
//
|
||
// if(uartDecimalPoint == (unsigned int)setKeyBuffer) return;
|
||
// tempL.DWord = (unsigned long int)setKeyBuffer;
|
||
// uartDecimalPoint = WriteShortParameterToEEPROM(COM_DECIMAL_POINT, COM_DECIMAL_POINT_WIDTH);
|
||
}
|
||
|
||
/******************************************************************************/
|
||
void ResetDcoefNodeAndValue(void)
|
||
{
|
||
if(setKeyType == 0)
|
||
{
|
||
if(keyFlag == DISPLAY_MENU) // 键功能提示符
|
||
{
|
||
// F94 RS2ND
|
||
SettingKeyPrompt(&RS2ND_Prompt[0]);
|
||
return;
|
||
}
|
||
else if(keyFlag == DIS_PARA_INT) setKeyType = 1;
|
||
}
|
||
|
||
if(setKeyType == 1) JudgePasswordInput(LEVEL_2_PASSWORD); //2222
|
||
if(setKeyType == 2)
|
||
{
|
||
if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
InitOfSettingPrompt(&RS2ND_Prompt[0], &RS2ND_VALUE[0]);
|
||
setKeyBuffer = 0;
|
||
}
|
||
|
||
if(KeyValueOperateForPrompt(&RS2ND_VALUE[0])) setKeyType = 3;
|
||
}
|
||
|
||
//===========================================================================
|
||
// 保存设置参数
|
||
if(setKeyType != 3) return;
|
||
if(!ExitCurrentSetup()) return;
|
||
if(setKeyBuffer == 0) return;
|
||
DefaultDevCoef();
|
||
}
|
||
|
||
/******************************************************************************/
|
||
/******************************************************************************/
|
||
/******************************************************************************/
|
||
/******************************************************************************/
|
||
/******************************************************************************/
|
||
void KeyInputProcessing(void)
|
||
{
|
||
FlashBitForSetup();
|
||
ReadKeyValue();
|
||
while(keyValue != 0)
|
||
{
|
||
IDvalidTime = 0;
|
||
DisplaySetIndex();
|
||
switch(menuIndex)
|
||
{
|
||
case STD_INIT_PASSWORD: // input password
|
||
if(keyFlag == DIS_PARA_INT)
|
||
{
|
||
if(keyValue == SHIFT_KEY) { KeyReset(); return; }
|
||
if(keyValue == UPPER_KEY) { KeyReset(); return; }
|
||
}
|
||
|
||
if(!KeyPasswordInput()) break;
|
||
keyValue = 0xff;
|
||
keyFlag = DISPLAY_MENU;
|
||
if(PassWord != LEVEL_1_PASSWORD) menuIndex = STD_RETURN;
|
||
else menuIndex = STD_KEY_ADDR;
|
||
continue;
|
||
|
||
//=====================================================================
|
||
// 接口类(F1-F9)
|
||
//case STD_KEY_PRTCL // F1 通讯协议 PRTCL
|
||
case STD_KEY_ADDR: ModifyModBusAdr(); break; // F2 从机地址 ADDR
|
||
//case STD_KEY_BPS // F3 波特率 BPS
|
||
//=====================================================================
|
||
// 流量类(F11-F30)
|
||
case STD_KEY_OFFST: CalibrateOffsetC(); break; // F11 校准零点 OFFST (0520)
|
||
//-----------------------------------------------------------------------
|
||
// case STD_KEY_GCF: // F12 GCF GCF
|
||
case STD_KEY_FACTR: ModifyMeterFactor(); break; // F13 仪表系数 FACTR
|
||
case STD_KEY_CORR: ModifyDcoefNodeAndValue(); break; // F14 二次修正系数 CORR
|
||
//-----------------------------------------------------------------------
|
||
case STD_KEY_FS: ModifyMaxFlowRate(); break; // F15 量程设置 FS
|
||
case STD_KEY_RESPS: ModifySamplingInterval(); break; // F16 响应时间 RESPS
|
||
//case STD_KEY_CUT_F // F28 小流量切除 CUT-F
|
||
|
||
//=====================================================================
|
||
#if(ENABLE_PLUG_IN_FLOWRATE)
|
||
case STD_KEY_DIAM: ModifyWorkDiameter(); break; // F29 管径设置 DIAM
|
||
#endif
|
||
//=======================================================================
|
||
// 显示类(F31-F40)
|
||
//case STD_KEY_UNT_A // F31 累积流量单位 UNT-A
|
||
//case STD_KEY_UNT_F // F32 实时流量单位 UNT-F
|
||
//case STD_KEY_UNT_P // F33 压力单位 UNT-P
|
||
//case STD_KEY_DISP: ModifyDisplayMod(); break; // F39 显示模式 DISP
|
||
|
||
//=======================================================================
|
||
// 模拟接口类(F31-F40)
|
||
case STD_KEY_PULSE: ModifyLPFactoryLiterPerPulse(); break; // F41 脉冲当量 PULSE
|
||
//=======================================================================
|
||
// 报警类(F41-F50)
|
||
//case STD_KEY_ALM_H // F51 高流量报警 ALM-H
|
||
//case STD_KEY_ALM_L // F52 低流量报警 ALM-L
|
||
//case STD_KEY_ALM_A // F53 总量报警上限 ALM-A
|
||
//case STD_KEY_ALM_T // F54 时间报警 ALM-T
|
||
//=======================================================================
|
||
//case STD_KEY_LORA_ADDR: // F71 LORA本机地址 LR-ID
|
||
//case STD_KEY_LORA_ID: // F72 LORA上级地址 NETID
|
||
//case STD_KEY_LORA_CHAN: // F73 LORA信道 LR_CH
|
||
//=======================================================================
|
||
// 操作类(F91-F98)
|
||
//case STD_KEY_PASS // F91 设置密码 PASS
|
||
//case STD_KEY_CLR_A // F92 清除总流量 CLR-A
|
||
//case STD_KEY_CLR_T // F93 清除时间 CLR-T
|
||
case STD_KEY_RESET_DCOEF: ResetDcoefNodeAndValue(); break; // F94 恢复二次修正 RS2ND
|
||
//=======================================================================
|
||
|
||
// 退出
|
||
case STD_KEY_QUIT: ExitKeyOperation(); break; // F99 退出设置 QUIT
|
||
case STD_RETURN:
|
||
KeyReset();
|
||
DisableKeyInterrupt();
|
||
NumericPrepForOutputAndDisplay();
|
||
return;
|
||
|
||
default: continue;
|
||
}
|
||
|
||
DisplayForKeyOperation();
|
||
}
|
||
}
|
||
|
||
//##############################################################################
|
||
#endif
|
||
//##############################################################################
|