液晶菜单设计(笔记)

源文件目录http://wenku.baidu.com/link?url=gUOQV-sFf-0YcSogu4aFYO3-FjBUG_OsbfyjQKksq_tm44SKQMBa5M2hn370yoGEGcuJqk397eAA8cGaS7O5ho8W-fA3DpWNT1T9pmEqzZm

/*----------------------------------------
-基于变量库和菜单库的树形拓扑液晶菜单数据结构。

----------------------------------------*/
typedef enum {INT=1;DW;FL}VarType;//INT字节型**;DW字型****;FL浮点数***.*
typedef enum {M_MAIN=1;M_VAR;M_SELCET;M_SET;M_CONST}MenuType;//显示主菜单、显示参数、显示单选项、显示设置项、显示常量

struct varlib{
u8 *V_Title;//字节型,存储某个变量的标题如“压力(Kp):";最后0表示显示的接束
VarType VType;
u8 VAddr_H;
u8 VAddr_L;
}VLIB[];

typedef struct {

u8 Menu_Level;//菜单级别
u8 Menu_Index;
u8 *M_Title;//字节型,存储某个菜单的标题如“压力显示界面:";最后0表示显示的接束
MenuType MType=M_MAIN;
u8 var_num;//本菜单要显示的变量数
u8 V_Index;//变量的索引编号即VLIB[]中的索引号
u8 UP_Menu_Index;
}M_Menu;

typedef struct {

u8 Menu_Level;//菜单级别
u8 Menu_Index;//菜单编号
u8 *M_Title;//字节型,存储某个菜单的标题如“压力显示界面:";最后0表示显示的接束
MenuType MType=M_VAR;
u8 var_num;//本菜单要显示的变量数
u8 V_Index;//变量的索引编号即VLIB[]中的索引号
u8 UP_Menu_Index;
}M_VAR;

typedef struct {

u8 Menu_Level;//菜单级别
u8 Menu_Index;//菜单编号
u8 *M_Title;//字节型,存储某个菜单的标题如“压力显示界面:";最后0表示显示的接束
MenuType MType=M_SELCET;
u8 V_Index;//变量的索引编号即VLIB[]中的索引号
u8 Dowm_Menu_Num;
u8 Dowm_Menu_Index;
u8 UP_Menu_Index;
}M_SELCET;

typedef struct {

u8 Menu_Level;//菜单级别
u8 Menu_Index;//菜单编号
u8 *M_Title;//字节型,存储某个菜单的标题如“压力显示界面:";最后0表示显示的接束
MenuType MType=M_SET;
u8 var_num;//
u8 V_Index;//变量的索引编号即VLIB[]中的索引号
}M_SET;

typedef struct {

u8 Menu_Level;//菜单级别
u8 Menu_Index;//菜单编号
u8 *M_Title;//字节型,存储某个菜单的标题如“压力显示界面:";最后0表示显示的接束
MenuType MType=CONST;
u8 Row_count;//显示几行?
u8 *pRow;//各行要显示的内容。
u8 V_Index;//变量的索引编号即VLIB[]中的索引号
}M_CONST;

/*----------------------------------------
-主菜单: 菜单编号、标题内容、菜单类型=1、下属菜单的个数/编号、上层菜单编号(若干数字标示的子菜单)
-显示参数:菜单编号、标题内容、菜单类型=2、所涉及变量的个数及对应编号、上层菜单编号
-选择菜单:菜单编号、标题内容、菜单类型=3、所涉及变量的编号、下属菜单的个数/编号、上层菜单编号(若干数字标示的子菜单)
-设定参数:菜单编号、标题内容、菜单类型=4、设定变量的个数/编号、上层菜单编号
-常量显示菜单:菜单编号、标题内容、菜单类型=5、行号、各行内容、上层菜单编号
-密码屏:密码数字要显示*的特殊处理。
----------------------------------------*/

树形多级循环显示:特点:修改不方便。分层(级)菜单做成二维数组指针void *p[]={&levle1;&levle2;&levle3},第一维为级别,因为各维的数组不一致;同时设定一个层(级别)级的菜单计数器menu_count与二维菜单一一对应,根据按键可以修改菜单计数器以便显示程序根据菜单计数器调用不容的菜单程序;

修改状态(用下划线或反白闪烁)、菜单项的选择用*或>或实心圆圈指示。根据所在的模块根据几个按键以修改和显示“选定项修改计数器”或“参数修改计数器”,注意对于这2个计数器在显示初始化和边界时的处理

屏幕ID+键盘+数据结构:定义一个数据结构:包含一个唯一的状态ID的索引,在按下各键(上、下、左、右、确定、取消、设定、菜单)转向的ID,优点调试维护方便。

左右为光标键,上下位修改值+-1键;确定为进入本级菜单项;ESC为返回上级菜单。

http://wenku.baidu.com/link?url=6SBG-fYaQJPAVr9sgaSaxukS3Hc33oU0cajLprG3jNb6WRl9jlbKXHS0t0X3IF9Sh7x8vY87IfxDGT1cchR2BUO_D9s_01djQ8jmLncyURy

或者按一定格式定义一个SIF文件(即将一整屏幕的内容按显示格式填充。不同屏的显示内容以指针区别)修改比较麻烦。

原文地址:https://www.cnblogs.com/jieruishu/p/4512221.html