⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyproc.c

📁 一款电力行业使用的温湿度控制器源代码 湿度传感器采用HF3223 温度采用DS18B20 单片机采用mega8 编程采用winavr2007
💻 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 + -