This commit is contained in:
2026-03-20 21:16:58 +08:00
parent 286ff98b8e
commit 90c3d919df
248 changed files with 94554 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
#ifndef __AlarmOutputDefine_h__
#define __AlarmOutputDefine_h__
//==============================================================================
// for alarm function
#define EN_ACC_ALARM BIT0
#define EN_FR_ALARM BIT1
#define EN_SUPPERSSSION BIT2 // 1: <20><>Ч1
#define EN_PRESS_ALARM BIT3
#define SET_IO_LEVEL BIT11 // 1: <20>ߵ<EFBFBD>ƽ
#define DISABLE_FR_ALARM 0
#define DISABLE_PRESS_ALARM 0
//------------------------------------------------------------------------------
// for output IO Config
#define IO_USE_BIT (BIT12 + BIT13 + BIT14 + BIT15)
#define IOH_USE_BIT (BIT14 + BIT15)
#define IOL_USE_BIT (BIT12 + BIT13)
// PB12 = LATCH
// PB13 = PULSE
//ALARM_LOW_Pin = pulse pin
//#define IOL_USE_TO_FR 0 // 0
//#define IOL_USE_TO_PRESS BIT12 // 1
//#define IOL_USE_TO_PULSE BIT13 // 2
#define IOL_USE_TO_FR 0 // 0
#define IOL_USE_TO_PRESS BIT12 // 1
//ALARM_high_Pin = 4-20mA LATH pin
//#define IOH_USE_TO_FR 0 // 0
//#define IOH_USE_TO_PRESS BIT14 // 1
//#define IOH_USE_TO_LATH BIT15 // 2
#define IOH_USE_TO_FR 0 // 0
#define IOH_USE_TO_PRESS BIT14 // 1
#define IOH_USE_TO_PULSE BIT15 // 2
//==============================================================================
#define IO_ALARM_LOW SET_IO_LEVEL
#define IO_ALARM_HIGH 0
//==============================================================================
// for alarm state2
#define VALVE_STATE BIT0
#define UPPER_PRESS_STATE BIT11
#define LOWER_PRESS_STATE BIT12
#define UPPER_FR_STATE BIT13 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD><DEB1><EFBFBD>
#define LOWER_FR_STATE BIT14 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD><DEB1><EFBFBD>
#define ACC_ALARM_STATE BIT15 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MAX_DLEAY_ALARM_TIME 180
#endif

113
user/Interface/CurrentLoop.c Executable file
View File

@@ -0,0 +1,113 @@
#include "../main/SystemInclude.h"
//##############################################################################
#ifndef ENABLE_4_20MA_OUTPUT
#pragma message("[undefined] ENABLE_4_20MA_OUTPUT")
#elif(ENABLE_4_20MA_OUTPUT)
//##############################################################################
//******************************************************************************
void CurrentLoopInit(void)
{
#ifndef ENABLE_4_20MA_ALL
#pragma message("[undefined] ENABLE_4_20MA_ALL")
#elif(ENABLE_4_20MA_ALL)
SysLoopChip = ReadShortParameterFromEEPROM(SYS_LOOP_CHIP, SYS_LOOP_CHIP_WIDTH, SYS_LOOP_CHIP_DEFAULT);
if(SysLoopChip == DAC8760)
{
DAC8760Init(FR_20MA);
#ifndef ENABLE_PRESSURE
#pragma message("[undefined] ENABLE_PRESSURE")
#elif(ENABLE_PRESSURE)
DAC8760Init(PRESS_20MA);
#endif
}
else if(SysLoopChip == AD5420)
{
AD5420Init(FR_20MA);
#ifndef ENABLE_PRESSURE
#pragma message("[undefined] ENABLE_PRESSURE")
#elif(ENABLE_PRESSURE)
AD5420Init(PRESS_20MA);
#endif
}
#else
#ifndef ENABLE_USE_DAC8760
#pragma message("[undefined] ENABLE_USE_DAC8760")
#elif(ENABLE_USE_DAC8760)
DAC8760Init(FR_20MA);
#endif
#ifndef ENABLE_USE_AD5420
#pragma message("[undefined] ENABLE_USE_AD5420")
#elif(ENABLE_USE_AD5420)
AD5420Init(FR_20MA);
#endif
#endif
}
//******************************************************************************
void CurrentLoopLopwerMode(void)
{
DisableDACSPI();
#ifndef ENABLE_USE_DACSOMI
#pragma message("[undefined] ENABLE_USE_DACSOMI")
#elif(ENABLE_USE_DACSOMI)
DISABLE_DACSOMI();
ENABLE_DACSOMI_OUTPUT();
#endif
DISABLE_DACSIMO();
ENABLE_DACSIMO_OUTPUT();
CLR_DACSIMO();
DISABLE_DACCLK();
ENABLE_DACCLK_OUTPUT();
CLR_DACCLK();
LOOP_LATCH_PIN_OUTPUT();
CLR_LOOP_LATCH();
}
//******************************************************************************
void ComputCurrentLoopAndOutput(void)
{
float LoopOutputValue;
if(flowRate > maxFlowRate) LoopOutputValue = 65535; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>20mA
else
{
//unsigned long int tmp = maxFlowRate *10 / 12;
LoopOutputValue = 65535;
LoopOutputValue /= (float)maxFlowRate; //LoopOutputValue /= (unsigned long long int)LoopOutputMaxFlowrate;
LoopOutputValue *= (float)flowRate; //<2F><><EFBFBD><EFBFBD>fr= (displayUpdata*65535)/maxFlowrate
}
#ifndef ENABLE_4_20MA_ALL
#pragma message("[undefined] ENABLE_4_20MA_ALL")
#elif(ENABLE_4_20MA_ALL)
if(SysLoopChip == DAC8760) DAC8760Output((unsigned int)LoopOutputValue, FR_20MA);
else if(SysLoopChip == AD5420) AD5420Output((unsigned int)LoopOutputValue, FR_20MA);
#else
#ifndef ENABLE_USE_AD5420
#pragma message("[undefined] ENABLE_USE_AD5420")
#elif(ENABLE_USE_AD5420)
AD5420Output((unsigned int)LoopOutputValue, FR_20MA);
#endif
#ifndef ENABLE_USE_DAC8760
#pragma message("[undefined] ENABLE_USE_DAC8760")
#elif(ENABLE_USE_DAC8760)
DAC8760Output((unsigned int)LoopOutputValue, FR_20MA);
#endif
#endif
}
//##############################################################################
#endif
//##############################################################################

46
user/Interface/CurrentLoop.h Executable file
View File

@@ -0,0 +1,46 @@
#ifndef __CurrentLoop_h__
#define __CurrentLoop_h__
//##############################################################################
#if(ENABLE_4_20MA_OUTPUT)
//##############################################################################
#define FR_20MA 0
#define PRESS_20MA 1
//******************************************************************************
#if(ENABLE_USE_SPI2)
#define EnableDACSPI EnableSPI2
#define DisableDACSPI DisableSPI2
#define DACWriteData SPI2WriteData
#define DISABLE_DACSIMO DISABLE_SPI2SIMO
#define ENABLE_DACSIMO_OUTPUT ENABLE_SPI2SIMO_OUTPUT
#define CLR_DACSIMO CLR_SPI2SIMO
#define DISABLE_DACCLK DISABLE_SPI2CLK
#define ENABLE_DACCLK_OUTPUT ENABLE_SPI2CLK_OUTPUT
#define CLR_DACCLK CLR_SPI2CLK
#else
#define EnableDACSPI EnableSPI
#define DisableDACSPI DisableSPI
#define DACWriteData SPIWriteData
#define DISABLE_DACSIMO DISABLE_SPISIMO
#define ENABLE_DACSIMO_OUTPUT ENABLE_SPISIMO_OUTPUT
#define CLR_DACSIMO CLR_SPISIMO
#define DISABLE_DACCLK DISABLE_SPICLK
#define ENABLE_DACCLK_OUTPUT ENABLE_SPICLK_OUTPUT
#define CLR_DACCLK CLR_SPICLK
#endif
void CurrentLoopInit(void);
void CurrentLoopLopwerMode(void);
void ComputCurrentLoopAndOutput(void);
//##############################################################################
#endif
//##############################################################################
#endif

125
user/Interface/Display.c Executable file
View File

@@ -0,0 +1,125 @@
#include "../main/SystemInclude.h"
//==============================================================================
//##############################################################################
#ifndef ENABLE_LCD_DISPLAY
#pragma message("[undefined] ENABLE_LCD_DISPLAY")
#elif(ENABLE_LCD_DISPLAY)
//##############################################################################
unsigned int displayBit;
/******************************************************************************/
// Numeric preparation for output and display
void NumericPrepForOutputAndDisplay(void)
{
if(currentMode.Bit.TurnOffSystem)
{
ClearDisplay();
return;
}
FlowrateDisplay(flowDisUnit);
TotalFlowRateDisplay(AccDisUnit);
TemperatureDisplay(voltageDetected[TPCB]);
ErrorDisplay(alarmState);
//---------------------------------------------------------------------------
#ifndef ENABLE_PRESSURE
#pragma message("[undefined] ENABLE_PRESSURE")
#elif(ENABLE_PRESSURE)
PressDisplay();
#else
if(currentMode.Bit.ZeroCalib) ZeroCalibDisplay();
else if(currentMode.Bit.DebugMode) DebugDisplay();
else if(currentMode.Bit.CalibMode) CalibrationDisplay();
else if((alarmState & HARD_ALARM) == HARD_ALARM) HardWareAlarmInfo(alarmState);
else if(systemAlarm.Bit.GasChange) GasChangeDisplay();
else CommAddrDisplay(localAddress);
#endif
//---------------------------------------------------------------------------
BatteryGridDisplay(batteryGrid);
//LcdModeInit();
LcdWriteDisplay();
}
//******************************************************************************
void AlarmFlashDisplay(void)
{
//ClearACCDisplay();
//ErrorDisplay(alarmState);
//------------------------------------------------------------------------------
#ifndef ENABLE_LEAK_DETECT
#pragma message("[undefined] ENABLE_LEAK_DETECT")
#elif(ENABLE_LEAK_DETECT)
if((alarmState1 & LEAK_ALARM) == LEAK_ALARM)
{
ClearDisplay();
OtherAlarmInfo(alarmState1);
LcdWriteDisplay();
return;
}
#endif
//------------------------------------------------------------------------------
#ifndef ENABLE_AUTO_CALIB_ATYPE_OFFSET
#pragma message("[undefined] ENABLE_AUTO_CALIB_ATYPE_OFFSET")
#elif(ENABLE_AUTO_CALIB_ATYPE_OFFSET)
if(userInitial == NEED_FOR_INIT)
{
NoIniFlashDisplayFlowRate();
return;
}
#endif
ClearErrorDisplay(alarmState);
LcdWriteDisplay();
}
//******************************************************************************
//void ZeroFlowrateDisplay(void)
//{
// SetFlowDisplayToZero();
// TotalFlowRateDisplay();
// BatteryGridDisplay(batteryGrid);
// TemperatureDisplay(voltageDetected[TPCB]);
// ErrorDisplay(alarmState);
//
// if((alarmState & HARD_ALARM) == HARD_ALARM) HardWareAlarmInfo(alarmState);
// else if(systemAlarm.Bit.GasChange) GasChangeDisplay();
// else CommAddrDisplay(localAddress);
//
// LcdModeInit();
// LcdWriteDisplay();
//}
//******************************************************************************
//void AlarmFlashDisplay(void)
//{
// ClearErrorDisplay(alarmState);
// LcdWriteDisplay();
//}
//******************************************************************************
void DisplayInit(void)
{
LcdModeInit();
DisplayAll();
delay_ms(1500);
ClearDisplay();
delay_ms(1000);
MeterInfoDisplay();
//delay_ms(3000);
//delay_ms(500);
//ClearDisplay();
//NumericPrepForOutputAndDisplay();
}
//##############################################################################
#endif
//##############################################################################

31
user/Interface/Display.h Executable file
View File

@@ -0,0 +1,31 @@
#ifndef __Display_h__
#define __Display_h__
//SLM<4C><4D>Standard Liter per Minute<74><65><EFBFBD>DZ<EFBFBD>ʾÿ<CABE><C3BF><EFBFBD>ӱ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>
//SCCM<43><4D>Standard Cubic Centimeter per Minute<74><65><EFBFBD>DZ<EFBFBD>ʾÿ<CABE><C3BF><EFBFBD>ӱ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//SCFM standard cubic foot per minute <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>Ӣ<EFBFBD><D3A2>ÿ<EFBFBD><C3BF><EFBFBD>ӣ<EFBFBD>Ӣ<EFBFBD><D3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
//SCFH standard cubic foot per Hour <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>Ӣ<EFBFBD><D3A2>ÿСʱ
//SLPM stard liter per minute<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>
// for display mode
#define NO_DIS_UPDATE 0x00
#define NORMOL_UPDATE 0x01
#define INIT_UPDATE 0x02
#define FLASH_UPDATE 0x03
#ifndef ENABLE_LCD_DISPLAY
#pragma message("[undefined] ENABLE_LCD_DISPLAY")
#endif
#if(ENABLE_LCD_DISPLAY)
extern unsigned int displayBit;
void NumericPrepForOutputAndDisplay(void);
void DisplayInit(void);
void AlarmFlashDisplay(void);
void ZeroFlowrateDisplay(void);
/**********************************/
#endif
#endif

1102
user/Interface/KeyEdit.c Executable file

File diff suppressed because it is too large Load Diff

51
user/Interface/KeyEdit.h Executable file
View File

@@ -0,0 +1,51 @@
#ifndef __keyedit_h__
#define __keyedit_h__
//low power keyboard define
#define KEYBOARD_IDLE_TIME_BASIC (4095) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 1S
#define KEYBOARD_IDLE_TIME (60)
#define LEVEL_1_PASSWORD 1111
#define LEVEL_2_PASSWORD 2222
#define LEVEL_3_PASSWORD 520
#define LEVEL_4_PASSWORD 4444
#define KEY_INIT_PASSWORD 0
#define KEY_SET_METERFACTOR 1
#define KEY_SET_COEFFIC 2
#define KEY_CALIB_OFFSETC 3
#define KEY_SET_PULSE 4
#define KEY_SET_ADDR 5
#define KEY_SET_DECIMAL_POINT 6
#define KEY_SET_RETURN 7
//******************************************************************************
extern bool isKeyPressed;
extern unsigned int keyFlag, PassWord, keyTime, keyValue, keyBuff, menuIndex, modifyBit, keyFlashTime;
extern unsigned int setKeyBuffer;
extern unsigned long int temp_dcoefNode[];
extern unsigned int temp_dcoefNum, temp_dcoefVal[];
//******************************************************************************
void KeyReset(void);
void DisableKeyInterrupt(void);
void EnableKeyInterrupt(void);
void KeyEditInit(void);
void FlashBitForSetup(void);
void ReadKeyValue(void);
unsigned int SaveModifyValue(void);
bool ReturnKeySetSub(void);
unsigned int DisplaySetIndex(void);
bool KeyPasswordInput(void);
void ComputPassWordToArray(void);
void ModifyMeterFactor(void);
void ModifyDcoefNum(void);
void ModifyDcoefNode(void);
bool ModifyDcoefVal(void);
void CalibrateOffsetC(void);
void ModifyLPFactoryLiterPerPulse(void);
void ModifyModBusAdr(void);
void ModifyUartDecimalPoint(void);
void KeyInputProcessing(void);
#endif

15
user/Interface/MFC4B6B.tmp Executable file
View File

@@ -0,0 +1,15 @@
//##############################################################################
#if(ENABLE_4_20MA_OUTPUT)
//##############################################################################
#ifndef __CurrentLoop_h__
#define __CurrentLoop_h__
void CurrentLoopInit(void);
void CurrentLoopLopwerMode(void);
void ComputCurrentLoopAndOutput(void);
#endif
//##############################################################################
#endif
//##############################################################################

348
user/Interface/Pulse - 副本.c Executable file
View File

@@ -0,0 +1,348 @@
#include "../main/SystemInclude.h"
//******************************************************************************
unsigned int PulsePeriod[3];
//unsigned int PulsePeriod, PulseDuty, PulseDiv, PulseCapture;
unsigned long int pulseCounter;
signed int targetPulse;
bool isPulseUpdaed;
//******************************************************************************
//0.25s, 0.5s, 1s, 2s, 4s
//const unsigned char PulseGain[] = {4, 2, 1, 1, 1}; // 0.25s *4, 0.5S*4,
const unsigned char PulseGain[] = {16, 8, 4, 2, 1};
//const unsigned int UpdateTimeVaule[] = {3768, 7372, 7372, 7372, 7372}; // 0.23s, 0.45s
const unsigned int UpdateTimeVaule[] = {3768, 7372, 8192, 16384, 32768}; // 0.23s, 0.45s, 0.5s, 1s, 2s
const unsigned int MaxPulseOutput[]={
MAX_TIMER_PULSE>>2, MAX_TIMER_PULSE>>1, MAX_TIMER_PULSE*1 , MAX_TIMER_PULSE*2,
MAX_TIMER_PULSE*4 }; // 0.25s, 0.5s, 1s, 2s, 4s
//******************************************************************************
// USER PULSE ( MAX FR = 3600 NM3)
const unsigned int UserHighPulsePeriod[]={1022, 511, 341, 255, 204, 170, 146, 128, 114, 102, 93, 85, 79, 73, 68, 64, 60}; //> 32Hz < 512Hz
const unsigned int UserLowPulsePeriod[]={8192, 4096, 2730, 2048, 1638, 1365, 1170, 1024}; // {4088, 2044, 1363, 1022}; //<32Hz
//******************************************************************************
//for 125KHz
const unsigned int PULSE_TABLE[]={
0,62501,31250,20834,15626,12501,10417,8929,7813,6945,6251,5682,5209,4808,
4465,4167,3907,3677,3473,3290,3126,2977,2841,2718,2605,2501,2404,2315,2233,
2156,2084,2017,1954,1894,1839,1786,1737,1690,1645,1603,1563,1525,1489,1454,
1421,1389,1359,1330,1303,1276,1251,1226,1202,1180,1158,1137,1117,1097,1078,
1060,1042,1025,1009,993,977,962,947,933,920,906,893,881,869,857,845,834,823,
812,802,792,782,772,763,754,745,736,727,719,711,703,695,687,680,673,665,658,
652,645,638,632,626,619,613,607,601,596,590,585,579,574,569,564,559,554,549,
544,539,535,530,526,521,517,513,509,505,501,497,493,489,485,481,478,474,470,
467,463,460,457,453,450,447,444,441,438,435,432,429,426,423,420,417,414,412,
409,406,404,401,399,396,394,391,389,386,384,382,379,377,375,373,370,368,366,
364,362,360,358,356,354,352,350,348,346,344,342,340,338,337,335,333,331,329,
328,326,324,323,321,319,318,316,315,313,311,310,308,307,305,304,302,301,300,
298,297,295,294,293,291,290,289,287,286,285,283,282,281,280,278,277,276,275,
273,272,271,270,269,268,266,265,264,263,262,261,260,259,258,257,256,255,254,
253,252,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,
235,234,233,232,231,230,229,229,228,227,226,225,225,224,223,222,221,221,220,
219,218,218,217,216,215,215,214,213,212,212,211,210,210,209,208,207,207,206,
205,205,204,203,203,202,201,201,200,200,199,198,198,197,196,196,195,195,194,
193,193,192,192,191,190,190,189,189,188,188,187,187,186,185,185,184,184,183,
183,182,182,181,181,180,180,179,179,178,178,177,177,176,176,175,175,174,174,
173,173,172,172,171,171,170,170,169,169,169,168,168,167,167,166,166,165,165,
165,164,164,163,163,162,162,162,161,161,160,160,160,159,159,158,158,158,157,
157,156,156,156,155,155,154,154,154,153,153,153,152,152,151,151,151,150,150,
150,149,149,149,148,148,148,147,147,147,146,146,146,145,145,145,144,144,144,
143,143,143,142,142,142,141,141,141,140,140,140,139,139,139,138,138,138,138,
137,137,137,136,136,136,135,135,135,135,134,134,134,133,133,133,133,132,132,
132,132,131,131,131,130,130,130,130,129,129,129,129,128,128,128,128,127,127,
127,127,126,126,126,126,125,125,125,125,124,124,124,124,123,123,123,123,122,
122,122,122,121,121,121,121 };
/******************************************************************************/
void CapturePulseStart(unsigned int timerCLK)
{
P3SEL |= BIT2;
P3DIR &= ~BIT2;
CAPTURECTL &= ~(MC0+MC1); // <20>رն<D8B1>ʱ<EFBFBD><CAB1>
CAPTURECCTL0 = COMPARE;
CAPTURECCR0 = targetPulse;
CAPTURECTL = CONTINUOUS + DIV_1 + timerCLK + TIMER_CLR;
}
/******************************************************************************/
void DisableCapturePulse(void)
{
CAPTURECTL = TIMER_CLR;
CAPTURECCTL0 = COMPARE; // start timer A
CAPTUREEX0 = 0;
CAPTURECCR0 = 0;
DISABLE_CAPTURE_INTERRUPT;
P3SEL |= BIT2;
P3DIR &= ~BIT2;
}
/******************************************************************************/
void CloseFloawRatePulse(void)
{
P3SEL &= ~BIT1; // ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڵĵڶ<C4B5><DAB6><EFBFBD><EFBFBD><EFBFBD>
P3DIR |= BIT1;
// HIGH Effective: IO=LOW, PULSE OUT = HIGH;
// LOW Effective: IO=HIGH, PULSE OUT = LOW;
if(PulseLevel == (unsigned int)LOW) P3OUT |= BIT1;
else P3OUT &= ~BIT1;
PULSECTL = TIMER_CLR; // <20>رն<D8B1>ʱ<EFBFBD><CAB1>
PULSECCR1 = 0;
PULSECCR0 = 0;
DISABLE_PULSE_INTERRUPT;
DISABLE_CAPTURE_INTERRUPT;
isPulseUpdaed = 1;
CAPTURECTL = TIMER_CLR;
CAPTURECCTL0 = COMPARE; // start timer A
CAPTUREEX0 = 0;
CAPTURECCR0 = 0;
DMADisableInterrupt(2);
DMADisableAndStop(2);
}
/******************************************************************************/
void CompareLossCount(void)
{
unsigned int countTemp;
// stop pulse output capture timer
//CAPTURECTL &= ~(MC0+MC1);
//PULSECTL &= ~(MC0+MC1);
alarmState &= ~PULSE_ALARM;
// compute lose pulse
countTemp = CAPTURETAR;
targetPulse = CAPTURECCR0;
if(countTemp >= (targetPulse >> 1))
{
targetPulse -= countTemp;
if(targetPulse > 50) targetPulse = 50;
}
else if(targetPulse == 0) isPulseUpdaed = 1;
else
{
targetPulse = 0;
alarmState |= PULSE_ALARM;
isPulseUpdaed = 1;
}
}
/******************************************************************************/
void ReadyForCalibrationPulseOutput(void)
{
//select timer clock
// for flowRate output pulse
// set timer A0
//(DCO clk(FREQ) = 2000000)
//2000000/16 = 125000
CompareLossCount();
targetPulse += (signed int)totalPulse;
if(targetPulse <= 0)
{
CloseFloawRatePulse();
DisableCapturePulse();
return;
}
//else if(targetPulse >= MAX_TIMER_PULSE) targetPulse = MAX_TIMER_PULSE;
else if(targetPulse >= MaxPulseOutput[samplingInterval]) targetPulse = MaxPulseOutput[samplingInterval];
if(PulseLevel == (unsigned int)LOW) CapturePulseStart(TIMER_TACLK);
else CapturePulseStart(TIMER_INVTACLK);
DISABLE_CAPTURE_INTERRUPT;
//---------------------------------------------------------------------------
targetPulse *= (unsigned int)PulseGain[samplingInterval];
targetPulse >>= 2;
//---------------------------------------------------------------------------
PulsePeriod[1] = PULSE_TABLE[targetPulse];
PulsePeriod[2] = PulsePeriod[1] >> 1;
//---------------------------------------------------------------------------
PULSECCTL0 &= ~CCIFG;
if(isPulseUpdaed == 1)
{
DMADisableInterrupt(2);
DMAInit(2, DMA_TA2CCR0, BURST_BLOCK+DMASA_INC+DMADA_INC, (unsigned int)&PulsePeriod, (unsigned int)&PULSETAR, 3);
// HIGH Effective: IO=LOW, PULSE OUT = HIGH;
// LOW Effective: IO=HIGH, PULSE OUT = LOW;
if(PulseLevel == (unsigned int)LOW) PULSECCTL1 = OUT_RESET_SET;
else PULSECCTL1 = OUT_SET_RESET;
P3SEL |= BIT1;
P3DIR |= BIT1;
PulsePeriod[0] = 0;
PULSECTL = 0;
PULSECCR0 = PulsePeriod[1];
PULSECCR1 = PulsePeriod[2];
PULSEEX0 = TAIDEX_7;
//PULSECTL = UP_CCR0_0 + DIV_2 + TIMER_SMCLK;
PULSECTL = UP_CCR0 + DIV_4 + TIMER_SMCLK;
isPulseUpdaed = 0;
}
DMA2CTL |= DMAREQ + DMAEN;
}
//******************************************************************************
void ReadyForUserPulseOutput(void)
{
//select timer clock
// for flowRate output pulse
// stop pulse output capture timer
// for 32768Hz
targetPulse = totalPulse;
if(targetPulse == 0)
{
CloseFloawRatePulse();
return;
}
//---------------------------------------------------------------------------
totalPulse *= (unsigned int)PulseGain[samplingInterval];
totalPulse >>= 2;
//---------------------------------------------------------------------------
if(totalPulse < 32) PULSECCR0 = UserLowPulsePeriod[totalPulse>>2];
else
{
totalPulse >>= 5;
if(totalPulse > 16) totalPulse = 16;
PULSECCR0 = UserHighPulsePeriod[totalPulse];
}
PULSECTL |= TIMER_CLR;
P3SEL |= BIT1;
P3DIR |= BIT1;
PULSECCR1 = PULSECCR0 >> 1;
// HIGH Effective: IO=LOW, PULSE OUT = HIGH;
// LOW Effective: IO=HIGH, PULSE OUT = LOW;
if(PulseLevel == (unsigned int)LOW)
{
PULSECCTL1 = OUT_RESET_SET;
CapturePulseStart(TIMER_TACLK);
}
else
{
PULSECCTL1 = OUT_SET_RESET;
CapturePulseStart(TIMER_INVTACLK);
}
PulsePeriod[0] = (unsigned int)TIMER_CLR;
CAPTURECCTL0 &= ~CCIFG;
DMADisableInterrupt(2);
DMAInit(2, DMA_TA1CCR0, SINGLE_TRAN+DMASA_UNCHANGED+DMADA_UNCHANGED, (unsigned int)&PulsePeriod, (unsigned int)&PULSECTL, 1);
DMA2CTL |= DMAREQ + DMAEN;
//DMAEnableInterrupt(2);
PULSEEX0 = 0;
PULSECTL = UP_CCR0 + DIV_1 + TIMER_ACLK + TIMER_CLR;
isPulseUpdaed = 1;
// ENABLE_CAPTURE_INTERRUPT;
// PULSEEX0 = 0;
// PULSECTL = UP_CCR0 + DIV_1 + TIMER_ACLK + TIMER_CLR;
//
// isPulseUpdaed = 1;
// DMADisableAndStop(2);
}
/******************************************************************************/
//#pragma vector = PULSE_PERIOD_VECTOR
//__interrupt void Pulse_isr(void)
//{
// disable_interrupts();
// CloseFloawRatePulse();
// DisableCapturePulse();
//
// enable_interrupts();
//}
/******************************************************************************/
//#pragma vector = DMA2_VECTOR
//__interrupt void ClosePulse_isr(void)
//{
// intVector = DMAIV;
// if(intVector != DMA2_VECTOR) return;
// disable_interrupts();
//
// CloseFloawRatePulse();
// DisableCapturePulse();
// DMAEnableInterrupt(2);
// enable_interrupts();
//}
/******************************************************************************/
//#pragma vector = CAPTURETACCP0_VECTOR
//__interrupt void CloseCapture_isr(void)
//{
// disable_interrupts();
//
// CloseFloawRatePulse();
// DisableCapturePulse();
//
// enable_interrupts();
//}
/******************************************************************************/
//set up flowRate PULSE OUTPUT
void UpdateAccPulse(void)
{
if(isCalibMode) ReadyForCalibrationPulseOutput();
else
{
pulseCounter += (unsigned long int)totalPulse;
if(unitPerPulse < 51) ReadyForCalibrationPulseOutput();
else ReadyForUserPulseOutput();
}
totalPulse = 0;
targetPulse = 0;
}
/******************************************************************************/
void SetPulseUpdateTime(void)
{
MAINTACCTL2 = COMPARE;
MAINTACCR2 = UpdateTimeVaule[samplingInterval];
MAINTACCTL2 &= ~CCIFG;
MAINTACCTL2 |= CCIE;
}
/******************************************************************************/
void DisablePulseTimerInterrupt(void)
{
MAINTACCTL2 = 0;
}
/******************************************************************************/
void PulseParameterInit(void)
{
// for pulse output unit
ReadMultiByteFromEEPROM(PULSE_UNIT, tempL.Byte, PULSE_UNIT_WIDTH, PARA_EEPROM);
if(tempL.Byte[PULSE_UNIT_CRC] != CRC8(tempL.Byte, PULSE_UNIT_CRC)) factoryUnitPerPulse = PULSE_UNIT_DEFAULT;
else factoryUnitPerPulse = tempL.Word[0];
// for pulse output cunter
// ReadMultiByteFromEEPROM(PULSE_COUNTER, tempL.Byte, PULSE_COUNTER_WIDTH, PARA_EEPROM);
// if(tempL.Byte[PULSE_COUNTER_CRC] != CRC8(tempL.Byte, PULSE_COUNTER_CRC)) pulseCounter = 0;
// else pulseCounter = tempL.Word[0];
ReadMultiByteFromEEPROM(PULSE_LEVEL, tempL.Byte, PULSE_LEVEL_WIDTH, PARA_EEPROM);
if(tempL.Byte[PULSE_LEVEL_CRC] != CRC8(tempL.Byte, PULSE_LEVEL_CRC)) PulseLevel = (unsigned int)HIGH;
else PulseLevel = (unsigned int)tempL.Byte[0];
// HIGH Effective: IO=LOW, PULSE OUT = HIGH;
// LOW Effective: IO=HIGH, PULSE OUT = LOW;
DisableCapturePulse();
CloseFloawRatePulse();
}

83
user/Interface/Pulse - 副本.h Executable file
View File

@@ -0,0 +1,83 @@
#ifndef __Pulse_h__
#define __Pulse_h__
#define PULSECCR0 TA2CCR0
#define PULSECCR1 TA2CCR1
#define PULSEEX0 TA2EX0
#define PULSECTL TA2CTL
#define PULSECCTL0 TA2CCTL0
#define PULSECCTL1 TA2CCTL1
#define PULSETAR TA2R
#define PULSE_INT_VECTOR TIMER2_A1_VECTOR
#define PULSE_PERIOD_VECTOR TIMER2_A0_VECTOR
#define DISABLE_PULSE_TA_INTERRUPT disable_TA2OV_interrupts()
//#define ENABLE_PULSE_TA_INTERRUPT enable_TA2OV_interrupts()
#define DISABLE_PULSE_INTERRUPT disable_TA2CCP_interrupts(CCP0)
#define ENABLE_PULSE_INTERRUPT enable_TA2CCP_interrupts(CCP0)
#define CAPTURECCR0 TA1CCR0
#define CAPTUREEX0 TA1EX0
#define CAPTURECTL TA1CTL
#define CAPTURECCTL0 TA1CCTL0
#define CAPTURETAR TA1R
#define CAPTURETACCP0_VECTOR TIMER1_A0_VECTOR
#define DISABLE_CAPTURE_INTERRUPT disable_TA1CCP_interrupts(CCP0)
#define ENABLE_CAPTURE_INTERRUPT enable_TA1CCP_interrupts(CCP0)
#define CAPTURECCR1 TA1CCR1
#define CAPTURECCTL1 TA1CCTL1
#define CAPTURETACCP1_VECTOR TIMER1_A1_VECTOR
#define DISABLE_UPDATEPERIOD_INTERRUPT disable_TA1CCP_interrupts(CCP1)
#define ENABLE_UPDATEPERIOD_INTERRUPT enable_TA1CCP_interrupts(CCP1)
//******************************************************************************
// for memory WIDTH
#define PULSE_UNIT_WIDTH 3
#define PULSE_LEVEL_WIDTH 2
//#define PULSE_COUNTER_WIDTH 3
#define PULSE_BASE_WIDTH 6
//******************************************************************************
// for memory CRC
#define PULSE_UNIT_CRC (PULSE_UNIT_WIDTH-1)
//#define PULSE_COUNTER_CRC (PULSE_COUNTER_WIDTH-1)
#define PULSE_LEVEL_CRC (PULSE_LEVEL_WIDTH-1)
//******************************************************************************
// for memory address
#define PULSE_UNIT PULSE_BASE
#define PULSE_LEVEL (PULSE_UNIT + PULSE_UNIT_WIDTH)
//#define PULSE_COUNTER (PULSE_UNIT + PULSE_UNIT_WIDTH)
//******************************************************************************
#define PULSE_UNIT_MAX 10000
#define MAX_TIMER_PULSE 500
#define PULSE_UPDATE_TIME 7372 // 450ms //6553 (400ms) // acc pulse update time: 400ms, 16384
//******************************************************************************
extern unsigned int PulsePeriod[];
extern signed int targetPulse;
extern unsigned long int pulseCounter;
extern bool isPulseUpdaed;
extern const unsigned int MaxPulseOutput[];
extern const unsigned int PULSE_TABLE[];
//******************************************************************************
void PulseParameterInit(void);
void CapturePulseStart(unsigned int timerCLK);
void DisableCapturePulse(void);
void CloseFloawRatePulse(void);
void CompareLossCount(void);
void ReadyForCalibrationPulseOutput(void);
//__interrupt void PulseUpdate_isr(void);
void ReadyForUserPulseOutput(void);
void SetPulseUpdateTime(void);
void DisablePulseTimerInterrupt(void);
//__interrupt void Pulse_isr(void);
//__interrupt void ClosePulse_isr(void);
//__interrupt void CloseCapture_isr(void);
void UpdateAccPulse(void);
bool ReadPulseUnitByInternalModbus(void);
bool WritePulseUnitByInternalModbus(void);
#endif

389
user/Interface/Pulse.c Executable file
View File

@@ -0,0 +1,389 @@
#include "../main/SystemInclude.h"
#ifndef ENABLE_ACCPULSE
#pragma message("[undefined] ENABLE_ACCPULSE")
#elif(ENABLE_ACCPULSE)
#define PTAR 0
#define PCCR0 1
#define PCCR1 2
#define PCCR2 3
#define PCCR3 4
#define PCCR4 5
#define PCCR5 6
#define PCCR6 7
#define PTAIV 8
#define PTAEX 9
#define PT_MAX 10
//******************************************************************************
s16 calibUnitPerPulse;
u32 unitPerPulse;
u16 PulsePeriod[PT_MAX];
//u16 PulsePeriod, PulseDuty, PulseDiv, PulseCapture;
u32 pulseCounter;
s16 targetPulse;
// bool isPulseUpdaed;
//******************************************************************************
//0.25s, 0.5s, 1s, 2s, 4s
//const unsigned char PulseGain[] = {16, 8, 4, 2, 1};
//const u16 UpdateTimeVaule[] = {3850, 7372, 7372, 7372, 7372}; // 0.235s, 0.45s, 0.5s, 1s, 2s
//const u16 MaxPulseOutput[]={
// MAX_TIMER_PULSE>>2, MAX_TIMER_PULSE>>1, MAX_TIMER_PULSE*1 , MAX_TIMER_PULSE*2,
// MAX_TIMER_PULSE*4 }; // 0.25s, 0.5s, 1s, 2s, 4s
const u8 PulseGain[] = {32, 16, 8, 4, 2, 1};
const u16 MaxPulseOutput[]={
MAX_TIMER_PULSE>>3, MAX_TIMER_PULSE>>2, MAX_TIMER_PULSE>>1, MAX_TIMER_PULSE*1 , MAX_TIMER_PULSE*2,
MAX_TIMER_PULSE*4 }; // 0.25s, 0.5s, 1s, 2s, 4s
//******************************************************************************
// USER PULSE ( MAX FR = 3600 NM3)
const u16 UserHighPulsePeriod[]={
1022, 511, 341, 255, 204, 170, 146, 128,
114, 102, 93, 85, 79, 73, 68, 64,
60, 55, 51, 48, 46, 45, 43, 41,
39, 37, 36, 35, 34, 33, 32, 31, 30 }; //> 32Hz < 512Hz
const u16 UserLowPulsePeriod[]={8192, 4096, 2730, 2048, 1638, 1365, 1170, 1024}; // {4088, 2044, 1363, 1022}; //<32Hz
//******************************************************************************
//select timer clock
// for flowRate output pulse
// set timer A0
//(DCO clk(FREQ) = 2000000)
//2000000/32 = 62500
const u16 PULSE_TABLE[]={
62500, 62499, 31250, 20833, 15625, 12500, 10416, 8928, 7812, 6944, 6250, 5681, 5208, 4807,
4464, 4166, 3906, 3676, 3472, 3289, 3125, 2976, 2840, 2717, 2604, 2500, 2403, 2314, 2232,
2155, 2083, 2016, 1953, 1893, 1838, 1785, 1736, 1689, 1644, 1602, 1562, 1524, 1488, 1453,
1420, 1388, 1358, 1329, 1302, 1275, 1250, 1225, 1201, 1179, 1157, 1136, 1116, 1096, 1077,
1059, 1041, 1024, 1008, 992, 976, 961, 946, 932, 919, 905, 892, 880, 868, 856, 844, 833,
822, 811, 801, 791, 781, 771, 762, 753, 744, 735, 726, 718, 710, 702, 694, 686, 679, 672,
664, 657, 651, 644, 637, 631, 625, 618, 612, 606, 600, 595, 589, 584, 578, 573, 568, 563,
558, 553, 548, 543, 538, 534, 529, 525, 520, 516, 512, 508, 504, 500, 496, 492, 488, 484,
480, 477, 473, 469, 466, 462, 459, 456, 452, 449, 446, 443, 440, 437, 434, 431, 428, 425,
422, 419, 416, 413, 411, 408, 405, 403, 400, 398, 395, 393, 390, 388, 385, 383, 381, 378,
376, 374, 372, 369, 367, 365, 363, 361, 359, 357, 355, 353, 351, 349, 347, 345, 343, 341,
339, 337, 336, 334, 332, 330, 328, 327, 325, 323, 322, 320, 318, 317, 315, 314, 312, 310,
309, 307, 306, 304, 303, 301, 300, 299, 297, 296, 294, 293, 292, 290, 289, 288, 286, 285,
284, 282, 281, 280, 279, 277, 276, 275, 274, 272, 271, 270, 269, 268, 267, 265, 264, 263,
262, 261, 260, 259, 258, 257, 256, 255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245,
244, 243, 242, 241, 240, 239, 238, 237, 236, 235, 234, 234, 233, 232, 231, 230, 229, 228,
228, 227, 226, 225, 224, 224, 223, 222, 221, 220, 220, 219, 218, 217, 217, 216, 215, 214,
214, 213, 212, 211, 211, 210, 209, 209, 208, 207, 206, 206, 205, 204, 204, 203, 202, 202,
201, 200, 200, 199, 199, 198, 197, 197, 196, 195, 195, 194, 194, 193, 192, 192, 191, 191,
190, 189, 189, 188, 188, 187, 187, 186, 186, 185, 184, 184, 183, 183, 182, 182, 181, 181,
180, 180, 179, 179, 178, 178, 177, 177, 176, 176, 175, 175, 174, 174, 173, 173, 172, 172,
171, 171, 170, 170, 169, 169, 168, 168, 168, 167, 167, 166, 166, 165, 165, 164, 164, 164,
163, 163, 162, 162, 161, 161, 161, 160, 160, 159, 159, 159, 158, 158, 157, 157, 157, 156,
156, 155, 155, 155, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 150, 150, 150, 149,
149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143,
143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 137,
137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 133, 133, 133, 132, 132,
132, 132, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 128, 128, 128, 128, 127,
127, 127, 127, 126, 126, 126, 126, 125, 125, 125, 125, 124, 124, 124, 124, 123, 123, 123,
123, 122, 122, 122, 122 };
/******************************************************************************/
void CapturePulseStart(u16 timerCLK)
{
// P3SEL |= BIT2;
// P3DIR &= ~BIT2;
// CAPTURECTL &= ~(MC0+MC1); // <20>رն<D8B1>ʱ<EFBFBD><CAB1>
// CAPTURECCTL0 = COMPARE;
// CAPTURECCR0 = targetPulse;
//
// CAPTURECTL = CONTINUOUS + DIV_1 + timerCLK; //TIMER_CLR;
}
/******************************************************************************/
void DisableCapturePulse(void)
{
// CAPTURECTL = TIMER_CLR;
// CAPTURECCTL0 = COMPARE; // start timer A
// CAPTUREEX0 = 0;
// CAPTURECCR0 = 0;
// DISABLE_CAPTURE_INTERRUPT;
// P3SEL |= BIT2;
// P3DIR &= ~BIT2;
}
/******************************************************************************/
void CloseFloawRatePulse(void)
{
// P3SEL &= ~BIT1; // ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڵĵڶ<C4B5><DAB6><EFBFBD><EFBFBD><EFBFBD>
// P3DIR |= BIT1;
//
// // HIGH Effective: IO=LOW, PULSE OUT = HIGH;
// // LOW Effective: IO=HIGH, PULSE OUT = LOW;
// if(PulseLevel == (u16)LOW) P3OUT |= BIT1;
// else P3OUT &= ~BIT1;
//
// PULSECCTL1 |= CCIFG;
// PULSECTL = TIMER_CLR; // <20>رն<D8B1>ʱ<EFBFBD><CAB1>
// PULSECCR1 = 0;
// PULSECCR0 = 0;
// PULSECCTL1 = 0;
//
// DISABLE_PULSE_INTERRUPT;
// DISABLE_CAPTURE_INTERRUPT;
// isPulseUpdaed = 1;
//
// CAPTURECTL = TIMER_CLR;
// CAPTURECCTL0 = COMPARE; // start timer A
// CAPTUREEX0 = 0;
// CAPTURECCR0 = 0;
//
// DMADisableInterrupt(2);
// DMADisableAndStop(2);
HWState.PulseOperate = 0;
}
/******************************************************************************/
void CompareLossCount(void)
{
// u16 countTemp;
//
//
// systemAlarm.Bit.PulseAlarm = 1;
// // compute lose pulse
// countTemp = CAPTURETAR;
// targetPulse = CAPTURECCR0;
//
// CAPTURECTL |= TIMER_CLR;
// if(countTemp >= (targetPulse >> 1))
// {
// targetPulse -= countTemp;
// if(targetPulse > 50) targetPulse = 50;
// }
// else if(targetPulse == 0)
// {
// isPulseUpdaed = 1;
// }
// else
// {
// targetPulse = 0;
// isPulseUpdaed = 1;
// }
}
/******************************************************************************/
void ReadyForCalibrationPulseOutput(void)
{
u16 countTemp;
// <20><><EFBFBD><EFBFBD><EFBFBD>ѷ<EFBFBD><D1B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(HWState.PulseOperate) {
// countTemp = CAPTURETAR;
// targetPulse = (u16)CAPTURECCR0;
// targetPulse -= countTemp;
// CAPTURECTL |= TIMER_CLR;
}
else targetPulse = 0;
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
targetPulse += (s16)totalPulse;
if(targetPulse <= 0) {
CloseFloawRatePulse();
return;
}
// <20><><EFBFBD>㶨ʱ<E3B6A8><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
totalPulse = (u16)targetPulse;
totalPulse *= PulseOutGain[samplingInterval];
totalPulse >>= 2;
if(totalPulse >= MaxPulseOutput[RESP_1000MS]) totalPulse = MaxPulseOutput[RESP_1000MS];
else if(totalPulse == 0) totalPulse = 1;
//---------------------------------------------------------------------------
// Table
//PulsePeriod[PCCR0] = PULSE_TABLE[totalPulse];
//---------------------------------------------------------------------------
// Compute
// if(totalPulse < 16){
// PulsePeriod[PTAEX]= TAIDEX_7;
// PulsePeriod[PCCR0] = 62500/totalPulse;
// }
// else {
// PulsePeriod[PTAEX]= TAIDEX_0;
// PulsePeriod[PCCR0] = (u16)(500000/(unsigned long int)totalPulse);
// }
// //---------------------------------------------------------------------------
// PulsePeriod[PCCR1] = PulsePeriod[PCCR0] >> 1;
// //---------------------------------------------------------------------------
// if(HWState.PulseOperate) {
// DMA2CTL &= ~(DMAREQ + DMAEN);
// DMADisableInterrupt(2);
// //DMAInit(2, DMA_CAPTURE_UPDATE, BURST_BLOCK+DMASA_INC+DMADA_INC, (u16)&PulsePeriod[PTAR], (u16)&PULSETAR, 3);
// DMAInit(2, DMA_CAPTURE_UPDATE, BURST_BLOCK+DMASA_INC+DMADA_INC, (u16)&PulsePeriod[PTAR], (u16)&PULSETAR, PT_MAX);
// countTemp = CAPTURETAR;
// if(countTemp == targetPulse) {
// CloseFloawRatePulse();
// return;
// }
//
// CAPTURECCR0 = targetPulse;
// //PULSECTL |= UP_CCR0;
// PULSECCTL0 &= ~CCIFG;
// DMA2CTL |= DMAREQ + DMAEN;
// }
// // <20>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// else{
// // HIGH Effective: IO=LOW, PULSE OUT = HIGH;
// // LOW Effective: IO=HIGH, PULSE OUT = LOW;
// if(PulseLevel == (u16)LOW) {
// CapturePulseStart(TIMER_TACLK);
// PULSECCTL1 = OUT_RESET_SET;
// }
// else {
// CapturePulseStart(TIMER_INVTACLK);
// PULSECCTL1 = OUT_SET_RESET;
// }
//
// PulsePeriod[PTAR] = 0;
// PulsePeriod[PCCR2] = 0;
// PulsePeriod[PCCR3] = 0;
// PulsePeriod[PCCR4] = 0;
// PulsePeriod[PCCR5] = 0;
// PulsePeriod[PCCR6] = 0;
// PulsePeriod[PTAIV] = 0;
//
// PULSECTL = TIMER_CLR;
// PULSECCR0 = PulsePeriod[PCCR0];
// PULSECCR1 = PulsePeriod[PCCR1];
//
// PULSEEX0 = PulsePeriod[PTAEX]; // TAIDEX_7;
// P3SEL |= BIT1;
// P3DIR |= BIT1;
// PULSECTL = UP_CCR0 + DIV_8 + TIMER_SMCLK + TIMER_CLR; // for SMCLK = 4MHz
// }
HWState.PulseOperate = 1;
}
//******************************************************************************
void ReadyForUserPulseOutput(void)
{
//select timer clock
// for flowRate output pulse
// stop pulse output capture timer
// for 32768Hz
if(totalPulse == 0)
{
CloseFloawRatePulse();
return;
}
//---------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嶨ʱֵ
// targetPulse = (u16)totalPulse;
// totalPulse = (u16)targetPulse;
// totalPulse *= PulseOutGain[samplingInterval];
// totalPulse >>= 2;
// if(totalPulse >= MaxPulseOutput[RESP_1000MS]) totalPulse = MaxPulseOutput[RESP_1000MS];
// else if(totalPulse == 0) totalPulse = 1;
// //---------------------------------------------------------------------------
// if(totalPulse < 32) PULSECCR0 = UserLowPulsePeriod[totalPulse >> 2];
// else
// {
// totalPulse >>= 5;
// if(totalPulse > 32) totalPulse = 32;
// PULSECCR0 = UserHighPulsePeriod[totalPulse];
// }
//
// CAPTURECTL |= TIMER_CLR;
// PULSECTL |= TIMER_CLR;
// P3SEL |= BIT1;
// P3DIR |= BIT1;
// PULSECCR1 = PULSECCR0 >> 1;
//
// // HIGH Effective: IO=LOW, PULSE OUT = HIGH;
// // LOW Effective: IO=HIGH, PULSE OUT = LOW;
// if(PulseLevel == (u16)LOW)
// {
// PULSECCTL1 = OUT_RESET_SET;
// CapturePulseStart(TIMER_TACLK);
// }
// else
// {
// PULSECCTL1 = OUT_SET_RESET;
// CapturePulseStart(TIMER_INVTACLK);
// }
//
// // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>ر<EFBFBD>
// PulsePeriod[0] = (u16)TIMER_CLR;
// CAPTURECCTL0 &= ~CCIFG;
// DMADisableInterrupt(2);
// DMAInit(2, DMA_CAPTURE_CLOSE, SINGLE_TRAN+DMASA_UNCHANGED+DMADA_UNCHANGED, (u16)&PulsePeriod, (u16)&PULSECTL, 1);
// DMA2CTL |= DMAREQ + DMAEN;
//
// PULSEEX0 = 0;
// PULSECTL = UP_CCR0 + DIV_1 + TIMER_ACLK + TIMER_CLR;
HWState.PulseOperate = 0;
}
/******************************************************************************/
//set up flowRate PULSE OUTPUT
void UpdateAccPulse(void)
{
if(currentMode.Bit.CalibMode) ReadyForCalibrationPulseOutput();
else
{
pulseCounter += (u32)totalPulse;
//if(factoryUnitPerPulse <= CALIB_PULSE_DEFAULT) ReadyForCalibrationPulseOutput();
//else ReadyForUserPulseOutput();
}
totalPulse = 0;
targetPulse = 0;
}
/******************************************************************************/
void PulseParameterInit(void)
{
// for pulse output unit
ReadMultiByteFromEEPROM(PULSE_UNIT, tempL.Byte, PULSE_UNIT_WIDTH, PARA_EEPROM);
if(tempL.Byte[PULSE_UNIT_CRC] != CRC8(tempL.Byte, PULSE_UNIT_CRC)) factoryUnitPerPulse = PULSE_UNIT_DEFAULT;
else factoryUnitPerPulse = tempL.Word[0];
ReadMultiByteFromEEPROM(CALIB_PULSE, tempL.Byte, CALIB_PULSE_WIDTH, PARA_EEPROM);
if(tempL.Byte[CALIB_PULSE_CRC] != CRC8(tempL.Byte, CALIB_PULSE_CRC)) calibUnitPerPulse = CALIB_PULSE_DEFAULT;
else calibUnitPerPulse = tempL.Word[0];
// for pulse output cunter
// ReadMultiByteFromEEPROM(PULSE_COUNTER, tempL.Byte, PULSE_COUNTER_WIDTH, PARA_EEPROM);
// if(tempL.Byte[PULSE_COUNTER_CRC] != CRC8(tempL.Byte, PULSE_COUNTER_CRC)) pulseCounter = 0;
// else pulseCounter = tempL.Word[0];
ReadMultiByteFromEEPROM(PULSE_LEVEL, tempL.Byte, PULSE_LEVEL_WIDTH, PARA_EEPROM);
if(tempL.Byte[PULSE_LEVEL_CRC] != CRC8(tempL.Byte, PULSE_LEVEL_CRC)) PulseLevel = (u16)PULSE_LEVEL_DEFAULT;
else PulseLevel = (u16)tempL.Byte[0];
// HIGH Effective: IO=LOW, PULSE OUT = HIGH;
// LOW Effective: IO=HIGH, PULSE OUT = LOW;
DisableCapturePulse();
CloseFloawRatePulse();
}
/******************************************************************************/
u32 InitPulseUnit(s16 unitPulse)
{
switch(unitPulse)
{
//case PULSE_0_1ML: return PULSE_0_1ML_VAL;
case PULSE_1ML: return PULSE_1ML_VAL;
case PULSE_10ML: return PULSE_10ML_VAL;
case PULSE_100ML: return PULSE_100ML_VAL;
case PULSE_1L: return PULSE_1L_VAL;
case PULSE_10L: return PULSE_10L_VAL;
case PULSE_100L: return PULSE_100L_VAL;
case PULSE_1000L: return PULSE_1000L_VAL;
//case PULSE_10000L: return PULSE_10000L_VAL;
default:
return InitPulseUnit(PULSE_UNIT_DEFAULT);
}
}
#endif

36
user/Interface/Pulse.h Executable file
View File

@@ -0,0 +1,36 @@
#ifndef __Pulse_h__
#define __Pulse_h__
//******************************************************************************
//#define PULSE_UNIT_MAX 10000
#define MAX_TIMER_PULSE 1000//500
#define PULSE_UPDATE_TIME 7372 // 450ms //6553 (400ms) // acc pulse update time: 400ms, 16384
//******************************************************************************
extern u16 PulsePeriod[];
extern s16 targetPulse;
extern u32 pulseCounter, unitPerPulse;
extern u16 isPulseUpdaed;
extern s16 calibUnitPerPulse;
//extern const u16 MaxPulseOutput[];
extern const u16 PULSE_TABLE[];
//******************************************************************************
void PulseParameterInit(void);
void CapturePulseStart(u16 timerCLK);
void DisableCapturePulse(void);
void CloseFloawRatePulse(void);
void CompareLossCount(void);
void ReadyForCalibrationPulseOutput(void);
//__interrupt void PulseUpdate_isr(void);
void ReadyForUserPulseOutput(void);
void DisablePulseTimerInterrupt(void);
//__interrupt void Pulse_isr(void);
//__interrupt void ClosePulse_isr(void);
//__interrupt void CloseCapture_isr(void);
void UpdateAccPulse(void);
u16 ReadPulseUnitByInternalModbus(void);
u16 WritePulseUnitByInternalModbus(void);
u32 InitPulseUnit(s16 unitPulse);
#endif

56
user/Interface/PulseDefine.h Executable file
View File

@@ -0,0 +1,56 @@
/****************************************************************************
** pulse.h
**
** Copyright (c) Siargo Ltd. 2020
** All Rights Reserved.
**
** BY HYY
**
** pulse.c<>ĺ궨<C4BA><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**
**
** <20>ļ<EFBFBD><C4BC><EFBFBD>ʷ
** 2020-04-27 <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
*****************************************************************************/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __PulseDefine_H__
#define __PulseDefine_H__
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
/* <20><EFBFBD><EAB6A8> ----------------------------------------------------------------*/
#define PULSE_0_1ML -4
#define PULSE_1ML -3
#define PULSE_10ML -2
#define PULSE_100ML -1
#define PULSE_1L 0
#define PULSE_10L 1
#define PULSE_100L 2
#define PULSE_1000L 3
#define PULSE_10000L 4
#define PULSE_1ML_VAL 1
#define PULSE_10ML_VAL 10
#define PULSE_100ML_VAL 100
#define PULSE_1L_VAL 1000
#define PULSE_10L_VAL 10000
#define PULSE_100L_VAL 100000
#define PULSE_1000L_VAL 1000000
#ifdef __cplusplus
}
#endif
#endif /*__ pulse_H */
/**
* @}
*/
/**
* @}
*/
/************************ Copyright (c) Siargo Ltd. 2020 *****END OF FILE****/

1306
user/Interface/StdKeyEdit 0810.c Executable file

File diff suppressed because it is too large Load Diff

158
user/Interface/StdKeyEdit 0810.h Executable file
View File

@@ -0,0 +1,158 @@
//##############################################################################
#if(ENABLE_KEY_FUNCTION)
//##############################################################################
#ifndef __StdKeyEdit_h__
#define __StdKeyEdit_h__
//low power keyboard define
#define KEYBOARD_IDLE_TIME_BASIC (4095) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 1S
#define KEYBOARD_IDLE_TIME (60)
#define LEVEL_1_PASSWORD 1111
#define LEVEL_2_PASSWORD 2222
#define LEVEL_3_PASSWORD 520
#define LEVEL_4_PASSWORD 4444
#define KEY_INIT_PASSWORD 0
#define KEY_SET_METERFACTOR 1
#define KEY_SET_COEFFIC 2
#define KEY_CALIB_OFFSETC 3
#define KEY_SET_PULSE 4
#define KEY_SET_ADDR 5
#define KEY_SET_DECIMAL_POINT 6
#define KEY_SET_RETURN 7
//******************************************************************************
// KEY FUNCTION DEFINE
#define STD_INIT_PASSWORD 0
//<2F>ӿ<EFBFBD><D3BF>ࣨF1-F10<31><30>
#define STD_KEY_PRTCL 1 // F1 ͨѶЭ<D1B6><D0AD> PRTCL
#define STD_KEY_ADDR 2 // F2 <09>ӻ<EFBFBD><D3BB><EFBFBD>ַ ADDR
#define STD_KEY_BPS 3 // F3 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BPS
// <20><><EFBFBD><EFBFBD><EFBFBD>ࣨF11-F30<33><30>
#define STD_KEY_OFFST 11 // F11 У׼<D0A3><D7BC><EFBFBD><EFBFBD> OFFST
#define STD_KEY_GCF 12 // F12 GCF GCF
#define STD_KEY_FACTR 13 // F13 <09>DZ<EFBFBD>ϵ<EFBFBD><CFB5> FACTR
#define STD_KEY_CORR 14 // F14 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5> CORR
#define STD_KEY_FS 15 // F15 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FS
#define STD_KEY_RESPS 16 // F16 <09><>Ӧʱ<D3A6><CAB1> RESPS
#define STD_KEY_CUT_F 28 // F28 С<><D0A1><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD> CUT-F
#define STD_KEY_DIAM 29 // F29 <09>ܾ<EFBFBD><DCBE><EFBFBD><EFBFBD><EFBFBD> DIAM
// <20><>ʾ<EFBFBD>ࣨF31-F40<34><30>
#define STD_KEY_UNT_A 31 // F31 <09>ۻ<EFBFBD><DBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ UNT-A
#define STD_KEY_UNT_F 32 // F32 ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ UNT-F
#define STD_KEY_UNT_P 33 // F33 ѹ<><D1B9><EFBFBD><EFBFBD>λ UNT-P
#define STD_KEY_DISP 39 // F39 <09><>ʾģʽ DISP
// ģ<><C4A3><EFBFBD>ӿ<EFBFBD><D3BF>ࣨF31-F40<34><30>
#define STD_KEY_PULSE 41 // F41 <09><><EFBFBD><EFBFBD><E5B5B1> PULSE
// <20><><EFBFBD><EFBFBD><EFBFBD>ࣨF41-F50<35><30>
#define STD_KEY_ALM_H 51 // F51 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ALM-H
#define STD_KEY_ALM_L 52 // F52 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ALM-L
#define STD_KEY_ALM_A 53 // F53 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ALM-A
#define STD_KEY_ALM_T 54 // F54 ʱ<><EFBFBD><E4B1A8> ALM-T
// <20><><EFBFBD><EFBFBD><EFBFBD>ࣨF71-F90<39><30>
#define STD_KEY_LORA_ADDR 71 // F71 LORA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ LR-ID
#define STD_KEY_LORA_ID 72 // F72 LORA<52>ϼ<EFBFBD><CFBC><EFBFBD>ַ NETID
#define STD_KEY_LORA_CHAN 73 // F73 LORA<52>ŵ<EFBFBD> LR_CH
// <20><><EFBFBD><EFBFBD><EFBFBD>ࣨF91-F98<39><38>
#define STD_KEY_PASS 91 // F91 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PASS
#define STD_KEY_CLR_A 92 // F92 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CLR-A
#define STD_KEY_CLR_T 93 // F93 <09><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> CLR-T
#define STD_KEY_RESET_DCOEF 94 // F94 <09>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RS2ND
// <20>˳<EFBFBD>
#define STD_KEY_QUIT 99 // F99 <09>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD> QUIT
#define STD_RETURN 100 // <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>̲<EFBFBD><CCB2><EFBFBD>
//******************************************************************************
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FUN_PROMPT1 0
#define FUN_PROMPT2 1
#define FUN_PROMPT3 2
#define FUN_PROMPT4 3
#define FUN_PROMPT5 4
#define FUN_DECIMAL 5 //
#define FUN_CODE_1 10
#define FUN_CODE_2 11
#define FUN_CODE_3 12
#define FUN_CODE_4 13
//******************************************************************************
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4B6A8>
#define KEY_RESPONSE_TIME 1600
#define KEY_HOLD_TIME 32768
#define KEY_FREE_TIME 1600
//******************************************************************************
#define DIS_PARA_INT 0
#define DISPLAY_MENU 1
#define FLASH_BIT 2
//******************************************************************************
#define NEXT 0
#define SAVE 1
#define NO 2
//******************************************************************************
extern unsigned int setKeyType, setIndex;
extern unsigned int keyDealFlag;
extern bool isKeyPressed;
extern unsigned int keyFlag, PassWord, totalTime, keyValue, keyBuff, menuIndex, modifyBit, keyFlashTime, timerTar;
extern unsigned long int setKeyBuffer;
extern unsigned long int temp_dcoefNode[];
extern unsigned int temp_dcoefNum, temp_dcoefVal[];
//******************************************************************************
void DisplayForKeyOperation(void);
__interrupt void KeyInterrupt_isr(void);
void KeyReset(void);
void DisableKeyInterrupt(void);
void EnableKeyInterrupt(void);
void KeyEditInit(void);
void FlashBitForSetup(void);
void ComputeTime(void);
void ReadKeyValue(void);
unsigned long int ComputeSumOfFiveDigits(unsigned int modifyFirstBit, unsigned int modifyLastBit);
void JudgeKeySetMax(unsigned int setBit, unsigned int endBit);
void JudgeKeySetMin(unsigned int setBit, unsigned int endBit);
void InitOfSettingArea(unsigned long int setValue, unsigned int startBit, unsigned int setLen);
void InitOfSettingPrompt(const unsigned char *PromptF, const unsigned char *Prompt);
void ReturnKeySetup(void);
void SettingKeyPrompt(const unsigned char *Prompt);
void JudgeSaveAndReturn(unsigned long int judgeValue, unsigned int setGain);
bool KeyValueOperation(unsigned int modifyFirstBit, unsigned int modifyLastBit);
bool KeyValueOperateForPrompt(const unsigned char *Prompt);
void DisplaySetIndex(void);
unsigned int SaveModifyValue(void);
void ExitKeyOperation(void);
bool KeyPasswordInput(void);
void JudgePasswordInput(unsigned int activePassword);
bool ExitCurrentSetup(void);
void ModifyMeterFactor(void);
void ModifyDcoefNum(void);
void SelectDcoefNode(void);
void ModifyDcoefNode(void);
void ModifyDcoefVal(void);
void ModifyDcoefNodeAndValue(void);
void ModifyMaxFlowRate(void);
void ModifySamplingInterval(void);
void ResetDcoefNodeAndValue(void);
void CalibrateOffsetC(void);
void ModifyWorkDiameter(void);
void ModifyLPFactoryLiterPerPulse(void);
void ModifyModBusAdr(void);
void ModifyUartDecimalPoint(void);
void KeyInputProcessing(void);
#endif
//##############################################################################
#endif
//##############################################################################

1743
user/Interface/StdKeyEdit.c Executable file

File diff suppressed because it is too large Load Diff

57
user/Interface/StdKeyEdit.h Executable file
View File

@@ -0,0 +1,57 @@
#ifndef __StdKeyEdit_h__
#define __StdKeyEdit_h__
//##############################################################################
#if(ENABLE_KEY_FUNCTION)
//##############################################################################
#define ENABLE_LED_DISPLAY 0
//******************************************************************************
extern unsigned int setKeyType, setIndex;
extern unsigned int keyDealFlag;
extern unsigned int keyFlag, totalTime, keyValue, keyBuff, menuIndex, modifyBit, keyFlashTime, timerTar;
extern unsigned long int setKeyBuffer, PassWord;
extern unsigned long int temp_dcoefNode[];
extern unsigned int temp_dcoefNum, temp_dcoefVal[];
//******************************************************************************
void DisplayForKeyOperation(void);
__interrupt void KeyInterrupt_isr(void);
void KeyReturn(void);
void KeyReset(void);
void DisableKeyInterrupt(void);
void EnableKeyInterrupt(void);
void KeyEditInit(void);
void FlashBitForSetup(void);
bool ReadFunKey(void);
bool ReadDecKey(void);
bool ReadIncKey(void);
void ReadKeyValue(void);
unsigned long int ComputeSumOfFiveDigits(unsigned int modifyFirstBit, unsigned int modifyLastBit);
void JudgeKeySetMax(unsigned int setBit, unsigned int endBit);
void JudgeKeySetMin(unsigned int setBit, unsigned int endBit);
void SettingKeyPrompt(const unsigned char*Prompt);
void InitOfSettingArea(unsigned long int setValue, unsigned int startBit, unsigned int setLen) ;
void InitOfSettingPrompt(const unsigned char*PromptF, const unsigned char*Prompt) ;
void ReturnKeySetup(void);
bool KeyValueOperation(unsigned int modifyFirstBit, unsigned int modifyLastBit);
bool KeyValueOperateForPrompt(const unsigned char *Prompt, unsigned int selectMax, unsigned int selectMin);
bool KeyValueOperateForArray(unsigned char *Prompt, unsigned int selectMax);
void DisplaySetIndex(void);
unsigned int SaveModifyValue(void);
void ExitKeyOperation(void);
void JudgeSaveAndReturn(unsigned long int judgeValue, unsigned int setGain);;
bool KeyPasswordInput(void);
void JudgePasswordInput(unsigned long int activePassword);
bool ExitCurrentSetup(void);
bool ParameterSetup(void);
void SelectDcoefNode(void);
void ModifyDcoefNode(void);
void ModifyDcoefVal(void);
void ModifyDcoefNodeAndValue(void);
void KeyInputProcessing(void);
//##############################################################################
#endif
//##############################################################################
#endif

138
user/Interface/StdKeyEditDefine.h Executable file
View File

@@ -0,0 +1,138 @@
#ifndef __StdKeyEditDefine_h__
#define __StdKeyEditDefine_h__
//low power keyboard define
#define KEYBOARD_IDLE_TIME_BASIC (4095) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 1S
#define KEYBOARD_IDLE_TIME (60)
#define LEVEL_1_PASSWORD 85139
#define LEVEL_2_PASSWORD 22222 //22222
#define LEVEL_3_PASSWORD 00520
#define LEVEL_4_PASSWORD 44444 //44444
#define KEY_INIT_PASSWORD 0
#define KEY_SET_METERFACTOR 1
#define KEY_SET_COEFFIC 2
#define KEY_CALIB_OFFSETC 3
#define KEY_SET_PULSE 4
#define KEY_SET_ADDR 5
#define KEY_SET_DECIMAL_POINT 6
#define KEY_SET_RETURN 7
//******************************************************************************
// KEY FUNCTION DEFINE
#define STD_INIT_PASSWORD 0
//<2F>ӿ<EFBFBD><D3BF>ࣨF1-F10<31><30>
#define STD_KEY_PRTCL 1 // F1 ͨѶЭ<D1B6><D0AD> PRTCL
#define STD_KEY_ADDR 2 // F2 <09>ӻ<EFBFBD><D3BB><EFBFBD>ַ ADDR
#define STD_KEY_BPS 3 // F3 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BPS
// <20><><EFBFBD><EFBFBD><EFBFBD>ࣨF11-F30<33><30>
#define STD_KEY_OFFST 11 // F11 У׼<D0A3><D7BC><EFBFBD><EFBFBD> OFFST
#define STD_KEY_GCF 12 // F12 GCF GCF
#define STD_KEY_FACTR 13 // F13 <09>DZ<EFBFBD>ϵ<EFBFBD><CFB5> FACTR
#define STD_KEY_CORR 14 // F14 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5> CORR
#define STD_KEY_FS 15 // F15 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FS
#define STD_KEY_RESPS 16 // F16 <09><>Ӧʱ<D3A6><CAB1> RESPS
#define STD_KEY_CUT_F 28 // F28 С<><D0A1><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD> CUT-F
#define STD_KEY_DIAM 29 // F29 <09>ܾ<EFBFBD><DCBE><EFBFBD><EFBFBD><EFBFBD> DIAM
// <20><>ʾ<EFBFBD>ࣨF31-F40<34><30>
#define STD_KEY_UNT_A 31 // F31 <09>ۻ<EFBFBD><DBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ UNT-A
#define STD_KEY_UNT_F 32 // F32 ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ UNT-F
#define STD_KEY_UNT_P 33 // F33 ѹ<><D1B9><EFBFBD><EFBFBD>λ UNT-P
#define STD_KEY_DISP 38 // F38 <09><>ʾģʽ DISP
#define STD_KEY_DIS_LANGUAGE 39 // F39 <09><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ģʽ LANG
// ģ<><C4A3><EFBFBD>ӿ<EFBFBD><D3BF>ࣨF31-F40<34><30>
#define STD_KEY_PULSE 41 // F41 <09><><EFBFBD><EFBFBD><E5B5B1> PULSE
// <20><><EFBFBD><EFBFBD><EFBFBD>ࣨF41-F50<35><30>
#define STD_KEY_ALM_H 51 // F51 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ALM-H
#define STD_KEY_ALM_L 52 // F52 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ALM-L
#define STD_KEY_ALM_A 53 // F53 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ALM-A
#define STD_KEY_ALM_T 54 // F54 ʱ<><EFBFBD><E4B1A8> ALM-T
// <20><><EFBFBD><EFBFBD><EFBFBD>ࣨF71-F90<39><30>
#define STD_KEY_LORA_ADDR 71 // F71 LORA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ LR-ID
#define STD_KEY_LORA_ID 72 // F72 LORA<52>ϼ<EFBFBD><CFBC><EFBFBD>ַ NETID
#define STD_KEY_LORA_CHAN 73 // F73 LORA<52>ŵ<EFBFBD> LR_CH
// <20><><EFBFBD><EFBFBD><EFBFBD>ࣨF91-F98<39><38>
#define STD_KEY_PASS 91 // F91 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PASS
#define STD_KEY_CLR_A 92 // F92 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CLR-A
#define STD_KEY_CLR_T 93 // F93 <09><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> CLR-T
#define STD_KEY_RESET_DCOEF 94 // F94 <09>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RS2ND
// <20>˳<EFBFBD>
#define STD_KEY_QUIT 99 // F99 <09>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD> QUIT
#define STD_RETURN 100 // <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>̲<EFBFBD><CCB2><EFBFBD>
//******************************************************************************
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MAX_SET_BIT 6
#define LIST_PROMPT_BASE 9
#define LIST_VALUE_BASE 9
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FUN_PROMPT1 0
#define FUN_PROMPT2 1
#define FUN_PROMPT3 2
#define FUN_PROMPT4 3
#define FUN_PROMPT5 4
#define FUN_DECIMAL 5 //
#define FUN_CODE_1 10
#define FUN_CODE_2 11
#define FUN_CODE_3 12
#define FUN_CODE_4 13
//******************************************************************************
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4B6A8>
#define KEY_RESPONSE_TIME 1600 //300
#define FLASH_500mS 3000 // for 125ms sampling interrupt //3000
#define LONG_KEY_TIME (FLASH_500mS*5) //(FLASH_1S*3)
#define COMM_KEY_TIME (FLASH_500mS*9) //(FLASH_1S*3)
#define KEY_MAX_TIME 60000
#define KEY_HOLD_TIME 32768
#define KEY_FREE_TIME 1600
//******************************************************************************
#define PARM_LIST_SEL 0x8000
#define NO_SAVE 0x4000
#define NEED_PASSWORD 0x2000
#define NEED_DOT 0x1000
#define OPERATION_CLASS 0x0800
#define FOUR_BIT 4
//******************************************************************************
#define DIS_SET_OFF 0
#define DIS_PARA_INT 1
#define DISPLAY_MENU 2
#define FLASH_BIT 3
#define NO_FLASH_BIT 4
//******************************************************************************
#define NEXT 2
#define SAVE 1
#define NO 0
#define YES 1
//******************************************************************************
#define KEY_NOT_RESPONDING 0
#define KEY_RESPONSE_INPUT 1
#define KEY_IN_SETUP 2
//******************************************************************************
// for key setup pulse unit
#define PULSE_0_1ML_INDEX 0
#define PULSE_1ML_INDEX 1
#define PULSE_10ML_INDEX 2
#define PULSE_100ML_INDEX 3
#define PULSE_1L_INDEX 4
#define PULSE_10L_INDEX 5
#define PULSE_100L_INDEX 6
#define PULSE_1000L_INDEX 7
#define PULSE_MIN_UNIT PULSE_0_1ML
#endif