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

📄 menu.c~

📁 UCOS-II ATMEGA128 移殖
💻 C~
字号:
/*
*********************************************************************************************
//			根据按键值移动显示菜单并执行菜单命令
// Function:
//		UP_KEY		向上移动菜单项
//		DOWN_KEY	向下移动菜单项
//		ENTER_KEY	进入下一层菜单或执行菜单命令
//		ESC_KEY		回到上一层菜单
* Ver       : 1.00		
* Date      : 2003.03	
* By        : SLAMDUNK
* Modify    : LJJ & Danli
* Date	    : 2003.04
* Modify-sec: Slamdunk Date : 03.06.23
***********************************************************************************************
*/                        
#include <ctype.h> 
#include <string.h>
#include <stdio.h>
#include "ucos_ii.h"
#include "lcd.h"
#include "menu.h"
#include "key.h"
#include "lio.h"
#define KEY_UP 			0x1
#define KEY_DOWN                0x2
#define KEY_ENTER               0x3
#define KEY_ESC                 0x4 
#define KEY_SUPER		0x5


void Lcd_disp_bottom(unsigned char key,unsigned char const *Pic_bottom_str);
void clear_buffer(void);
void TEST_F(void);

BOOLEAN Disp_f;
unsigned char flash  *Display_ptr[4];
//INT8U		 Disp_buffer[8][128];
unsigned char const bottom[]="Bottom";//"确定  +  -  返回";

unsigned char flash  blank[]="              ";
//主菜单 
unsigned char flash   str1[]="Main 1";//"MODEM主板电源线";
unsigned char flash   str2[]="Main 2";//"MODEM加热板电源线";
unsigned char flash   str3[]="Main 3";//"MODEM串口线";
unsigned char flash   str4[]="Main 4";//"鼠标线";
unsigned char flash   str5[]="Main 5";//"低噪放串口线";
unsigned char flash   str6[]="Main 6";//"变频器串口线";
unsigned char flash   str7[]="Main 7";//"CDMA上行功放";
unsigned char flash   str8[]="Main 8";//"CDMA下行功放";
unsigned char flash   str9[]="Main 9";//"太阳能功放";

unsigned char flash   str10[]="Main 10";//"自产功放";
unsigned char flash   str20[]="Main 11";//"光纤近端";
unsigned char flash   str30[]="Main 12";//"光纤远端";
//子菜单1
unsigned char flash   str11[]="SUB 11";//"圆头-----1口";
unsigned char flash   str12[]="SUB 12";//"3.96第二P-----2口";
//子菜单2
unsigned char flash   str21[]="SUB 21";//"圆头-----3口";
unsigned char flash   str22[]="SUB 22";//"3.96第二P-----4口";
//子菜单3
unsigned char flash   str31[]="SUB 31";//"DB9公头-----7口";
unsigned char flash   str32[]="SUB 32";//"DB9母头-----8口";
unsigned char flash   str33[]="SUB 33";//"dAC33003";
unsigned char flash   str34[]="SUB 34";//"dAC34004"; 

unsigned char flash   str41[]="SUB 41";//"一端-----5口";
unsigned char flash   str42[]="SUB 42";//"另一端-----6口";
unsigned char flash   str43[]="SUB 43";//"dAC43003";
unsigned char flash   str44[]="SUB 44";//"dAC44004";

unsigned char flash   str51[]="SUB 51";//"DB9公-----7口";
unsigned char flash   str52[]="SUB 52";//"鼠标线-----10口";
unsigned char flash   str53[]="dAC53003";
unsigned char flash   str54[]="dAC54004";

//子菜单6
unsigned char flash   str61[]="SUB 61";//"DB9公-----7口";
unsigned char flash   str62[]="SUB 62";//"鼠标线-----12口";
unsigned char flash   str63[]="FSL     "; 
unsigned char flash   str64[]="SEt_t 02";   
unsigned char flash   str65[]="NOSOLAr ";

unsigned char flash   str71[]="SUB 71";//"DB9公-----7口";
unsigned char flash   str72[]="SUB 72";//"鼠标头-----14口";
unsigned char flash   str73[]="dAC73003";
unsigned char flash   str74[]="dAC74004";

unsigned char flash   str81[]="dAC81001";
unsigned char flash   str82[]="dAC82002";
//unsigned char flash   str83[]="dAC83003";
//unsigned char flash   str84[]="dAC84004";

unsigned char flash   str91[]="dAC91001";
unsigned char flash   str92[]="dAC92002";
unsigned char flash   str93[]="dAC93003";
unsigned char flash   str94[]="dAC94004";
unsigned char flash   str95[]="dAC91001AAAAA";
unsigned char flash   str96[]="dAC92002BBBBB";
unsigned char flash   str97[]="dAC93003CCCCC";
unsigned char flash   str98[]="dAC94004DDDDD";


/********************************************************************************************/
//			Global Variable
/********************************************************************************************/

//菜单项总数

#define MENU_ITEM_TOTAL		52  

MENU menu[52]=
{ 
	//主菜单
	{11,str1},
	{12,str2},
	{13,str3},
	{14,str4},
	{15,str5},
	{16,str6},
	{17,str7},
	{18,str8},
	{19,str9},
	{20,str10},
	{21,str20},
	{22,str30},

	//子菜单1
	{1101,str11},
	{1102,str12},
	//子菜单2
	{1201,str21},
	{1202,str22},	
	//子菜单3
	{1301,str31},
	{1302,str32},
	{1303,str33},
	{1304,str34},
	//子菜单4
	{1401,str41},
	{1402,str42},
	{1403,str43},
	{1404,str44},
	//子菜单5
	{1501,str51},
	{1502,str52},
	{1503,str53},
	{1504,str54},
	//子菜单6
	{1601,str61},
	{1602,str62},
	{1603,str63},
	{1604,str64},
	//子菜单7
	{1701,str71},
	{1702,str72},
	{1703,str73},
	{1704,str74},
	//子菜单8
	{1801,str81},
	{1802,str82},
	//{83,str83},
	//{84,str84},
	//子菜单9
	{1901,str91},
	{1902,str92},
	{1903,str93},
	{1904,str94},
	{1905,str95},
	{1906,str96},
	{1907,str97},
	{1908,str98},
	
	
	{2001,str1},
	{2002,str2},
	{2003,str3},
	
	{2101,str4},
	
	{2201,str11},
	{2202,str22}
};         

/********************************************************************************************/
//			Funtion protocol
/********************************************************************************************/

void menu_display(unsigned char flash *flash_disp_ptr);
void *get_menu_p(int id); 
//定义函数的ID号
struct id_function
{
	int id;
	void (*exec_func)();	
}menu_func_tab[42]=
{       
	//子菜单1
	1101,TEST_F,
	1102,TEST_F,
	//子菜单2
	1201,TEST_F,
	1202,TEST_F,	
	//子菜单3
	1301,TEST_F,
	1302,TEST_F,
	1303,TEST_F,
	1304,TEST_F,
	//子菜单4
	1401,TEST_F,
	1402,TEST_F,
	1403,TEST_F,
	1404,TEST_F,
	//子菜单5
	1501,TEST_F,
	1502,TEST_F,
	1503,TEST_F,
	1504,TEST_F,
	//子菜单6
	1601,TEST_F,
	1602,TEST_F,
	1603,TEST_F,
	1604,TEST_F,
	//子菜单7
	1701,TEST_F,
	1702,TEST_F,
	1703,TEST_F,
	1704,TEST_F,
	//子菜单8
	1801,TEST_F,
	1802,TEST_F,
	1803,TEST_F,
	1804,TEST_F,
	//子菜单9
	1901,TEST_F,
	1902,TEST_F,
	1903,TEST_F,
	1904,TEST_F,
	1905,TEST_F,
	1906,TEST_F,
	1907,TEST_F,
	1908,TEST_F,
	
	
	2001,TEST_F,
	2002,TEST_F,
	2003,TEST_F,
	
	2101,TEST_F,
	
	2201,TEST_F,
	2202,TEST_F

};  
	
MENU *menu_p; 
    
/********************************************************************************************/
//			指针函数调用的程序
//根据菜单ID号调用不同的指针函数   
//used:
//	(*menu_func_tab[i].exec_func)();
//input:
//	menu_p->id;
//
//output:
//	
/********************************************************************************************/
void menu_exec_func(int id)
{               

	unsigned char i;

	for(i=0;i<MENU_ITEM_TOTAL;i++)
	{
		if(menu_func_tab[i].id==id)
		{
			(*menu_func_tab[i].exec_func)();
			return;
		}	
	}
}

/********************************************************************************************/
//			根据键值选择菜单   
//
//	KEY_UP		向上移动菜单项
//	KEY_DOWN	向下移动菜单项
//	KEY_ENTER	进入下一层菜单或执行菜单命令
//	KEY_ESC		回到上一层菜单   
//
// note  : 
//
// input :
//	(1)unsigned char key
// output:
//
/********************************************************************************************/
unsigned char flash  TaskKeyOK[]="    Key OK    ";
unsigned char flash  TaskKeyESC[]="   Key ESC   ";
unsigned char flash  TaskKeyUP[]="    Key UP    ";
unsigned char flash  TaskKeyDOWN[]="   Key DOWN   ";

BOOLEAN F_ADJUSTING;
//unsigned char select_low=0;
void menu_select(unsigned char key)
{        
	switch(key)
	{					
        case KEY_UP:
       	{   
        	//Lcd_putsf_ascii(TaskKeyUP,2,0,0);
			if(F_ADJUSTING)
        	{       
        		menu_exec_func(menu_p->id);
	   			//Lcd_display();
       		}
   	   		else if(menu_p->up!=NULL) 
	   		{
				menu_p=menu_p->up;
       		} 
       		//else
       		//{
       		//	select_low = 2;
       		//}                         
        	break;
    	}                       
     	case KEY_DOWN:
      	{                                                	                       	                	
       		//Lcd_putsf_ascii(TaskKeyDOWN,2,0,0);
			if(F_ADJUSTING)
        	{         
           		menu_exec_func(menu_p->id);
		   		//Lcd_display();
        	}
         	else if(menu_p->down != NULL) 
          	{
           		menu_p = menu_p->down;
           	}
           	//else
           	//{
           	//	select_low = 1;
           	//}               	                    
            break;
      	}                        
       	case KEY_ENTER:
        {       
        	//Lcd_putsf_ascii(TaskKeyOK,2,0,0);
			if((menu_p->father == NULL)&&(menu_p->son == NULL))
         	{
          		break;
            }
            if(menu_p->son!=NULL)			
            {       
            	menu_p = menu_p->son;
            }  
            else
            {
			   	F_ADJUSTING = 1;  
       			menu_exec_func(menu_p->id);
          	}
           break;
       	}                         
        case KEY_ESC:
        {                       
        	//Lcd_putsf_ascii(TaskKeyESC,2,0,0);
			if(F_ADJUSTING)
         	{
				F_ADJUSTING = 0; 				               			
 				//Lcd_display_mode = 0;  			//disable flash
     		}
            else if(menu_p->father != NULL)
            {
            	menu_p = menu_p->father;
            }  
            break;
       	} 
                                   
        default:
       	break;
	}
        
 	//*if(!F_ADJUSTING)
	//{         		
		menu_display(menu_p->name);
		 //	Lcd_disp_picf(Pic_bottom,128*16,6,0,7,127,0);
	//}	*/
}

/********************************************************************************************/
//			得到菜单的关联  
//
/********************************************************************************************/
void *get_menu_p(int id)
{
	int i;
	for(i = 0;i<MENU_ITEM_TOTAL;i ++)
	{
		if(menu[i].id == id)
			return(&menu[i]);
	}
	return NULL;
}                     

/********************************************************************************************/
//			菜单初始化
/********************************************************************************************/
void menu_init(void)
{
	int i; 
	
	for(i = 0; i < MENU_ITEM_TOTAL; i ++)
	{                           
		menu[i].father = get_menu_p(menu[i].id/100);
		menu[i].son    = get_menu_p(menu[i].id*100+1);  
		menu[i].up     = get_menu_p(menu[i].id-1);
		menu[i].down   = get_menu_p(menu[i].id+1);   
	}      
	//按键最初指向菜单0
	menu_p = menu;//[0];
//		Display_str = str1;
//		Display_str = str2;
//		Display_str = str3;
//		Display_str = str4;
//		Disp_f = 1;
		menu_display(menu_p->name);
} 


/********************************************************************************************/
//			菜单显示
/********************************************************************************************/    
// funtion protocal

void menu_display( unsigned char flash *flash_disp_ptr)
{                                                     
	//MENU *menu_ptr;
	//unsigned char k;
	//unsigned char i;
	//menu_ptr=menu_p;
	//clear_buffer();
	//for(i=0; i<4; i++)
	//{
	 	//Display_ptr[i] = flash_disp_ptr;
		Lcd_putsf_ascii(flash_disp_ptr,2,0,0);
	//}
}
       

void TEST_F(void)
{
/*
   	char_disp_buffer('',0,0,0);	 
   	char_disp_buffer("   TEST  LINE   ",2,0,0);
   	char_disp_buffer('',4,0,0);
   	Disp_f = 1;		
*/
}

void clear_buffer(void)
{
/*
	unsigned char i;
	unsigned char j;
	for (i=0;i<8;i++)
	{
		for(j=0;j<128;j++)
		{
			Disp_buffer[i][j]=0;
		}
	}
	Disp_f = 1;
*/
}

⌨️ 快捷键说明

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