📄 menu.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 + -