📄 keyproc.c
字号:
#define _KEY_MENU_TSK_C 1
#include "inc/config.h"
extern u08 SystemStatus; //system state ,global variables
/***************************************************************/
static BOOL fMenuFlash=FALSE;//indicate the editting state
static void ( * Click_exe[] )(void) PROGMEM =
{
key_ch_click,
key_add_click,
key_dec_click,
key_set_click
};
static prog_uint16_t LongPreskey_addst_exe[4] =
{
(prog_uint16_t)key_do_nothing,
(prog_uint16_t)key_do_nothing,
(prog_uint16_t)key_do_nothing,
(prog_uint16_t)key_set_long_press_first
};
static prog_uint16_t LongPress_exe[4] =
{
(prog_uint16_t)key_do_nothing,
(prog_uint16_t)key_add_long_press,
(prog_uint16_t)key_dec_long_press,
(prog_uint16_t)key_set_long_press
};
void KeyProcess(void)
{
if ( (key.type==PRESS_ONCE) && key.val<=4 )// ′óóú4?aòì3£?μ
{
(*(void (*)()) pgm_read_word(Click_exe+key.val-1))();
}
else if( (key.type==PRESS_LONG_1ST) && key.val<=4 )// ′óóú4?aòì3£?μ
{
(* (void (*)())pgm_read_word(LongPreskey_addst_exe+key.val-1))();
}
else if( (key.type==PRESS_LONG) && key.val<=4 ) // ′óóú4?aòì3£?μ
{
(* (void (*)())pgm_read_word(LongPress_exe+key.val-1))();
}
key.val=0;
key.type=NON;
key.fkeydone=YES;
}
/****************************************************/
/*--based on the KeyValue ,implement different event*/
/*--only support the single click event temperally. */
/****************************************************/
extern BOOL fIsSampling;
//////////////////////////
void key_ch_click(void)
{
}
void key_add_click(void)
{
if (SystemStatus!=RUN )
{
RstSoftTimer(_60S);
MenuValDeal (SystemStatus,true,SYS_ch);//true :add false:decrease
MenuIndexDisp( SystemStatus );
MenuValDisp (SystemStatus,SYS_ch) ; //
}
}
void key_dec_click(void)
{
if (SystemStatus!=RUN )
{
RstSoftTimer(3);
MenuValDeal (SystemStatus,false,SYS_ch);//true :add false:decrease
MenuIndexDisp( SystemStatus );
MenuValDisp (SystemStatus,SYS_ch) ; //
}
}
void key_set_click(void)
{
if(SystemStatus!=RUN)
{
RstSoftTimer(_60S);
SystemStatus++;
if( SystemStatus>=EDIT14 )
{
SystemStatus=EDIT11;
}
MenuIndexDisp( SystemStatus );
MenuValDisp ( SystemStatus,SYS_ch ) ;
}
else//as a manual key
{
if( SystemMode== AUTO_TH)
{
SystemMode = MANU_TH;
FlashDigOn(1);
FlashDigOn(2);
FlashDigOn(3);
FlashDigOn(4);
FlashDigOn(5);
FlashDigOn(6);
fan (ON);
heat(ON);
DisplayHumidityAlarm(ON);
DisplayTemperatureAlarm(ON);
}
else
{
SystemMode = AUTO_TH;
FlashDigRst();
///////
if(AlrmStatusT==NO_ALARM)
{
DisplayTemperatureAlarm(OFF);
}
else
{
DisplayTemperatureAlarm(ON);
}
///////
if(AlrmStatusH!=NO_ALARM)
{
DisplayHumidityAlarm(ON);
}
else
{
DisplayHumidityAlarm(OFF);
}
}
}
}
//////////////////////////////
void key_do_nothing(void)
{
}
void key_set_long_press_first(void)
{
RstSoftTimer(_60S);
FlashDigRst();
if(SystemStatus==RUN)
{
SystemStatus=EDIT11;
MenuIndexDisp( SystemStatus);
MenuValDisp ( SystemStatus,SYS_ch);
}
else
{
SynE2promFromRam();
RelayRst ();
FlashDigRst();
RmvDot(5);
SystemStatus=RUN;
fMenuFlash = FALSE;
}
}
void key_dec_long_press(void)
{
u08 i;
for( i = 0;i < 10;i++ )
{
key_dec_click();
}
}
void key_set_long_press(void)
{
RstSoftTimer(_60S); //avoid escaping the edit mode
}
void key_add_long_press(void)
{
u08 i;
for(i=0;i<10;i++)
{
key_add_click();
}
}
BOOL JudgeTemperature( void )
//////////////////////////////////////////////////////
{
u08 ret ;
ret = true;
if( TH > TL )
{
if( TL < -400 )
{
ret = false;
}
if( TH > 1250 )
{
ret = false;
}
}
else
{
ret = false;
}
return ret;
}
//////////////////////////////////////////////////////
BOOL JudgeHumidity (void)
{
if( HH<=100 &&HH>=10)
{
return true;
}
else
{
return false;
}
}
/////////////////////////////////////////
void AddTempSetVal( int16 * setval )
{
if( *setval<1250 && *setval>=-400 )//
{
if( *setval<1000 &&*setval>=-100) //-10-99.9 Celsius degree
{
*setval+=1;
if(!JudgeTemperature()) *setval-=1; //if invalid,cancel operation
}
else
{
*setval+=10;
if(!JudgeTemperature()) *setval-=10; //if invalid,cancel operation
}
}
}
void AddHumSetVal(unsigned char * setval) //DT??êa?èset?μ
{
if( *setval<=99 ) //0-98.can add 1;
{
(*setval)++;
}
}
void AddRS485AdrSetVal(u08 * p) //DT??485μ??·
{
(*p)++;
// if(*p==0) *p=255;
}
void AddBaudRate(void)
{
if( 192 == BAUDRATE )
{
BAUDRATE = 96 ;
}
else if(96 == BAUDRATE )
{
BAUDRATE = 48;
}
else
{
BAUDRATE = 192;
}
}
void AddAutoSwitch(void)
{
if( ON == AUTOSWITCH )
AUTOSWITCH = OFF ;
else
AUTOSWITCH = ON;
}
void DecTempSetVal(int16 * setval)
{
if(*setval > -400 && *setval<=1250 )
{
if( *setval<=1000 &&*setval>-100) //-9.9-99.9 Celsius degree
{
*setval-=1;
if(!JudgeTemperature()) *setval+=1; //if invalid,cancel operation
}
else //others
{
*setval-=10;
if(!JudgeTemperature()) *setval+=10; //if invalid,cancel operation
}
}
}
void DecHumSetVal(u08 * setval)
{
if( *setval > 10 )// && *setval <= 99 )
{
( *setval )--;
}
}
void DecRS485AdrSetVal(u08 * p)
{
(*p)--;
// if(*p==0) *p=1;
}
void MenuIndexDisp (uint8 editname)
{
FlashDigOn(1);
FlashDigOn(2);
FlashDigOn(3);
if( EDIT11 == editname )
{
LedData[1]=0x00;
LedData[2]=SEGF+SEGG+SEGE+SEGB+SEGC;
LedData[3]=SEGF+SEGE;
}
if( EDIT12 == editname )
{
LedData[1]=0;
LedData[2]=SEGF+SEGE+SEGD;
LedData[3]=SEGD+SEGE+SEGG+SEGC;
}
if( EDIT13 == editname )
{
LedData[1]=SEGF+SEGG+SEGE+SEGB+SEGC;
LedData[2]=SEGF+SEGE; //show "Adr"
LedData[3]=SEGA+SEGB+SEGE+SEGF+SEGG;
}
}
void MenuValDeal (uint8 editname ,BOOL IsAdding,u08 whichCH)
{
if(IsAdding==true) //
{
if( EDIT11 == editname ) AddTempSetVal( &TH );
if( EDIT12 == editname ) AddTempSetVal( &TL );
if( EDIT13 == editname ) AddHumSetVal( &HH );
}
/////////////////////////////////////////////////////////////////////
else
if (IsAdding==false)
{
if( EDIT11 == editname ) DecTempSetVal( &TH );
if( EDIT12 == editname ) DecTempSetVal( &TL );
if( EDIT13 == editname ) DecHumSetVal( &HH );
} //end else
}
void MenuValDisp (uint8 editname,u08 whichCH)
{
if( EDIT11 == editname ) DisplayTemperature(TH );
if( EDIT12 == editname ) DisplayTemperature(TL );
if( EDIT13 == editname )
{
RmvDot(5);
DisplayHumidity (HH );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -