我写个 几个菜单程序是用 指针数组分的层次 以树目录的写法 利用一个变量做菜单索引 没有你这么多按键不过可以扩展的
*--------------文件信息--------------------------------------------------------
****************************************************************************************
* 文件名:Show.h
* 功能:界面显示菜单
* 作者:自然的天逸
* 日期:2009.02.05
* 备注:小厨师每一个图层显示界面包括三函数一个显示函数一个重绘函数 和一个销毁函数
****************************************************************************************/
#include "UCOSconfig.h"
INT8U MenuLayer=0; /*菜单层数*/
/*三个按键对应三个函数还有一个位自动函数*/
const MenuStructure MenuTab[][4]={
/* 活动A按键 活动B按键 活动C按键 系统自动调用 当前菜单层数 */
{(*KeySwitchA1), (*KeySwitchB1), (*KeySwitchC1), (*SystemTask)}, /***0***/
{(*KeySwitchA2), (*KeySwitchB2), (*KeySwitchC2), (*SystemTask2)}, /***1***/
{(*KeySwitchA2_1), (*KeySwitchB2_1), (*KeySwitchC2_1), (*SystemTask2_1)}, /***2***/
{(*KeySwitchA2_3), (*KeySwitchB2_3), (*KeySwitchC2_3), (*SystemTask)}, /***3***/
{(*KeySwitchA2_4), (*KeySwitchB2_4), (*KeySwitchC2_4), (*SystemTask2_4)}, /***4***/
{(*KeySwitchA2_5), (*KeySwitchB2_5), (*KeySwitchC2_5), (*SystemTask)}, /***5***/
{(*KeySwitchA2_6), (*KeySwitchB2_6), (*KeySwitchC2_6), (*SystemTask2_6)}, /***6***/
{(*KeySwitchA2_7), (*KeySwitchB2_7), (*KeySwitchC2_7), (*SystemTask)}, /***7***/
{(*KeySwitchA2_H), (*KeySwitchB2_H), (*KeySwitchC2_H), (*SystemTask)}, /***8***/
{(*KeySwitchA3), (*KeySwitchB3), (*KeySwitchC3), (*SystemTask3)}, /***9***/
{(*KeySwitchA3_E), (*KeySwitchB3_E), (*KeySwitchC3_E), (*SystemTask)}, /***10***/
{(*KeySwitchA3_F), (*KeySwitchB3_F), (*KeySwitchC3_F), (*SystemTask)}, /***11***/
{(*KeySwitchA4), (*KeySwitchB4), (*KeySwitchC4), (*SystemTask4)}, /***12***/
{(*KeySwitchA4_A), (*KeySwitchB4_A), (*KeySwitchC4_A), (*SystemTask)}, /***13***/
{(*KeySwitchA4_B), (*KeySwitchB4_B), (*KeySwitchC4_B), (*SystemTask)}, /***14***/
{(*KeySwitchA5), (*KeySwitchB5), (*KeySwitchC5), (*SystemTask5)}, /***15***/
{(*KeySwitchA6_1), (*KeySwitchB6_1), (*KeySwitchC6_1), (*SystemTask6_1)}, /***16***/
{(*KeySwitchA7), (*KeySwitchB7), (*KeySwitchC7), (*SystemTask7)}, /***17***/
{(*KeySwitchA9), (*KeySwitchB9), (*KeySwitchC9), (*SystemTask)}, /***18***/
{(*KeySwitchA10), (*KeySwitchB10), (*KeySwitchC10), (*SystemTask)}, /***18***/
{(*KeySwitchA11), (*KeySwitchB11), (*KeySwitchC11), (*SystemTask11)}, /***20***/
{(*KeySwitchA11_1), (*KeySwitchB11_1), (*KeySwitchC11_1), (*SystemTask11_1)}, /***21***/
{(*KeySwitchA11_2), (*KeySwitchB11_2), (*KeySwitchC11_2), (*SystemTask11_2)}, /***22***/
{(*KeySwitchA12), (*KeySwitchB12), (*KeySwitchC12), (*SystemTask)}, /***23***/
{(*KeySwitchA13), (*KeySwitchB13), (*KeySwitchC13), (*SystemTask13)}, /***24***/
{(*KeySwitchA13_1), (*KeySwitchB13_1), (*KeySwitchC13_1), (*SystemTask)}, /***25***/
{(*KeySwitchA14), (*KeySwitchB14), (*KeySwitchC14), (*SystemTask14)}, /***26***/
{(*KeySwitchA15), (*KeySwitchB15), (*KeySwitchC15), (*SystemTask)}, /***27***/
{(*KeySwitchA16), (*KeySwitchB16), (*KeySwitchC16), (*SystemTask16)}, /***28***/
{(*KeySwitchA16_2), (*KeySwitchB16_2), (*KeySwitchC16_2), (*SystemTask)}, /***29***/
{(*KeySwitchA17), (*KeySwitchB17), (*KeySwitchC17), (*SystemTask17)}, /***30***/
{(*KeySwitchA18), (*KeySwitchB18), (*KeySwitchC18), (*SystemTask)}, /***31***/
{(*KeySwitchA19), (*KeySwitchB19), (*KeySwitchC19), (*SystemTask19)}, /***32***/
{(*KeySwitchA19_1), (*KeySwitchB19_1), (*KeySwitchC19_1), (*SystemTask)}, /***33***/
{(*KeySwitchA20), (*KeySwitchB20), (*KeySwitchC20), (*SystemTask20)}, /***34***/
{(*KeySwitchA21), (*KeySwitchB21), (*KeySwitchC21), (*SystemTask)}, /***35***/
{(*KeySwitchA22), (*KeySwitchB22), (*KeySwitchC22), (*SystemTask)} /***36***/
};
/*************************************************按键处理菜单入口函数*****************************
函数名: MenuEntry
功能 : 菜单程序入口程序 根据当前的菜单层找到 对应执行函数
输入参数 :INT8U event 登入程序的入口事件
输出参数: 无
返回 : 无
*************************************************************************************************/
void MenuEntry(INT8U event)
{
void (*temp)();
switch(event)
{
case KeyA: /*活动按键A*/
{
temp=MenuTab[MenuLayer][0].State; //找到当前索引对应的执行函数
(*temp)(); //执行对应操作
}
break;
case KeyB: /*活动按键B*/
{
temp=MenuTab[MenuLayer][1].State; //找到当前索引对应的执行函数
(*temp)(); //执行对应操作
}
break;
case KeyC: /*活动按键C*/
{
temp=MenuTab[MenuLayer][2].State; //找到当前索引对应的执行函数
(*temp)(); //执行对应操作
}
break;
default:
{
temp=MenuTab[MenuLayer][3].State; //找到当前索引对应的执行函数
(*temp)(event); //执行对应操作
}
break;
}
}
具体可以联系我 QQ260573569 |