Files
CHJ/user/Interface/KeyEdit.c
2026-03-20 21:16:58 +08:00

1102 lines
35 KiB
C
Executable File
Raw 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 "../main/SystemInclude.h"
//==============================================================================
unsigned int setKeyType, setIndex;
unsigned int keyDealFlag;
extern unsigned char display0_data[];
extern unsigned char display1_data[];
extern unsigned char Code_AFED_BGC[];
extern unsigned char Code_BGC_AFED[];
extern unsigned char Code_EGFA_DCB[];
bool isKeyPressed;
unsigned int keyFlag, PassWord, keyTime, keyValue, keyBuff, menuIndex, modifyBit, keyFlashTime;
unsigned int setKeyBuffer;
unsigned long int temp_dcoefNode[DCOEF_MAX];
unsigned int temp_dcoefNum, temp_dcoefVal[DCOEF_MAX];
#define DIS_PARA_INT 0
#define DISPLAY_MENU 1
#define FLASH_BIT 2
#define NEXT 0
#define SAVE 1
#define NO 2
/******************************************************************************/
void KeyReset(void)
{
KEY_INPUT();
keyFlag = DIS_PARA_INT;
isKeyPressed = 0;
keyValue = 0;
menuIndex = 0;
setKeyType = 0;
setIndex = 0;
PassWord = 0;
}
/******************************************************************************/
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;
if(keyFlag != FLASH_BIT) return;
if(keyFlashTime == RTCSEC) return;
keyFlashTime = RTCSEC;
tempT = display1_data[ACC_1 + modifyBit -1];
tempT &= ~BIT0;
if(tempT == 0) display1_data[ACC_1 + modifyBit -1] |= Code_EGFA_DCB[Dis1[modifyBit]];
else display1_data[ACC_1 + modifyBit -1] &= (unsigned char)BIT0;
LcdWriteDisplayFirst();
}
/*********************************************************************************/
void ReadKeyValue(void)
{
unsigned int temp;
KeyEditInit();
temp = READ_KEY_VALUE();
if(temp == KEY_PIN)
{
keyValue = 0;
EnableKeyInterrupt();
if((keyBuff == 0) || (keyBuff == KEY_PIN))
{
keyBuff = KEY_PIN;
if(IDvalidTime >= 30) KeyReset();
//{
// keyFlag = DIS_PARA_INT;
// menuIndex = 0;
// isKeyPressed = 0;
//}
return;
}
timerTar = MAINTAR;
if(timerTar < keyTime) timerTar = 1600;
else timerTar -= keyTime;
if(timerTar < 1600) { keyValue = 0; return; }
keyBuff = ~keyBuff;
keyBuff &= KEY_PIN;
if(keyBuff == FUN_KEY) keyValue = FUN_KEY;
else if(keyBuff == UPPER_KEY) keyValue = UPPER_KEY;
else if(keyBuff == SHIFT_KEY) keyValue = SHIFT_KEY;
else keyValue = 0;
keyBuff = KEY_PIN;
}
else
{
if(keyBuff == temp) return;
keyBuff = temp;
keyTime = MAINTAR;
}
}
/********************************************************************************************* */
unsigned int SaveModifyValue(void)
{
if(keyFlag == DIS_PARA_INT)
{
modifyBit = 5;
keyValue = 0;
keyFlag = FLASH_BIT;
ClearDisplay();
Dis1[1] = WORD_S;
Dis1[2] = WORD_A;
Dis1[3] = WORD_V;
Dis1[4] = WORD_E;
Dis1[5] = WORD_LINE;
Dis1[6] = WORD_N;
Dis1[7] = WORD_NULL;
Dis1[8] = WORD_NULL;
Dis1[9] = WORD_NULL;
Dis1[10] = WORD_NULL;
Dis1[11] = WORD_NULL;
Dis1[12] = WORD_NULL;
Dis1[13] = WORD_NULL;
}
switch(keyValue)
{
case FUN_KEY:
keyValue = 0;
if( Dis1[6] == WORD_Y ) return SAVE;
return NO;
case UPPER_KEY:
case SHIFT_KEY:
if(Dis1[6] == WORD_N) Dis1[6] = WORD_Y;
else Dis1[6] = WORD_N;
break;
default:
break;
}
keyValue = 0;
return NEXT;
}
bool ReturnKeySetSub(void)
{
if(keyFlag == DIS_PARA_INT)
{
modifyBit = 5;
keyValue = 0;
keyFlag = FLASH_BIT;
ClearDisplay();
Dis1[1] = WORD_O;
Dis1[2] = WORD_F;
Dis1[3] = WORD_F;
Dis1[4] = WORD_NULL;
Dis1[5] = WORD_LINE;
Dis1[6] = WORD_Y;
Dis1[7] = WORD_NULL;
Dis1[8] = WORD_NULL;
Dis1[10] = WORD_NULL;
Dis1[11] = WORD_NULL;
Dis1[12] = WORD_NULL;
Dis1[13] = WORD_NULL;
}
switch(keyValue)
{
case FUN_KEY:
if( Dis1[6] == WORD_Y ) return 1;
return 0;
case UPPER_KEY:
case SHIFT_KEY:
if(Dis1[6] == WORD_N) Dis1[6] = WORD_Y;
else Dis1[6] = WORD_N;
break;
default:
break;
}
return 0;
}
unsigned int DisplaySetIndex(void)
{
switch(keyValue)
{
case FUN_KEY:
keyFlag = DIS_PARA_INT;
keyValue = 0;
return 1;
case UPPER_KEY:
return 2;
case SHIFT_KEY:
menuIndex++;
if(menuIndex >= KEY_SET_RETURN) menuIndex = KEY_SET_METERFACTOR;
break;
}
Dis1[1] = WORD_S;
Dis1[2] = WORD_E;
Dis1[3] = WORD_T;
Dis1[4] = WORD_LINE;
Dis1[9] = WORD_NULL;
Dis1[10] = WORD_NULL;
Dis1[11] = WORD_NULL;
Dis1[12] = WORD_NULL;
Dis1[13] = WORD_NULL;
Dis1[5] = WORD_F;
Dis1[6] = menuIndex;
Dis1[7] = WORD_NULL;
Dis1[8] = WORD_NULL;
if(menuIndex == KEY_SET_METERFACTOR)
{
display0_data[FLOW_1] = Code_AFED_BGC[WORD_F];
display0_data[FLOW_2] = Code_AFED_BGC[WORD_a];
display0_data[FLOW_3] = Code_AFED_BGC[WORD_c];
display0_data[FLOW_4] = Code_AFED_BGC[WORD_t];
display0_data[FLOW_5] = Code_AFED_BGC[WORD_o];
display0_data[FLOW_6] = Code_AFED_BGC[WORD_r];
display0_data[FLOW_7] = Code_AFED_BGC[WORD_NULL];
}
else if(menuIndex == KEY_SET_COEFFIC)
{
display0_data[FLOW_1] = Code_AFED_BGC[WORD_C];
display0_data[FLOW_2] = Code_AFED_BGC[WORD_O];
display0_data[FLOW_3] = Code_AFED_BGC[WORD_E];
display0_data[FLOW_4] = Code_AFED_BGC[WORD_F];
display0_data[FLOW_5] = Code_AFED_BGC[WORD_F];
display0_data[FLOW_6] = Code_AFED_BGC[WORD_I];
display0_data[FLOW_7] = Code_AFED_BGC[WORD_C];
}
else if(menuIndex == KEY_CALIB_OFFSETC)
{
display0_data[FLOW_1] = Code_AFED_BGC[WORD_O];
display0_data[FLOW_2] = Code_AFED_BGC[WORD_F];
display0_data[FLOW_3] = Code_AFED_BGC[WORD_F];
display0_data[FLOW_4] = Code_AFED_BGC[WORD_S];
display0_data[FLOW_5] = Code_AFED_BGC[WORD_E];
display0_data[FLOW_6] = Code_AFED_BGC[WORD_T];
display0_data[FLOW_7] = Code_AFED_BGC[WORD_NULL];
}
else if(menuIndex == KEY_SET_PULSE)
{
display0_data[FLOW_1] = Code_AFED_BGC[WORD_P];
display0_data[FLOW_2] = Code_AFED_BGC[WORD_U];
display0_data[FLOW_3] = Code_AFED_BGC[WORD_L];
display0_data[FLOW_4] = Code_AFED_BGC[WORD_S];
display0_data[FLOW_5] = Code_AFED_BGC[WORD_E];
display0_data[FLOW_6] = Code_AFED_BGC[WORD_NULL];
display0_data[FLOW_7] = Code_AFED_BGC[WORD_NULL];
}
else if(menuIndex == KEY_SET_ADDR)
{
display0_data[FLOW_1] = Code_AFED_BGC[WORD_A];
display0_data[FLOW_2] = Code_AFED_BGC[WORD_d];
display0_data[FLOW_3] = Code_AFED_BGC[WORD_d];
display0_data[FLOW_4] = Code_AFED_BGC[WORD_r];
display0_data[FLOW_5] = Code_AFED_BGC[WORD_NULL];
display0_data[FLOW_6] = Code_AFED_BGC[WORD_NULL];
display0_data[FLOW_7] = Code_AFED_BGC[WORD_NULL];
}
else if(menuIndex == KEY_SET_DECIMAL_POINT)
{
display0_data[FLOW_1] = Code_AFED_BGC[WORD_D];
display0_data[FLOW_2] = Code_AFED_BGC[WORD_E];
display0_data[FLOW_3] = Code_AFED_BGC[WORD_C];
display0_data[FLOW_4] = Code_AFED_BGC[WORD_I];
display0_data[FLOW_5] = Code_AFED_BGC[WORD_NULL];
display0_data[FLOW_6] = Code_AFED_BGC[WORD_NULL];
display0_data[FLOW_7] = Code_AFED_BGC[WORD_NULL];
}
LcdWriteDisplaySecond();
keyValue = 0;
return 0;
}
/******************************************************************************/
bool KeyPasswordInput(void)
{
if(keyFlag == DIS_PARA_INT)
{
modifyBit = 5;
keyValue = 0;
keyFlag = FLASH_BIT;
ClearDisplay();
Dis1[1] = WORD_P;
Dis1[2] = WORD_A;
Dis1[3] = WORD_S;
Dis1[4] = WORD_LINE;
Dis1[5] = 0;
Dis1[6] = 0;
Dis1[7] = 0;
Dis1[8] = 0;
Dis1[9] = WORD_NULL;
Dis1[10] = WORD_NULL;
Dis1[11] = WORD_NULL;
Dis1[12] = WORD_NULL;
Dis1[13] = WORD_NULL;
}
keyFlag = FLASH_BIT;
switch(keyValue)
{
case FUN_KEY:
keyValue = 0;
return 1;
case UPPER_KEY:
if(Dis1[modifyBit] >= 9) Dis1[modifyBit] = 0;
else Dis1[modifyBit]++;
break;
case SHIFT_KEY:
if(modifyBit >= 8) modifyBit = 5;
else modifyBit++;
break;
}
keyValue = 0;
return 0;
}
void ComputPassWordToArray(void)
{
PassWord = (unsigned int)Dis1[5]*1000;
PassWord += (unsigned int)Dis1[6]*100;
PassWord += (unsigned int)Dis1[7]*10;
PassWord += (unsigned int)Dis1[8];
}
/******************************************************************************/
// 设置仪表系数
void ModifyMeterFactor(void)
{
if(keyFlag == DIS_PARA_INT)
{
modifyBit = 5;
keyValue = 0;
keyFlag = FLASH_BIT;
ClearDisplay();
Dis1[1] = WORD_F;
Dis1[2] = 1;
Dis1[3] = WORD_LINE;
Dis1[4] = WORD_LINE;
Dis1[9] = WORD_NULL;
Dis1[10] = WORD_NULL;
Dis1[11] = WORD_NULL;
Dis1[12] = WORD_NULL;
Dis1[13] = WORD_NULL;
//display meter factor----TotalFlowRateDisplay
setKeyBuffer = MeterFactor;
Dis1[5] = (unsigned char)(setKeyBuffer / (unsigned int)1000);
setKeyBuffer = setKeyBuffer - (unsigned int)Dis1[5] * 1000;
Dis1[6] = (unsigned char)(setKeyBuffer / 100);
setKeyBuffer = setKeyBuffer - (unsigned int)Dis1[6] * 100;
Dis1[7] = (unsigned char)(setKeyBuffer / 10);
setKeyBuffer = setKeyBuffer - (unsigned int)Dis1[7] * 10;
Dis1[8] = (unsigned char)setKeyBuffer;
}
switch(keyValue)
{
case FUN_KEY:
setKeyBuffer = (unsigned int)Dis1[5]*1000;
setKeyBuffer += (unsigned int)Dis1[6]*100;
setKeyBuffer += (unsigned int)Dis1[7]*10;
setKeyBuffer += (unsigned int)Dis1[8];
keyFlag = DIS_PARA_INT;
setKeyType = 1;
keyValue =0;
return;
case UPPER_KEY:
if(Dis1[modifyBit] >= 9) Dis1[modifyBit] = 0;
else Dis1[modifyBit]++;
break;
case SHIFT_KEY:
if(modifyBit >= 8) modifyBit = 5;
else modifyBit++;
break;
}
keyValue = 0;
}
/******************************************************************************/
//修改二次修正点数
void ModifyDcoefNum(void)
{
if(keyFlag == DIS_PARA_INT)
{
modifyBit = 5;
keyValue = 0;
keyFlag = FLASH_BIT;
ClearDisplay();
Dis1[1] = WORD_P;
Dis1[2] = WORD_N;
Dis1[3] = WORD_LINE;
Dis1[4] = WORD_LINE;
Dis1[6] = WORD_NULL; Dis1[7] = WORD_NULL; Dis1[8] = WORD_NULL;
Dis1[9] = WORD_NULL; Dis1[10] = WORD_NULL; Dis1[11] = WORD_NULL;
Dis1[12] = WORD_NULL; Dis1[13] = WORD_NULL;
Dis1[5] = dcoefNum;
}
switch(keyValue)
{
case FUN_KEY:
temp_dcoefNum = Dis1[5];
keyFlag = DIS_PARA_INT;
keyValue = 0;
setKeyType = 1;
setIndex = 0;
return;
case UPPER_KEY:
if(Dis1[modifyBit] >= 7) Dis1[modifyBit] = 0;
else Dis1[modifyBit]++;
break;
default:
break;
}
keyValue = 0;
}
/**************************************************************************************/
void ModifyDcoefNode(void)
{
unsigned long int temp;
if(keyFlag == DIS_PARA_INT)
{
modifyBit = 5;
keyValue = 0;
keyFlag = FLASH_BIT;
ClearDisplay();
Dis1[1] = WORD_P;
Dis1[2] = setIndex+1;
Dis1[3] = WORD_LINE;
Dis1[4] = WORD_LINE;
temp = dcoefNode[setIndex];
temp /= 100;
Dis1[5] = (unsigned char)(temp / (unsigned long int)10000);
temp = temp - (unsigned long int)Dis1[5] * 10000;
Dis1[6] = (unsigned char)(temp / (unsigned long int)1000);
temp = temp - (unsigned long int)Dis1[6] * 1000;
Dis1[7] = (unsigned char)(temp / 100);
temp = temp - (unsigned long int)Dis1[7] * 100;
Dis1[8] = (unsigned char)(temp / 10);
temp = temp - (unsigned long int)Dis1[8] * 10;
Dis1[9] = (unsigned char)temp;
display1_data[ACC_POINT] |= (unsigned char)ACC_POINT_BIT;
display1_data[ACC_NM3] |= (unsigned char)ACC_NM3_BIT;
}
//键值处理
switch(keyValue)
{
case FUN_KEY:
temp_dcoefNode[setIndex] = (unsigned long int)Dis1[5] * 1000000;
temp_dcoefNode[setIndex] += (unsigned long int)Dis1[6] * 100000;
temp_dcoefNode[setIndex] += (unsigned long int)Dis1[7] * 10000;
temp_dcoefNode[setIndex] += (unsigned long int)Dis1[8] * 1000;
temp_dcoefNode[setIndex] += (unsigned long int)Dis1[9] * 100;
setKeyType = 2;
keyFlag = DIS_PARA_INT;
keyValue = 0;
return;
case UPPER_KEY:
Dis1[modifyBit]++;
if(Dis1[modifyBit] > 9) Dis1[modifyBit] = 0;
break;
case SHIFT_KEY:
modifyBit++;
if(modifyBit > 9) modifyBit = 5;
break;
default:
break;
}
display1_data[ACC_POINT] |= (unsigned char)ACC_POINT_BIT;
display1_data[ACC_NM3] |= (unsigned char)ACC_NM3_BIT;
keyValue = 0;
}
bool ModifyDcoefVal(void)
{
unsigned int temp;
if(keyFlag == DIS_PARA_INT)
{
modifyBit = 5;
keyValue = 0;
keyFlag = FLASH_BIT;
ClearDisplay();
Dis1[4] = WORD_LINE;
Dis1[9] = WORD_NULL;
Dis1[10] = WORD_NULL;
Dis1[11] = WORD_NULL;
Dis1[12] = WORD_NULL;
temp = dcoefVal[setIndex];
Dis1[5] = (unsigned char)(temp / (unsigned int)1000);
temp = temp - (unsigned int)Dis1[5] * 1000;
Dis1[6] = (unsigned char)(temp / 100);
temp = temp - (unsigned int)Dis1[6] * 100;
Dis1[7] = (unsigned char)(temp / 10);
temp = temp - (unsigned int)Dis1[7] * 10;
Dis1[8] = (unsigned char)temp;
}
switch(keyValue)
{
case FUN_KEY:
temp_dcoefVal[setIndex] = (unsigned long int)Dis1[5] * 1000;
temp_dcoefVal[setIndex] += (unsigned long int)Dis1[6] * 100;
temp_dcoefVal[setIndex] += (unsigned long int)Dis1[7] * 10;
temp_dcoefVal[setIndex] += (unsigned long int)Dis1[8];
keyValue = 0;
return 1;
case UPPER_KEY:
if(Dis1[modifyBit] >= 9) Dis1[modifyBit] = 0;
else Dis1[modifyBit]++;
break;
case SHIFT_KEY:
if(modifyBit >= 8) modifyBit = 5;
else modifyBit++;
break;
default:
break;
}
keyValue = 0;
return 0;
}
/* *******************************************************************************
按键操作校准小传感器的燃气零点。
通过按键校准小传感器零点,操作者必须注意以下几个条件是否满足:
1、管道内气流静止
2、在气流静止的情况下流量计至少稳定工作1min
如以上条件任意一个不成立,有可能对校零的结果造成影响。
通过密码执行校零操作后,显示面板将显示校零操作前后的小传感器气体零点值,按下 SET按键后退出校零状态。
如操作者认为校零结果不满意,可重复执行此操作。
在退出菜单操作之前,如用户选择不存储修改值,则“键盘校零”操作结果无效。
******************************************************************************* */
void CalibrateOffsetC(void)
{
if(keyFlag == DIS_PARA_INT)
{
modifyBit = 4;
keyValue = 0;
keyFlag = FLASH_BIT;
ClearDisplay();
//在瞬时流量显示区显示当前使用的小传感器气体零点
Dis1[1] = WORD_O;
Dis1[2] = WORD_L;
Dis1[3] = WORD_D;
Dis1[4] = WORD_NULL;
Dis1[5] = WORD_NULL;
Dis1[6] = WORD_NULL;
setKeyBuffer = offsetGas;
Dis1[7] = (unsigned char)(setKeyBuffer / (unsigned int)10000);
setKeyBuffer = setKeyBuffer - (unsigned int)Dis1[7] * 10000;
Dis1[8] = (unsigned char)(setKeyBuffer / (unsigned int)1000);
setKeyBuffer = setKeyBuffer - (unsigned int)Dis1[8] * 1000;
Dis1[9] = (unsigned char)(setKeyBuffer / 100);
setKeyBuffer = setKeyBuffer - (unsigned int)Dis1[9] * 100;
Dis1[10] = setKeyBuffer / 10;
setKeyBuffer = (unsigned char)(setKeyBuffer - (unsigned int)Dis1[10] * 10);
Dis1[11] = (unsigned char)setKeyBuffer;
display0_data[FLOW_1] = Code_AFED_BGC[Dis1[1]];
display0_data[FLOW_2] = Code_AFED_BGC[Dis1[2]];
display0_data[FLOW_3] = Code_AFED_BGC[Dis1[3]];
display0_data[FLOW_4] = Code_AFED_BGC[Dis1[4]];
display0_data[FLOW_5] = Code_AFED_BGC[Dis1[5]];
display0_data[FLOW_6] = Code_AFED_BGC[Dis1[6]];
display0_data[FLOW_7] = Code_AFED_BGC[Dis1[7]];
display0_data[FLOW_8] = Code_AFED_BGC[Dis1[8]];
display0_data[FLOW_9] = Code_AFED_BGC[Dis1[9]];
display0_data[FLOW_10] = Code_AFED_BGC[Dis1[10]];
display0_data[FLOW_11] = Code_AFED_BGC[Dis1[11]];
LcdWriteDisplaySecond();
// 从滑动滤波暂存器中读取当前新的零点值,并显示与总流量显示区
Dis1[1] = WORD_NULL;
Dis1[2] = WORD_NULL;
Dis1[3] = WORD_NULL;
Dis1[8] = WORD_NULL;
Dis1[9] = WORD_NULL;
Dis1[10] = WORD_NULL;
Dis1[11] = WORD_NULL;
setKeyBuffer = ReadDataFromMovingAverage(NIDX);
Dis1[4] = (unsigned char)(setKeyBuffer / (unsigned int)10000);
setKeyBuffer = setKeyBuffer - (unsigned int)Dis1[4] * 10000;
Dis1[5] = (unsigned char)(setKeyBuffer / (unsigned int)1000);
setKeyBuffer = setKeyBuffer - (unsigned int)Dis1[5] * 1000;
Dis1[6] = (unsigned char)(setKeyBuffer / 100);
setKeyBuffer = setKeyBuffer - (unsigned int)Dis1[6] * 100;
Dis1[7] = setKeyBuffer / 10;
setKeyBuffer = (unsigned char)(setKeyBuffer - (unsigned int)Dis1[7] * 10);
Dis1[8] = (unsigned char)setKeyBuffer;
}
//键值处理
switch(keyValue)
{
case FUN_KEY:
ClearDisplay();
setKeyBuffer = ReadDataFromMovingAverage(NIDX);
keyValue = 0;
setKeyType = 1;
keyFlag = DIS_PARA_INT;
break;
//case UPPER_KEY:
// ClearDisplay();
// setKeyType = 0;
// keyFlag = DISPLAY_MENU;
// break;
default:
break;
}
keyValue = 0;
}
/*********************************************************************************/
//修改脉冲当量
void ModifyLPFactoryLiterPerPulse(void)
{
unsigned int I;
if(keyFlag == DIS_PARA_INT)
{
modifyBit = 5;
keyValue = 0;
keyFlag = FLASH_BIT;
ClearDisplay();
Dis1[1] = WORD_NULL;
Dis1[2] = WORD_NULL;
Dis1[3] = WORD_NULL;
Dis1[4] = WORD_NULL;
Dis1[5] = 0; Dis1[6] = 0; Dis1[7] = 0; Dis1[8] = 0; Dis1[9] = 0;
Dis1[10] = WORD_NULL;
Dis1[11] = WORD_L;
Dis1[12] = WORD_NULL;
Dis1[13] = WORD_NULL;
setKeyBuffer = factoryUnitPerPulse;
if(setKeyBuffer == 10000) modifyBit = 5; //1000 L
else if(setKeyBuffer == 1000) modifyBit = 6; //100 L
else if(setKeyBuffer == 100) modifyBit = 7; //10 L
else if(setKeyBuffer == 10) modifyBit = 8; //1 L
else if(setKeyBuffer == 1) modifyBit = 9; //0.1 L
}
switch(keyValue)
{
case FUN_KEY:
if(modifyBit == 5) setKeyBuffer = 10000;
else if(modifyBit == 6) setKeyBuffer = 1000;
else if(modifyBit == 7) setKeyBuffer = 100;
else if(modifyBit == 8) setKeyBuffer = 10;
else if(modifyBit == 9) setKeyBuffer = 1;
keyFlag = DIS_PARA_INT;
setKeyType = 1;
break;
case UPPER_KEY:
if(modifyBit >= 9) modifyBit = 5;
else modifyBit++;
break;
default:
break;
}
Dis1[5] = Dis1[6] = Dis1[7] = Dis1[8] = Dis1[9] = 0;
Dis1[modifyBit] = 1;
for(I = 5; I < 9; I++)
{
if(Dis1[I] != 0) break;
display1_data[ACC_1 + I - 1] &= (unsigned char)BIT0;
}
display1_data[ACC_POINT] |= (unsigned char)ACC_POINT_BIT;
keyValue =0;
}
/******************************************************************************/
void ModifyModBusAdr(void)
{
if(keyFlag == DIS_PARA_INT)
{
modifyBit = 6;
keyValue = 0;
keyFlag = FLASH_BIT;
ClearDisplay();
Dis1[1] = WORD_F;
Dis1[2] = 5;
Dis1[3] = WORD_LINE;
Dis1[4] = WORD_LINE;
Dis1[5] = WORD_NULL;
Dis1[9] = WORD_NULL;
Dis1[10] = WORD_NULL;
Dis1[11] = WORD_NULL;
Dis1[12] = WORD_NULL;
Dis1[13] = WORD_NULL;
setKeyBuffer = localAddress;
Dis1[6] = (unsigned char)(setKeyBuffer / (unsigned int)100);
setKeyBuffer = setKeyBuffer - (unsigned int)Dis1[6] * 100;
Dis1[7] = (unsigned char)(setKeyBuffer / 10);
setKeyBuffer = setKeyBuffer - (unsigned int)Dis1[7] * 10;
Dis1[8] = (unsigned char)setKeyBuffer;
}
switch(keyValue)
{
case FUN_KEY:
setKeyBuffer = (unsigned int)Dis1[6]*100;
setKeyBuffer += (unsigned int)Dis1[7]*10;
setKeyBuffer += (unsigned int)Dis1[8];
keyFlag = DIS_PARA_INT;
setKeyType = 1;
break;
case UPPER_KEY:
if(modifyBit == 6)
{
if(Dis1[modifyBit] >= 2) Dis1[modifyBit] = 0;
else Dis1[modifyBit]++;
}
else if(modifyBit == 7)
{
if(Dis1[modifyBit] >= 9) Dis1[modifyBit] = 0;
else Dis1[modifyBit]++;
if( (Dis1[6] == 2) && (Dis1[7] > 3) && (Dis1[8] > 7) ) Dis1[8] = 7;
if( (Dis1[6] == 2) && (Dis1[7] > 4) ) Dis1[modifyBit] = 0;
}
else
{
if((Dis1[6] == 2) && (Dis1[7] == 4) && (Dis1[modifyBit] >= 7)) Dis1[modifyBit] = 0;
else if((Dis1[6] == 0) && (Dis1[7] == 0) && (Dis1[modifyBit] >= 9)) Dis1[modifyBit] = 1;
else if(Dis1[modifyBit] >= 9) Dis1[modifyBit] = 0;
else Dis1[modifyBit]++;
}
break;
case SHIFT_KEY:
if(modifyBit >= 8) modifyBit = 6;
else modifyBit++;
break;
}
keyValue = 0;
}
void ModifyUartDecimalPoint(void)
{
if(keyFlag == DIS_PARA_INT)
{
modifyBit = 6;
keyValue = 0;
keyFlag = FLASH_BIT;
ClearDisplay();
Dis1[1] = WORD_F;
Dis1[2] = 6;
Dis1[3] = WORD_LINE;
Dis1[4] = WORD_LINE;
Dis1[5] = WORD_NULL;
Dis1[6] = WORD_NULL;
Dis1[7] = WORD_NULL;
Dis1[9] = WORD_NULL;
Dis1[10] = WORD_NULL;
Dis1[11] = WORD_NULL;
Dis1[12] = WORD_NULL;
Dis1[13] = WORD_NULL;
setKeyBuffer = uartDecimalPoint;
Dis1[8] = (unsigned char)setKeyBuffer;
}
switch(keyValue)
{
case FUN_KEY:
setKeyBuffer = (unsigned int)Dis1[8];
keyFlag = DIS_PARA_INT;
setKeyType = 1;
break;
case UPPER_KEY:
if(Dis1[8] == 3) Dis1[8] = 4;
else Dis1[8] = 3;
break;
case SHIFT_KEY:
if(Dis1[8] == 3) Dis1[8] = 4;
else Dis1[8] = 3;
break;
}
keyValue = 0;
}
/******************************************************************************/
//低功耗表按键处理程序
/******************************************************************************
低功耗表按键功能:
1、设置仪表系数
2、设置二次修正系数
进入按键处理程序前需输入用户参数密码11111
用户参数密码1输入正确后
1、选择SET-FCOE菜单即可设置仪表系数MeterFactor
2、选择SET_DCOE菜单后需要输入用户设置密码22222正确后即可设置二次修正系数device coefficients
用户选择return菜单项确定后选择SET-Y则存储设置参数否则不存储设置参数
*******************************************************************************/
void KeyInputProcessing(void)
{
isEnableLowPowerMode = 0;
FlashBitForSetup();
ReadKeyValue();
if(keyValue == 0) return;
IDvalidTime = 0;
KeyInputNext:
if(keyFlag == DISPLAY_MENU)
{
keyDealFlag = DisplaySetIndex();
if(keyDealFlag == 1) goto KeyInputNext;
else if(keyDealFlag == 2) goto KeyInputReturn;
}
else
{
// input password
switch(menuIndex)
{
case KEY_INIT_PASSWORD:
if(keyFlag == DIS_PARA_INT)
{
if(keyValue == SHIFT_KEY) goto KeyInputReturn;
if(keyValue == UPPER_KEY) goto KeyInputReturn;
}
if(!KeyPasswordInput()) break;
ComputPassWordToArray();
keyFlag = DIS_PARA_INT;
if(PassWord != LEVEL_1_PASSWORD) goto KeyInputReturn;
menuIndex = 1;
keyFlag = DISPLAY_MENU;
goto KeyInputNext;
break;
case KEY_SET_METERFACTOR: //F1 设置仪表系数
if(setKeyType == 0) ModifyMeterFactor();
if(setKeyType == 1)
{
keyDealFlag = SaveModifyValue();
keyValue = 0;
if(keyDealFlag == NEXT) break;
setKeyType = 0;
keyFlag = DISPLAY_MENU;
if(keyDealFlag != SAVE) goto KeyInputNext;
MeterFactor = setKeyBuffer;
tempL.DWord = (unsigned long int)MeterFactor;
tempL.Byte[METER_FACTOR_CRC] = CRC8(tempL.Byte, METER_FACTOR_CRC);
WriteMultiByteToEEPROM(METER_FACTOR, tempL.Byte, METER_FACTOR_WIDTH, PARA_EEPROM);
goto KeyInputNext;
}
break;
case KEY_SET_COEFFIC: //F2 设置二次修正系数
if(PassWord != LEVEL_2_PASSWORD) //2222
{
if(!KeyPasswordInput()) break;
ComputPassWordToArray();
keyFlag = DISPLAY_MENU;
if(PassWord != LEVEL_2_PASSWORD) goto KeyInputNext;
setKeyType = 0;
keyFlag = DIS_PARA_INT;
}
KeyInputLoop:
if(setKeyType == 0) ModifyDcoefNum();
if(setKeyType == 1) ModifyDcoefNode();
if(setKeyType == 2)
{
if(ModifyDcoefVal())
{
setIndex++;
setKeyType = 1;
keyFlag = DIS_PARA_INT;
if(setIndex < temp_dcoefNum) goto KeyInputLoop;
keyValue = 0;
setKeyType = 3;
}
}
if(setKeyType == 3)
{
keyDealFlag = SaveModifyValue();
keyValue = 0;
if(keyDealFlag == NEXT) break;
PassWord = 0;
setKeyType = 0;
keyFlag = DISPLAY_MENU;
if(keyDealFlag != SAVE) goto KeyInputNext;
// 存储二次修正系数
dcoefNum = temp_dcoefNum;
tempL.Byte[0] = dcoefNum;
tempL.Byte[1] = CRC8(tempL.Byte, 1);
WriteMultiByteToEEPROM(DCOEF_NUM, &tempL.Byte[0], DCOEF_NUM_WIDTH, PARA_EEPROM);
for(setIndex = 0; setIndex < dcoefNum; setIndex++)
{
dcoefNode[setIndex] = temp_dcoefNode[setIndex];
dcoefVal[setIndex] = temp_dcoefVal[setIndex];
StoreDevCoefNodeAndValue(setIndex);
}
RetriveDevCoef();
goto KeyInputNext;
}
break;
case KEY_CALIB_OFFSETC: //F3 按键校准offset c
if(PassWord != LEVEL_3_PASSWORD) //0520
{
if(!KeyPasswordInput()) break;
ComputPassWordToArray();
keyFlag = DISPLAY_MENU;
if(PassWord != LEVEL_3_PASSWORD) goto KeyInputNext;
keyFlag = DIS_PARA_INT;
}
if(setKeyType == 0) CalibrateOffsetC();
if(setKeyType == 1)
{
keyDealFlag = SaveModifyValue();
keyValue = 0;
if(keyDealFlag == NEXT) break;
PassWord = 0;
setKeyType = 0;
keyFlag = DISPLAY_MENU;
if(keyDealFlag != SAVE) goto KeyInputNext;
offsetGas = setKeyBuffer;
tempL.DWord = (unsigned long int)setKeyBuffer;
tempL.Byte[OFFSET_GAS_CRC] = CRC8(tempL.Byte, OFFSET_GAS_CRC);
WriteMultiByteToEEPROM(OFFSET_GAS, tempL.Byte, OFFSET_GAS_WIDTH, PARA_EEPROM);
goto KeyInputNext;
}
break;
case KEY_SET_PULSE: //F4 设置脉冲当量
if(setKeyType == 0) ModifyLPFactoryLiterPerPulse();
if(setKeyType == 1)
{
keyDealFlag = SaveModifyValue();
keyValue = 0;
if(keyDealFlag == NEXT) break;
setKeyType = 0;
keyFlag = DISPLAY_MENU;
if(keyDealFlag != SAVE) goto KeyInputNext;
if(factoryUnitPerPulse == (unsigned int)setKeyBuffer) goto KeyInputNext;
lastRemaining = 0;
factoryUnitPerPulse = setKeyBuffer;
tempL.DWord = (unsigned long int)factoryUnitPerPulse;
tempL.Byte[PULSE_UNIT_CRC] = CRC8(tempL.Byte, PULSE_UNIT_CRC);
WriteMultiByteToEEPROM(PULSE_UNIT, tempL.Byte, PULSE_UNIT_WIDTH, PARA_EEPROM);
goto KeyInputNext;
}
break;
case KEY_SET_ADDR: //F5 设置MODBUS
if(setKeyType == 0) ModifyModBusAdr();
if(setKeyType == 1)
{
keyDealFlag = SaveModifyValue();
keyValue = 0;
if(keyDealFlag == NEXT) break;
setKeyType = 0;
keyFlag = DISPLAY_MENU;
if(keyDealFlag != SAVE) goto KeyInputNext;
localAddress = setKeyBuffer;
tempL.DWord = (unsigned long int)localAddress;
tempL.Byte[SLAVER_ADDR_CRC] = CRC8(tempL.Byte, SLAVER_ADDR_CRC);
WriteMultiByteToEEPROM(SLAVER_ADDR, tempL.Byte, SLAVER_ADDR_WIDTH, PARA_EEPROM);
goto KeyInputNext;
}
break;
case KEY_SET_DECIMAL_POINT: //F5 设置MODBUS
if(setKeyType == 0) ModifyUartDecimalPoint();
if(setKeyType == 1)
{
keyDealFlag = SaveModifyValue();
keyValue = 0;
if(keyDealFlag == NEXT) break;
setKeyType = 0;
keyFlag = DISPLAY_MENU;
if(keyDealFlag != SAVE) goto KeyInputNext;
uartDecimalPoint = (unsigned char)setKeyBuffer;
tempL.DWord = (unsigned long int)uartDecimalPoint;
tempL.Byte[COM_DECIMAL_POINT_CRC] = CRC8(tempL.Byte, COM_DECIMAL_POINT_CRC);
WriteMultiByteToEEPROM(COM_DECIMAL_POINT, tempL.Byte, COM_DECIMAL_POINT_WIDTH, PARA_EEPROM);
goto KeyInputNext;
}
break;
//case KEY_SET_SAVE: //退出菜单-放弃/存储设置值选择
// if(ReturnKeySetSub()) goto KeyInputReturn;
// break;
default:
goto KeyInputReturn;
break;
}
}
keyValue = 0;
DisplayEditMenu();
return;
KeyInputReturn:
KeyReset();
DisableKeyInterrupt();
NumericPrepForOutputAndDisplay();
return;
}