一种新的嵌入式系统菜单设计

时间:2022-10-17 12:41:33

一种新的嵌入式系统菜单设计

【摘要】:在嵌入式系统中,常常会用到LCD来显示一些选项或菜单以帮助用户完成设备操作,复杂系统中会使用成熟的商业系统来完成这个功能(比如WINCE、Android等系统),而一些对显示要求不高或有成本控制需求的场合,则需要开发者直接操作LCD来实现图形界面的设计,在这里介绍一种低成本、易实现、易移植的简易嵌入式系统菜单设计。为了实现快速的菜单界面开发,文章给出了一种以“页面”为载体,以“表格”为导向的实现方式,避免了离散型编程方法导致的难维护,难移植的缺点。

【关键词】:嵌入式系统、菜单、GUI

1.设计详解

与大多数简易GUI的菜单一样,这种方法也是首先实现对LCD或OLED显示器的绘点操作,然后在此基础上使用绘点函数绘制其他图形和字符,这里重点对菜单的跳转实现原理进行详细分析。

1.定义页面

所有需要显示的内容均依托于一种数据类型――“页面”,修改其属性可让其呈现不同的显示内容。该类型中包含页面类型、页面大小、页面跳转表、选项跳转表以及其他必须的数据,程序中需要一个页面指针来指向当前页面,任何情况下改变显示内容实际上都是改变该指针的值。

按照用途分为4种页面,如下图所示:

若使用中发现有些内容不能用这四种“页面”表现出来,在“页面”数据类型基础上增加参数即可,这样不会影响到原有的其他内容。

2.定义跳转表

系统中每一个页面都有自己的唯一编号(该编号在新建页面变量时初始化),整个按键操作主要是依靠3个表格的查询来完成,第一个表格是页面对应表,该表格存储了页面编号与页面变量的一一对应关系,该表格示例如下:

//页面对应表

struct windowToNumber WinToNumTable[]= {

{1,&window_main},

{2,&window_main2},

{3,&window_setup},

{4,&window_option2},

{5,&window_info1},

{6,&window_input1},

};

第二个表格是页面跳转表,该表格确定所有页面的对应关系,这里以一个有6个输入按键(上、下、左、右、确认、返回)的系统为例说明该菜单系统的运行原理,比如第一组的意思就是当按下“上”之后,页面会跳转到“1”号页面,按下“左”会跳转到“”号页面,以此类推,这个表格建立好之后,只需在新建的页面结构体变量初始化时将其页面跳转表指向这个表格中的某一行即可。

unsigned char windowJumpTable[][6]= {

// 上 下 左 右 确认 返回

{1, 1, 2, 2, 3, 1}, //TOP1窗口

{2, 2, 1, 1, 4, 2}, //TOP2窗口

{3, 3, 3, 3, 3, 1}, //OPTION1窗口

{4, 4, 4, 4, 4, 2}, //OPTION2窗口

{21, 21, 21, 21, 21, 10}, //WIN_INFO1窗口

{22, 22, 22, 22, 22, 10}, //WIN_INFO2窗口

};

第三个表格是针对拥有多个选项的二级选项页面制定的,该表格确定所有选项与页面的对应关系,其原理与页面跳转表的使用方法类似,也是从表格中查询出每个选项对应的页面编号并跳转过去,这里最大支持一个页面拥有10个选项。

unsigned char optionJumpTable[][10]= {

{5,5,0,0,0,0,0,0,0,0}, //第一个OPTION

{6,6,0,0,0,0,0,0,0,0}, //第二个OPTION

};

3.运行原理

以一个拥有6个页面的系统为例,初始化以后各指针状态如下图:

一次按键操作的流程如下图:

2.总结

使用这种方法,在设计新产品的人机界面时,就只需要编辑两个跳转表以及一个对应表,并在初始化页面变量时将页面编号等参数初始化成需要的值即可,其他代码则无需修改,这样就能够快速完成界面设计开发,甚至可以编写上位机软件来辅助生成代码,做到可视化嵌入式系统菜单设计,将会大大加快开发速度,并降低出现BUG的概率。

上一篇:浅谈校园安全管理 下一篇:浅谈县级电视台新闻节目策划与创新