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

📄 keytask.c

📁 cs5460a做功率表用 cs5460a做功率表用 cs5460a做功率表
💻 C
字号:
/********************************************
公司名称:
文 件 名:
版 本 号:
程序设计:
说    明:
完成日期:
修改日期:
功能摘要:
**********************************************/        

#define   _KeyTaskv20
#include  "includes.h"
//---------------------------------------------------
#define   Menu_set				0x10

const char *first_menu[] PROGMEM = {"  pt ","  ct ","h-alr","l-alr"," baud"," addr"," alr "}; 

//-----------------------------------------------------            
                                  			//0   dn   up   u+d   s   s+d   s+u 
const uint8  KeyTask[3][7] PROGMEM = {    
											{0x00,0x00,0x00,0x00,0x00,0x00,0x11},
                                  			{0x10,0x23,0x23,0x10,0x12,0x10,0x10},
                                  			{0x20,0x26,0x25,0x20,0x14,0x28,0x27}



                               				}; 
uint8  MenuID;  					//菜单项,
uint8  TaskID = 0;
uint8  fDOKEY; 


void    KeyTask_MainLoop(void);
uint16    ValAdd(uint16 ValTemp,uint8 AddCount,uint16 MaxVal);
uint16    ValDec(uint16 ValTemp,uint8 DecCount,uint16 MaxVal);
void    MenuDis(uint8 DisNum);
void    Dis_info(uint8 *LedBuf,uint8 *pLed);

//---------------------------------------
void   KeyTask_MainLoop(void)
{
   uint8   TaskTemp;       
   uint8   m;    
   
   if (KeyVal > 0x06) return;
   m = TaskID & 0xf0;
   m >>= 4;
   if (m > 3) return; 
   TaskTemp = pgm_read_byte(&KeyTask[m][KeyVal]);      
   TaskID = TaskTemp & 0xf0;             //保存次态
   
   switch (TaskTemp & 0x0f)              //按任务号查询
   {
     case 0:                          //无效键返回
      return;
      break; 
            
     case 1:
      MenuID = Menu_set;              		   //进入参数设定初始化显示
      break;
            
     case 2:                          		   //SET键一级菜单显示项递增
       fDOKEY = 1;                   		   //防止连击       
       MenuID++;
       if ((MenuID & 0x0f) == MENU_MAX) 	   //在功能参数设置状态下
	      { MenuID &= 0xf0; } 
       break;     
               
     case 3:
     		fDOKEY = 1;
     		MenuID += 0x10;						//UP、DN键菜单级数跳转     		
     	break;
     	
     case 4:
     		fDOKEY = 1;
     		MenuID -= 0x10;						 //SET键菜单级数递减
     	break;
     	
     case 5:                                  
       switch (MenuID & 0x0f)         				
       {
          case 0x00:            
            PtVal = ValAdd(PtVal,STEP,PT_MAX_VAL);                
            break;

          case 0x01:            
            CtVal = ValAdd(CtVal,STEP,CT_MAX_VAL);                
            break;         										  
			        										  

          case 0x02:
          	H_Alarm = ValAdd(H_Alarm,STEP,PT_MAX_VAL);   
          	break;

          case 0x03:
			L_Alarm = ValAdd(L_Alarm,STEP,PT_MAX_VAL);  
          	break;
          	
          case 0x04:
            fDOKEY = 1;
            BaudAndData ^= 0x10;                    
            break;
            
          case 0x05:            
            AddrVal = ValAdd(AddrVal,STEP,ADDR_MAX_VAL);                
            break;         
          
          case 0x06:
          	fDOKEY = 1;
          	AlarmSwitch ^= 0x01;
          	break;
          	
          default:
            break;
        }        
        break;                                    
            
      case 6:           
        switch (MenuID & 0x0f)        //DN键数值减一
        {
           case 0x00:
             PtVal = ValDec(PtVal,STEP,PT_MAX_VAL);                   
             break;

           case 0x01:
             CtVal = ValDec(CtVal,STEP,CT_MAX_VAL);                   
             break;

           case 0x02:
			 H_Alarm = ValDec(H_Alarm,STEP,PT_MAX_VAL);             	                 
             break;
             
           case 0x03:
			 L_Alarm = ValDec(L_Alarm,STEP,PT_MAX_VAL);
             break;
             
           case 0x04:
             fDOKEY = 1;                   
             BaudAndData ^= 0x10;                   
             break;  
             
           case 0x05:
             AddrVal = ValDec(AddrVal,STEP,ADDR_MAX_VAL);                  
             break;                 
           		 	
           case 0x06:
          	fDOKEY = 1;
          	AlarmSwitch ^= 0x01;
          	break;
          	
           default:
           break;
       }
        break;
        
    case 7:
      switch (MenuID & 0x0f)         				
        {
           case 0x00:            
            PtVal = ValAdd(PtVal,FAST_STEP,PT_MAX_VAL);                 
            break; 
			
           case 0x01:            
            CtVal = ValAdd(CtVal,FAST_STEP,CT_MAX_VAL);                 
            break;         

          case 0x02:
			H_Alarm = ValAdd(H_Alarm,FAST_STEP,PT_MAX_VAL);
          	break;
          	
          case 0x03:
			L_Alarm = ValAdd(L_Alarm,FAST_STEP,PT_MAX_VAL);   
          	break;        
            
          case 0x04:            
            AddrVal = ValAdd(AddrVal,FAST_STEP,ADDR_MAX_VAL);                
            break;         
          
          default:
          break; 
        }       
    	break;
    	
    case 8:
       switch (MenuID & 0x0f)        //DN键数值减一
         {
           case 0x00:
             PtVal = ValDec(PtVal,FAST_STEP,PT_MAX_VAL);                   
             break;

           case 0x01:
             CtVal = ValDec(CtVal,FAST_STEP,CT_MAX_VAL);                   
             break;

           case 0x02:
			 H_Alarm = ValDec(H_Alarm,FAST_STEP,PT_MAX_VAL);                       
             break;
             
           case 0x03:
			 L_Alarm = ValDec(L_Alarm,FAST_STEP,PT_MAX_VAL);
             break;          
             
           case 0x04:
             AddrVal = ValDec(AddrVal,FAST_STEP,ADDR_MAX_VAL);                  
             break;                 
           		 	
           default:
           break;
          }
    	 break;     
                            
     default:
     return;
    }         
   MenuDis(MenuID);
   fDispNow = 1;                          //立即显示
 }     
  //------------------------------------------------------
uint16    ValAdd(uint16 ValTemp,uint8 ValCount,uint16 MaxVal)
  {
     if ((ValTemp += ValCount) >= MaxVal)   //参数递增函数
	     {  ValTemp = 1; }
     return (ValTemp);
   }
 
 //---------------------------------------------------------    
uint16    ValDec(uint16 ValTemp,uint8 ValCount,uint16 MaxVal)
  {
     if (((ValTemp -= ValCount) == 0) || (ValTemp < ValCount))     //参数递减函数
        {  ValTemp = MaxVal - 1; }
     return (ValTemp);
   } 
     
 //-----------------------------------------------------------

void MenuDis(uint8 DisNum)           //菜单显示函数
{
   DispBuf[ROW_5] = HIDE;
   switch (DisNum)
   {                                                  
    case 0x00:
      	/* DoPot(&DispBuf[ROW_1],Ps);
      	 if (Ps_Neg == 1) DispBuf[ROW_5] = 0; */
      break;            
//----------------------------------------------------     
    case 0x10 ... 0x16:      	             
      Dis_info(&DispBuf[ROW_5],(char *)pgm_read_word(&first_menu[DisNum & 0x0f])); 
      break;            
			
//--------------------------------------------------------- 
    case 0x20:                      //系统菜单下的二级菜单          
        if (PtVal == 0)
		    { PtVal = 1;}
        HexToBcd(&DispBuf[ROW_1],PtVal);
        DealZero(&DispBuf[ROW_1]);
		break;

    case 0x21:                      //系统菜单下的二级菜单          
        if (CtVal == 0)
		    { CtVal = 1;}
        HexToBcd(&DispBuf[ROW_1],CtVal);
        DealZero(&DispBuf[ROW_1]);

      break;     

      case 0x22: 
	     if (H_Alarm == 0)
		    { H_Alarm = 1;}
         HexToBcd(&DispBuf[ROW_1],H_Alarm);
        DealZero(&DispBuf[ROW_1]);

      break;

      case 0x23:
	     if (L_Alarm == 0)
		    { L_Alarm = 1;}
         HexToBcd(&DispBuf[ROW_1],L_Alarm);
        DealZero(&DispBuf[ROW_1]);


      break;
      
      case 0x24:               //波特率值显示           	       
        if ((BaudAndData & 0x10) == 0x00)
		   {  Dis_info(&DispBuf[ROW_4],"4800"); } 
		else
		   { Dis_info(&DispBuf[ROW_4],"9600");  }       
        break;        
        
      case 0x25:                             
        if (AddrVal == 0) 
		   { AddrVal = 1; }
        HexToBcd(&DispBuf[ROW_1],AddrVal);
        DealZero(&DispBuf[ROW_1]);
        break;
            
      case 0x26:
      	if (AlarmSwitch & 0x01) 
           {  Dis_info(&DispBuf[ROW_4]," off"); } 
		else 
		   {  Dis_info(&DispBuf[ROW_4]," on "); }
      	break;
      	
      default:
      break;
    }
}
//---------------------------------------------------------
void   Dis_info(uint8 *LedBuf,uint8 *pLed)
{
    for (;*pLed;LedBuf--,pLed++)
      {       
         if      ((*pLed) == 0x2d)
              {  (*LedBuf) = 46; }		        

         else if ((*pLed) >= 0x30&&0x39 >= (*pLed))			 
              {  (*LedBuf) = (*pLed) - 0x30; }	


	     else if ((*pLed) >= 0x61&&0x7A >=(*pLed))
              {  (*LedBuf) = (*pLed) - 0x4d; }      
		
	     else 
		       { (*LedBuf) = 47  ;}
			   	 
    }    
}
//------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -