1102 lines
35 KiB
C
Executable File
1102 lines
35 KiB
C
Executable File
#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、设置二次修正系数;
|
||
进入按键处理程序前,需输入用户参数密码1(1111);
|
||
|
||
用户参数密码1输入正确后,
|
||
1、选择SET-FCOE菜单即可设置仪表系数MeterFactor;
|
||
2、选择SET_DCOE菜单后,需要输入用户设置密码2(2222),正确后即可设置二次修正系数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;
|
||
} |