嵌入式中一个好的菜单模板可以让你在设计和移植时候很轻松方便,下面就来梳理一下自己的菜单界面。
1:菜单的组织形式第一步就是有个好的结构体。
//定义菜单类型
typedef enum
{
// 0,1,2,... = parent & title, UISTR_SPACE - top menu
UIMENU_POPUP = -1, /*有下级菜单*/
UIMENU_HASVALUE = -2,//此菜单有数值显示或设置
UIMENU_CUSTOM = -3,/*有需要用户确认界面*/
UIMENU_CUSTOM_HASVALUE = -4,
UIMENU_NOACTION = -5
} T_UI_MENUITEM_TYPE;
//主要的菜单数据结构
typedef struct
{
u8 nMenuStr;//菜单位置,主要是在另外一个枚举中索引
T_UI_MENUITEM_TYPE nType;//菜单类型,见上面定义的数据类型,可根据自己的实际情况自己扩展
} T_UI_MENUITEM;
2:自定义菜单主题名称
//菜单主题定义
enum
{
//第一组菜单
UISTR_MENU,//主菜单设置
UISTR_MENU_ONE,//平层设置
UISTR_MENU_TWO,//重量设置
UISTR_MENU_THR,//楼层学习
UISTR_MENU_FOU,//密码设置
//第二组菜单
//UISTR_MENU_ONE,
UISTR_MENU_ONE_ONE,//平层设置界面
UISTR_MENU_ONE_TWO,//上升补偿值显示
UISTR_MENU_ONE_THR,
UISTR_MENU_ONE_FOU,
//第三组菜单
//UISTR_MENU_TWO,
UISTR_MENU_TWO_ONE,//显示额定载重
UISTR_MENU_TWO_TWO,
UISTR_MENU_TWO_THR,
UISTR_MENU_TWO_FOU,
};
我上面只是一个模板,实际要根据情况设置自己能轻而易举识别的定义。
3:再次就是实际情况的菜单数组保存地方了。
const T_UI_MENUITEM g_uiMenuItemsSrc[MENU_ITEM_NUM] =
{
{UISTR_MENU, (T_UI_MENUITEM_TYPE)(u8)0}, // 带0结尾的都是主菜单,其下面是有子菜单选项的。
{UISTR_MENU_ONE, UIMENU_POPUP},//平层设置选项界面
{UISTR_MENU_TWO, UIMENU_CUSTOM},
{UISTR_MENU_THR, UIMENU_CUSTOM},
{UISTR_MENU_FOU, UIMENU_CUSTOM},
{UISTR_MENU_ONE, (T_UI_MENUITEM_TYPE)(u8)0},
{UISTR_MENU_ONE_ONE, UIMENU_CUSTOM},//平层设置界面
{UISTR_MENU_ONE_TWO, UIMENU_HASVALUE},//上升补偿值
{UISTR_MENU_ONE_THR, UIMENU_CUSTOM},
{UISTR_MENU_ONE_FOU, UIMENU_HASVALUE},
{UISTR_MENU_TWO, (T_UI_MENUITEM_TYPE)(u8)0}, // 1
{UISTR_MENU_TWO_ONE, UIMENU_HASVALUE},//额定载重
//{UISTR_MENU_TWO_TWO, UIMENU_CUSTOM},
//{UISTR_MENU_TWO_THR, UIMENU_CUSTOM},
//{UISTR_MENU_TWO_FOR, UIMENU_CUSTOM},
{-1, (T_UI_MENUITEM_TYPE)(u8)0},//菜单解析函数结束查找的标志
};
这个菜单数组保存了我们实际情况的菜单形式。他会被菜单解析函数解析出来,并按自定义规则显示出来。