单片机多级菜单编程实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机多级菜单编程实现
单片机多级菜单编程实现(ZT)建立一个树状得菜单结构,用链表实现
链表中包含:ﻫ1、指向同级左右菜单与指向父菜单、子菜单得四个菜单结构体指针;
3、退出该菜单时需要执行得结束2、进入该菜单时需要执行得初始化函数指针ﻫ
函数指针
4、该菜单内得按键处理函数指针数组得指针操作菜单模块需要得按键操作有:左、右、确
认、退出.ﻫ采用这种办法,可以方便得添加或删减菜单.并且只需要在其头文件中修改初始变量就可ﻫ以实现,完全无须修改C文件中得任何函数.
具体结构定义ﻫ我得定义,做个参考:
#defineMENU_HLP_EN //菜单帮助信息使能
typedefstructﻫ{
void(*pMenuTaskInit)(void);//指向菜单任务初始化函数得指针
void(*pMenuTaskEnd)(void);//指向菜单任务结束函数得指针
}MENU_TASK_TYP;
typedefstructMenuTypﻫ{ﻫINT8U *MenuName; //菜单名称字符串ﻫWORK_MOD WorkMod;//工作状态编号
MENU_TASK_TYP *pMenuTask;//指向菜单任务得指针
void (**pTaskKeyDeal)(void); //指向菜单任务按键处理函数数组得指针
#ifdef MENU_HLP_ENﻫINT8U *MenuHlp;//菜单帮助字符串#endif
structMenuTyp*pParent; //指向上层菜单得指针
struct MenuTyp *pChild;//指向子菜单得指针
structMenuTyp *pRight;//指向右菜单得指针
structMenuTyp *pLeft; //指向左菜单得指针ﻫ}MENU_TYP;
ﻫ我根据网上得资料做得一个菜单:
/****************菜单数据结构**********************/ﻫstruct KeyTabStruct{
uint8 MenuIndex; //当前状态索引号
uint8MaxItems;//本级菜单最大条目数ﻫuint8 ShowLevel; //菜单显示内容ﻫuint8 PressOk;//按下"回车"键时转向得状态索引号uint8 PressEsc; //按下"返回”键时转向得状态索引号
uint8PressDown;//按下"向下"键时转向得状态索引号ﻫuint8 PressUp;//按下”向上"键时转向得状态索引号
void (*CurrentOperate)();//当前状态应该执行得功能操作ﻫ}; uint8MenuID;//菜单ID号
uint8 MenuNextID;//下级菜单ID号ﻫ//CurMenuID=本菜单IDﻫ//MaxMenuItem=同级菜单最大项数
//OkMenuID=子菜单层所对应得菜单ID,ID=999为菜单已经到底了
//EscMenuID=父菜单层所对应得菜单ID,ID=999为菜单已经到顶了ﻫ//Do wnMenuID=弟菜单层所对应得菜单ID,ID=999为菜单就是独生子ﻫ//Up MenuID=兄菜单层所对应得菜单ID,ID=999为菜单就是独生子
//CurFunction=本菜单所对应得菜单函数指针
const struct KeyTabStruct KeyTab[MAX_KEYTABSTRUCT_NU M]={ﻫ//CurMenuID, axMenuItem,MenuShowLevel, OkMenuID,
EscMenuID, DownMenuID, UpMenuID, CurFunction{MENU_EDIT,0,0, MENU_DATA_VIEW,MENU_NO,MENU_NO,MENU_NO,*MenuEdit},
{MENU_DATA_VIEW,3,1,MENU_DATA_VIEW_FIRE, MENU_E DIT,MENU_SYS_EDIT,MENU_PRINT_DATA,*MenuEdit},{MENU_DATA_VIEW_FIRE,5,MENU_NO,MENU_NO,MEN U_DATA_VIEW,MENU_DATA_VIEW_TROUBLE, MENU_STEP_FOL LOW,*MenuDataViewIn},
{MENU_DATA_VIEW_TROUBLE, 5,MENU_NO, MENU_NO,ME NU_DATA_VIEW,MENU_DATA_VIEW_REPEAT,MENU_DATA_VIEW_FIRE,*MenuDataViewIn},
{MENU_DATA_VIEW_REPEAT,5, MENU_NO,ﻫMENU_NO, MEN U_DATA_VIEW, MENU_FACE_CHECK, ﻫMENU_DATA_VIEW_TROU BLE,*MenuDataViewIn},
{MENU_FACE_CHECK,5,MENU_NO,ﻫMENU_NO,MENU_D ATA_VIEW, MENU_STEP_FOLLOW,
MENU_DATA_VIEW_REPEAT, *MenuFaceCheck},ﻫ{MENU_STEP_FOLLOW, 5,MENU_NO,ﻫMENU_NO,MENU_DATA_VIEW,MENU_DATA_VIEW_FIRE,MENU_FACE_CHECK,ﻫ*MenuStepFollow},
{MENU_SYS_EDIT, 3,
2,MENU_SUM_SET,MENU_EDIT,
MENU_PRINT_DATA, MENU_DATA_VIEW, *MenuEdit},
{MENU_SUM_SET, 6,MENU_NO,ﻫMENU_NO,MENU_SYS_EDIT,MENU_EDIT_INSULATE,
MENU_TIME_SET,*MenuSumSet},
{MENU_EDIT_INSULATE,6, MENU_NO,
MENU_NO, MENU_SYS_EDIT,MENU_EDIT_HZ,MENU_SUM_SET, *MenuEditInsulate},ﻫ{MENU_EDIT_HZ,6,MENU_NO,
MENU_NO,MENU_SYS_EDIT, MENU_LD_CONTROL,
MENU_EDIT_INSULATE, *MenuEditHZ},
{MENU_LD_CONTROL, 6,
MENU_NO,MENU_NO,MENU_SYS_EDIT,MENU_LD_DELAY,ﻫMENU_EDIT_HZ,*MenuLDControl},
{MENU_LD_DELAY,6,ﻫMENU_NO,MENU_NO,MENU_SYS_EDI T,MENU_TIME_SET,ﻫMENU_LD_CONTROL, *MenuLDDelay},ﻫ{MENU_TIME_SET, 6, MENU_NO,