基于状态机的LCD多级菜单设计方案
树型拓扑结构,即每一个节点只有一个父节点和若干个子节点。所以,对整个叉树进行遍历即可准确地查找到菜单界面所在的节点。
结构体实现的链表如图2所示。
图2 结构体链表
查询方式与循环方式相比,由于减少了查表次数,因而改善了MPU的效率;但查询方式占用MPU处理时间过长,不适应需要高速处理数据的应用。而且,在查询方式中增加或删除节点对程序改动较大,也不适合移植。
3.3 状态机方式
状态机是由事件驱动,在各个状态之间跳转。采用状态机方式时,只需要提供驱动事件(在此设计中驱动事件为有效的按键按下),然后根据按键扫描返回的键值,决定所要跳转的下一状态。
如图3所示,系统启动初始化是显示Main_menu界面,当按键检测有返回值(即有按键按下)时,根据按下的按键所代表的操作跳转到指定的状态。例如:按下Up或者是down键时,只是在Main_menu界面内高亮显示不同区域;按下Enter时,则要根据原来按下的Up和down键来选择需要跳转的方向,假设在按下Enter之前仅按下一次down键,则key_v的值为2(key_v的值默认为1,即默认选中子菜单的第一项),就跳转为 Sub_menu2界面;按下Esc键时,为从子菜单返回到上一级菜单,如果已经是主菜单了则返回的还是主菜单。
图3 多级菜单的状态图
由于使用的是状态机的方式,只有发生一次有效的按键,状态才会发生一次跳转。而且,仅当Enter和Esc键按下时,才会切换界面。所以即便是在高速MPU应用中,也不会出现屏幕闪烁的效果。
从图3中可以看出,当要发生状态跳转时,目的状态只能是当前状态几个分支预测中的一个,从而不需要遍历整个列表,能够适应高速数据处理的场合。
多级菜单的程序流程如图4所示。系统上电初始化后显示主菜单,键盘扫描可以通过主程序中循环查询或者中断扫描来实现,最终根据键盘返回的键值选择下一状态。
图5为基于状态机的多级菜单的实现。
图4 多级菜单的程序流程图
图5 多级菜单的实现
结语
以上三种多级菜单的实现方式均具有很强的实用性。循环方式和查询方式下,程序结构简单易用,而状态机方式下程序可移植性强。状态机程序设计不仅可以用在人机接口设计中,还可用于嵌入式通信协议等其他场合中。
- 意法半导体数字电视和机顶盒解决方案(02-07)
- 详解:汽车液晶仪表是不是分辨率越高越好?(03-28)
- 基于MSP430F设计的超低功耗电子温度计方案(06-28)
- 基于KS0713的SG12864-5C液晶显示模块的应用(06-30)
- 大屏幕拼接系统的分类及原理(05-14)
- OLED与LCD并非取代与被取代关系(05-27)