微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 基于状态机的LCD多级菜单设计方案

基于状态机的LCD多级菜单设计方案

时间:06-25 来源:与非网 点击:

树型拓扑结构,即每一个节点只有一个父节点和若干个子节点。所以,对整个叉树进行遍历即可准确地查找到菜单界面所在的节点。

  结构体实现的链表如图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 多级菜单的实现

  结语

  以上三种多级菜单的实现方式均具有很强的实用性。循环方式和查询方式下,程序结构简单易用,而状态机方式下程序可移植性强。状态机程序设计不仅可以用在人机接口设计中,还可用于嵌入式通信协议等其他场合中。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top