Files
CHJ/user/Interface/KeyEdit.c

1102 lines
35 KiB
C
Raw Normal View History

2026-03-20 21:16:58 +08:00
#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; //<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־
}
/******************************************************************************/
void EnableKeyInterrupt(void)
{
KEY_IES |= KEY_PIN;
KEY_IFG &= ~KEY_PIN; //<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־
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];
}
/******************************************************************************/
// <20><><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD>ϵ<EFBFBD><CFB5>
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;
}
/******************************************************************************/
//<2F>޸Ķ<DEB8><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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;
}
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
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;
}
/* *******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У׼С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У׼С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߱<EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
1<EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD>
2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1min
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><EFBFBD>ܶ<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD>
ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SET<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>У<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ִ<EFBFBD>д˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ѡ<EFBFBD>񲻴<EFBFBD>޸<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>򡰼<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
******************************************************************************* */
void CalibrateOffsetC(void)
{
if(keyFlag == DIS_PARA_INT)
{
modifyBit = 4;
keyValue = 0;
keyFlag = FLASH_BIT;
ClearDisplay();
//<2F><>˲ʱ<CBB2><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰʹ<C7B0>õ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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();
// <20>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD>˲<EFBFBD><CBB2>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ж<EFBFBD>ȡ<EFBFBD><C8A1>ǰ<EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
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;
}
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
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;
}
/*********************************************************************************/
//<2F>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><E5B5B1>
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;
}
/******************************************************************************/
//<2F>͹<EFBFBD><CDB9>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/******************************************************************************
<EFBFBD>͹<EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>
1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>1111<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
1<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>SET-FCOE<EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD>ϵ<EFBFBD><EFBFBD>MeterFactor<EFBFBD><EFBFBD>
2<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>SET_DCOE<EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>2222<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>󼴿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>device coefficients<EFBFBD><EFBFBD>
<EFBFBD>û<EFBFBD>ѡ<EFBFBD><EFBFBD>return<EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>SET-Y<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򣬲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
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 <20><><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD>ϵ<EFBFBD><CFB5>
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 <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
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;
// <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
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 <20><><EFBFBD><EFBFBD>У׼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 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B5B1>
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 <20><><EFBFBD><EFBFBD>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 <20><><EFBFBD><EFBFBD>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: //<2F>˳<EFBFBD><CBB3>˵<EFBFBD>-<2D><><EFBFBD><EFBFBD>/<2F><EFBFBD><E6B4A2><EFBFBD><EFBFBD>ֵѡ<D6B5><D1A1>
// if(ReturnKeySetSub()) goto KeyInputReturn;
// break;
default:
goto KeyInputReturn;
break;
}
}
keyValue = 0;
DisplayEditMenu();
return;
KeyInputReturn:
KeyReset();
DisableKeyInterrupt();
NumericPrepForOutputAndDisplay();
return;
}