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

📄 menu_func.c

📁 自己花了很长时间编写的单片机开发板程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <at89x52.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <xbyte.h>
#include <lcd_code.h>
#include <ocm12864.h>
#include <iic.h>
#include <pca9555.h>
#include <18b20.H>
#include <24c32.h>
#include <menu_func.h>

typedef xdata struct  
	{
	    uchar KeyTab_MenuIndex;	         	//当前状态索引号	   
        uchar KeyTab_PressOk;           	//按下"回车"键时转向的状态索引号	  
        uchar KeyTab_PressEsc;	        	//按下"返回"键时转向的状态索引号	  
        uchar KeyTab_PressDown;    	        //按下"向下"键时转向的状态索引号	  
        uchar KeyTab_PressUp;           	//按下"向上"键时转向的状态索引号	  
     	void      ( code *CurrentOperate)();   //当前状态应该执行的功能操作
	}KeyTabStruct;
void  ( code *KeyFuncPtr)();                       //按键功能指针
//CurMenuID=本菜单ID 
//OkMenuID=子菜单层所对应的菜单ID,ID=254已经到底了		 
//EscMenuID=父菜单层所对应的菜单ID,ID=254为菜单已经到顶了			 
//DownMenuID=弟菜单层所对应的菜单ID,ID=254为菜单是独生子		   
//UpMenuID=兄菜单层所对应的菜单ID,ID=254 单是独生子			   
//CurFunction=本菜单所对应的菜单函数指针
KeyTabStruct xdata KeyTab[]=
	{
		//CurMenuID,        OkMenuID,         EscMenuID,       DownMenuID,           UpMenuID,        CurFunction
		{MENU_FACE, 	    MENU_ROOT,        254,             254,                  254,             (*DispFaceBmp)},
		{MENU_ROOT,	        MENU_VIEW,        254,             254,                  254,             (*DispMenu_Root)},
		{MENU_VIEW,	        MENU_VIEW_1,      MENU_ROOT,       MENU_OPERATION,       MENU_HELP,       (*DispMenu_View)},
		{MENU_VIEW_1,       254,              MENU_VIEW,       MENU_VIEW_2,	         MENU_VIEW_3,     (*Menu_DispTmp)},
		{MENU_VIEW_2,       254,              MENU_VIEW,       MENU_VIEW_3,	         MENU_VIEW_1,     (*Menu_DAC0808)},
		{MENU_VIEW_3,       254,              MENU_VIEW,       MENU_VIEW_1,          MENU_VIEW_2,     (*Menu_ADC0832)},
		{MENU_OPERATION,	MENU_OPERATION_1, MENU_ROOT,   	   MENU_TEST,            MENU_VIEW,       (*DispMenu_Operation)},
		{MENU_OPERATION_1,  254,              MENU_OPERATION,  MENU_OPERATION_2,     MENU_OPERATION_3,(*Menu_Motor_s)},
		{MENU_OPERATION_2,  254,              MENU_OPERATION,  MENU_OPERATION_3,     MENU_OPERATION_1,(*MenuFunction)},
		{MENU_OPERATION_3,  254,              MENU_OPERATION,  MENU_OPERATION_1,     MENU_OPERATION_2,(*Menu_MemoryData)},			
		{MENU_TEST,         MENU_TEST_1,      MENU_ROOT,       MENU_HELP,            MENU_OPERATION,  (*DispMenu_Test)},
		{MENU_TEST_1,       254,              MENU_TEST,       MENU_TEST_2,          MENU_TEST_3,     (*Menu_SerialReceive_PC)},
		{MENU_TEST_2,    	254,              MENU_TEST,       MENU_TEST_3,          MENU_TEST_1,     (*Menu_SerialSend_PC)},
		{MENU_TEST_3,    	254,              MENU_TEST,       MENU_TEST_4,          MENU_TEST_2,     (*Menu_SerialReceive_MCU)},
		{MENU_TEST_4,    	254,              MENU_TEST,       MENU_TEST_1,          MENU_TEST_3,     (*Menu_SerialSend_MCU)},
		{MENU_HELP,         MENU_HELP_1,      MENU_ROOT,       MENU_VIEW,            MENU_TEST,       (*DispMenu_Help)},
		{MENU_HELP_1,       254,              MENU_HELP,       MENU_HELP_2,          MENU_HELP_2,     (*MenuFunction)},
		{MENU_HELP_2,	    254,              MENU_HELP,       MENU_HELP_1,          MENU_HELP_1, 	  (*MenuFunction_Help_2)},
	};

/*----------------------接收菜单功能键---------*/
void GetKeyInput()
{
       	switch(NowKey)			 
			{
			  case	KEY_OK://   KEY_OK,		KEY_UP,		KEY_ESC,
				   	
				          if(KeyTab[iMenuID].KeyTab_PressOk!=254)		    //   按下OK键时的状态
						  {
						     iMenuID=KeyTab[iMenuID].KeyTab_PressOk;
						     JudgeHLight();	 					 	 				  		
						  }
				     	else											    //已经到底层
						  {
						     KeyFuncPtr=KeyTab[iMenuID].CurrentOperate;					 							 
    			             ( *KeyFuncPtr)();			 				    //      执行当前ID的功能函数
						  }	   
						     				
					break;			
		     case	KEY_ESC:
					
					if(KeyTab[iMenuID].KeyTab_PressEsc!=254)
						{					      
						   iMenuID=KeyTab[iMenuID].KeyTab_PressEsc;         //     按下ESC键时的状态  	  
						   JudgeHLight();	   		 		
						}
					break;
			 case	KEY_DOWN:
					if(KeyTab[iMenuID].KeyTab_PressDown!=254)
						{												//     按下DOWN键时的状态
						  iMenuID=KeyTab[iMenuID].KeyTab_PressDown;
						  JudgeHLight();					
						}
					break;
		     case	KEY_UP:
					if(KeyTab[iMenuID].KeyTab_PressUp!=254)
						{												 //       按下UP键时的状态
					    	iMenuID=KeyTab[iMenuID].KeyTab_PressUp;	
					     	JudgeHLight();						
						}
					break; 		
					 					
			 default:
					break; 		
		}

}





/*-----------显示当前的菜单----------*/
void JudgeHLight()
{
   switch(iMenuID)
	{
	  case	MENU_FACE:
			DispFaceBmp();
			break;
      case	MENU_ROOT:
			DispFaceBmp();
			break;
	  case	MENU_VIEW:
			DispMenu_Root();
			break;
	  case	MENU_VIEW_1:
	  case	MENU_VIEW_2:
	  case  MENU_VIEW_3:	
			DispMenu_View();
			break;
	  case	MENU_OPERATION:
			DispMenu_Root();
			break;
	  case	MENU_OPERATION_1:
	  case	MENU_OPERATION_2:
	  case	MENU_OPERATION_3:
			DispMenu_Operation();
			break;
	  case	MENU_TEST:
			DispMenu_Root();
			break;
	  case	MENU_TEST_1:
	  case	MENU_TEST_2:
	  case  MENU_TEST_3:
	  case  MENU_TEST_4:
			DispMenu_Test();
			break;
	  case	MENU_HELP:
			DispMenu_Root();
			break;
	  case	MENU_HELP_1:
	  case  MENU_HELP_2:        
			DispMenu_Help();
			break; 		
	  default:
			break;
	}

//////////////////////////反百显示当前按钮//////////////////////
	switch (iMenuID)								 
	  {   
	      case  MENU_VIEW: 
				  
				   chn_fdisp(0,0,2,16,1,2,hz_view);					  
			
				break;
		  case  MENU_VIEW_1: 
				  
				    chn_fdisp(0,0,2,16,1,2,hz_view_1); 
				   
				break;
		  case  MENU_VIEW_2:		          
				    chn_fdisp(2,0,2,16,1,2,hz_view_2);				   
				break;
		  case  MENU_VIEW_3:
		            chn_fdisp(4,0,2,16,1,1,hz_view_2+32); 
                    chn_fdisp(4,16,2,16,1,1,hz_view_2);
		        break;
		  case  MENU_OPERATION: 

				   chn_fdisp(2,0,2,16,1,2,hz_operation);
				break;
		  case  MENU_OPERATION_1: 

				   chn_fdisp(0,0,2,16,1,4,hz_operation_1);
				break;
		  case  MENU_OPERATION_2:   
				   chn_fdisp(2,0,2,16,1,2,hz_operation_2);	//数据
                   chn_fdisp(2,32,2,16,1,2,hz_operation_3);	//存储
				break;
		  case  MENU_OPERATION_3:   
				   
				 chn_fdisp(4,0,2,16,1,2,hz_operation_2);    //数据
                 chn_fdisp(4,32,2,16,1,2,hz_operation_4);	//读取 
				break;
		  case  MENU_TEST: 
				   
				   chn_fdisp(4,0,2,16,1,2,hz_test);
				  
				break;
		  case  MENU_TEST_1:			  
				   
				    chn_fdisp(0,0,2,16,1,2,hz_test_1);
                    chn_fdisp(0,32,2,16,1,2,hz_test_2);	
				  				
				break;
		  case  MENU_TEST_2: 			   				   
                  
				   chn_fdisp(2,0,2,16,1,2,hz_test_1);
                   chn_fdisp(2,32,2,16,1,2,hz_test_3);				
				  
				break;
		  case  MENU_TEST_3:
		         chn_fdisp(4,0,2,16,1,2,hz_test_4);
                 chn_fdisp(4,32,2,16,1,2,hz_test_2);
		        break;
		  case  MENU_TEST_4:
		          chn_fdisp(6,0,2,16,1,2,hz_test_4);
                  chn_fdisp(6,32,2,16,1,2,hz_test_3); 
		        break;
		  case  MENU_HELP:	       
				   chn_fdisp(6,0,2,16,1,2,hz_help);				
				break;		  
		  case  MENU_HELP_1: 			   
				   chn_fdisp(0,0,2,16,1,2,hz_help);
                   num_disp(1,0,32,1); 			 
				break;
		  case  MENU_HELP_2:
				   chn_fdisp(2,0,2,16,1,2,hz_about);
				break;
		  default: 
				break;    
	  }

}

void MenuFunction()
{    
}

/*-------显示开机画面-------*/
void DispFaceBmp()
{  
   clrscr();
   cs1=1;
   cs2=0;
   chn_disp(0,0,2,16,1,4,hz_face);
   chn_disp(4,0,2,16,1,3,hz_make);
   chn_disp(6,32,2,8,1,4,hz_me);
   cs1=0;
   cs2=1;
   chn_disp(0,0,2,16,1,4,(hz_face+128));
   chn_disp(6,0,2,8,1,8,(hz_me+64));
     
}
/*---------显示主目录-----------*/
void DispMenu_Root()
{
   clrscr();
   cs1=1;
   cs2=0;
   chn_disp(0,0,2,16,1,2,hz_view);
   chn_disp(2,0,2,16,1,2,hz_operation);
   chn_disp(4,0,2,16,1,2,hz_test);
   chn_disp(6,0,2,16,1,2,hz_help);
} 
/*-----------显示查看子目录----------*/
void DispMenu_View()
{
   clrscr();
   cs1=1;
   cs2=0;	   
   chn_disp(0,0,2,16,1,2,hz_view_1);  		  //温度
   chn_disp(2,0,2,16,1,2,hz_view_2);		  //数模
   chn_disp(4,0,2,16,1,1,hz_view_2+32); 	  //模数
   chn_disp(4,16,2,16,1,1,hz_view_2); 
}
/*-----------显示工具子目录----------*/
void DispMenu_Operation()
{
  clrscr();
  cs1=1;
  cs2=0;
  chn_disp(0,0,2,16,1,4,hz_operation_1);
  chn_disp(2,0,2,16,1,2,hz_operation_2);	//数据
  chn_disp(2,32,2,16,1,2,hz_operation_3);	//存储
  chn_disp(4,0,2,16,1,2,hz_operation_2);    //数据
  chn_disp(4,32,2,16,1,2,hz_operation_4);	//读取 
}
/*-----------显示通信子目录------------*/
void DispMenu_Test()
{
  clrscr(); 
  cs1=1;
  cs2=0; 
  chn_disp(0,0,2,16,1,2,hz_test_1);
  chn_disp(0,32,2,16,1,2,hz_test_2);
  chn_disp(2,0,2,16,1,2,hz_test_1);
  chn_disp(2,32,2,16,1,2,hz_test_3);
  chn_disp(4,0,2,16,1,2,hz_test_4);
  chn_disp(4,32,2,16,1,2,hz_test_2);
  chn_disp(6,0,2,16,1,2,hz_test_4);
  chn_disp(6,32,2,16,1,2,hz_test_3);  
}
/*--------------显示帮助子目录----------*/
void DispMenu_Help()
{  
   clrscr();	   
   num_disp(1,0,32,1);
   chn_disp(0,0,2,16,1,2,hz_help);   
   chn_disp(2,0,2,16,1,2,hz_about);	
}
/*-------------------输出文本-------------------------*/
void GetTextInput()
{
   while(NowKey==KEY_shift)					  //2ND上当键判断
   {
	  EX0=1;
	  cs1=0;
	  //cs2=1;      
	  chn_disp(6,48,2,16,1,1,hz_shift);
	  if (NowKey==KEY_1)
	       NowKey=KEY_A;
	  if (NowKey==KEY_2)
	       NowKey=KEY_B;
	  if (NowKey==KEY_3)
	       NowKey=KEY_C;
	  if (NowKey==KEY_4)
	       NowKey=KEY_D;
	  if (NowKey==KEY_5)
	       NowKey=KEY_E;
	  if (NowKey==KEY_6)
	       NowKey=KEY_F;
   }
   chn_disp(6,48,2,16,1,1,hz_null);							 
	if (NowKeyReg)				              //    判断当前按键有无变化
		{  
		   KeyInputTemp=1;
		   if (NowKey==KEY_0)				  //    查当前按键的键对应的数字
		        TextInputTemp=0;
		   else if(NowKey==KEY_1)
		        TextInputTemp=1;
		   else if(NowKey==KEY_2)
		        TextInputTemp=2;
		   else if(NowKey==KEY_3)
		        TextInputTemp=3;
		   else if(NowKey==KEY_4)
		        TextInputTemp=4;
		   else if(NowKey==KEY_5)
		        TextInputTemp=5;
		   else if(NowKey==KEY_6)
		        TextInputTemp=6;
		   else if(NowKey==KEY_7)
		        TextInputTemp=7;
		   else if(NowKey==KEY_8)
		        TextInputTemp=8;
		   else if(NowKey==KEY_9)
		        TextInputTemp=9;
		   else if(NowKey==KEY_A)
		        TextInputTemp=10;
		   else if(NowKey==KEY_B)
		        TextInputTemp=11;
		   else if(NowKey==KEY_C)
		        TextInputTemp=12;
		   else if(NowKey==KEY_D)
		        TextInputTemp=13;
		   else if(NowKey==KEY_E)
		        TextInputTemp=14;
		   else if(NowKey==KEY_F)
		        TextInputTemp=15;
		   else   KeyInputTemp=0; 	 
		   NowKeyReg=0;
	    }
	 
}

⌨️ 快捷键说明

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