基于单片机的任意菜单结构设计

来源:互联网 发布:360mac版 编辑:程序博客网 时间:2024/06/16 09:23

在单片机系统的人机界面设计中,通常需要采用菜单的方式来与用户交互信息,而对于某些应用系统它的菜单结构比较特殊,它每个菜单项的子项长度不一致,级数不一致,而且有些子项的操作具备一定的特殊性;因此不能采用一种通用的菜单结构模板来进行菜单的设计,结合作者多次菜单程序设计的工作经验,本文描述了一种任意菜单结构的设计方法,首先将菜单的结构目录树用图形描述出来,再给每个不同的级和同级不同的项设定一个唯一的标志,这样我们就能通过级标志位与项标志位的逻辑组合来得到一个唯一的位置,那么在代码的编写中只要对这些标志位按照图形的流程进行切换、读和写便可。

具体方法如下:

首先我们将菜单结构的图形描绘出来,再根据菜单的级数来定义一个结构体,比如菜单最大有5级,则这样定义

typedef struct

{

    unsigned char f;   //菜单所在级数

    unsigned char s1;   //菜单第1级下的子项号

    unsigned char s2;   //菜单第2级下的子项号

    unsigned char s3;   //菜单第3级下的子项号

    unsigned char s4;   //菜单第4级下的子项号 

    unsigned char s5;   //菜单第5级下的子项号  

     

}Menu_TypeDef;

Menu_TypeDef  menu;

再将这些变量的值标定在绘制的菜单图形中,如下图所示:

 

menu.f=1并且menu.s1=0表示第一级第一项;

menu.f=2并且menu.s1=3表示第二级第四项;

依此类推;

于是,菜单的每一个位置都会有一个唯一的值与之对应,当菜单的选项由用户切换时,我们只需要根据菜单结构图形的流程来修改这些变量,而当需要查询当前菜单指针选中哪一项时,则只要查询这些变量的值即可。

 

由于各级菜单的变量都是独立的,因此对菜单的结构没有限制,适用于设计任意结构的菜单,如果当菜单级数较多,定义的菜单变量较多时,也不要紧,因为我们的菜单设计是先绘制菜单结构图形,再根据图形来编写代码,实际上就是根据图形的描述往代码里填值罢了。

经实践证明,采用以上方法能完全适用于所有任意结构菜单设计,而且该方法的优点在于,有了图形的描述,不仅减化了代码编写的难度,而且还有利于代码维护,提高代码的可读性。

 

符件里是一个不规则结构的菜单测试程序,基于AVR单片机,通过按键来选择,菜单的图形界面在PC机的超级终端上显示,欢迎广大网友测试,并讨