当前位置:首页 > 单片机 > 单片机
[导读] 在单片机设计中,往往需要在显示屏上显示多级操作菜单,每级菜单都有一些菜单项和对应的按键操作,以及为响应各种操作而执行的后续处理程序。参考文献以函数指针为结构元素,把整个菜单结构拉伸成一个

单片机设计中,往往需要在显示屏上显示多级操作菜单,每级菜单都有一些菜单项和对应的按键操作,以及为响应各种操作而执行的后续处理程序。参考文献以函数指针为结构元素,把整个菜单结构拉伸成一个结构数组,内部包含了全部菜单项。这种方法没有将菜单项数据与功能函数分开设计,而把菜单项数据写在功能函数中,当菜单项数据需要改变时,必须修改功能函数,这在很大程度上限制了程序的通用性,不利于程序的维护。参考文献在前者的基础上略加改进,在原结构体中增加了菜单项显示文字和按键复用标识,这使得结构体较为庞大,且菜单项的文字内容非常固定,保存在EEPROM中,无法灵活改变显示内容和位置。参考文献引入Windows系统下的窗口和消息机制实现多级菜单设计,该方法需要维护堆栈、消息队列和窗口定时器等,设计过于复杂。

本文旨在提供一个轻量级的单片机多级菜单实现方法,以较少的系统资源消耗和简单方便的方法完成菜单设计。考虑到菜单程序需要具备3个基本要素:一是每个菜单窗口要显示的内容;二是每个窗口对应的按键定义与响应;三是窗口内菜单项之间切换和窗口之间的切换机制。因此,将菜单分为菜单窗口模块和键盘处理模块两部分,独立进行设计。

1 菜单窗口模块设计

菜单窗口模块主要功能是按照菜单窗口切换机制,实时完成窗口的显示控制。

1.1 菜单窗口切换机制

菜单窗口切换机制包括两点:一是不同窗口之间切换效果的实现;二是窗口内的同级菜单项之间滚动切换效果的实现。为实现上述功能,定义了两个结构体MenuState和MenuItEMS。MenuState定义如下:



MenuState是一个与窗口跳转和窗口显示有关的结构体数组,用于全局调度各窗口之间的切换。其中,CurIndex是窗口的索引值,用来标识当前窗口。UPINdex、DnIndex、BackIndex用来标识当有“上页”、“下页”、“返回”按键操作时,程序应转向的窗口。其取值为255时,表示无转向窗口,取值在0~254时表示要转向的窗口索引,因此本设计可支持255个菜单窗口,足以满足工程应用需要。CurOperate是函数指针,用来指向当显示当前窗口时,应执行的窗口显示控制程序,以实现窗口的显示。
MenuItems是一个菜单项结构体,用以保存当前窗口的全部菜单项的显示位置和内容,这个结构体的内容是随着窗口的切换,在新窗口初始化过程中被更新的。这样就满足了窗口的切换和菜单项之间反显滚动的需要。由于只保存与当前窗口有关的菜单项,因此,该结构体的系统资源消耗很小。

Items包含了当前窗口内的所有菜单项,考虑到有的菜单项是没有转向窗口的,所以对应这种菜单项设置该值为255。当显示一个窗口时,Items会被填入当前窗口的菜单项信息,并且填写时是按照菜单项的先后顺序依次构建的。这样当有“上移”、“下移”按键操作时,就可迅速找到目标行,并反显该行。

1.2 菜单窗口显示控制

窗口显示部分是将每一个菜单窗口都以一个独立命名的函数形式封装,函数里包括对Items进行赋值,在显示屏指定位置显示当前窗口的菜单项,以及根据需要完成画点、画线、画按钮等绘图操作。这些函数彼此功能独立,分别对应不同的菜单窗口,仅在窗口切换时赋予CurOperate即可,因此非常适合多人合作开发。

需要说明的是,菜单窗口的显示控制是基于显示屏的,工程中常用的是TFT屏或点阵液晶屏,使用时需要实现显示屏的驱动程序,对屏进行初始化、读、写等操作,由于不是本文重点,因此这部分内容略过。


2 键盘处理模块设计
单片机的菜单操作多是以按键形式完成的,一般会有多个按键,分别对应不同功能。此外,也要考虑按键复用问题,也就是说,同一位置的按键在不同窗口内可能会有不同的功能定义,因此,要在程序中对按键进行采集、解析键值,以正确响应操作。按键处理的流程如图1所示。


例如当按下“上页”按键时,程序会接收到按键,根据当前所处的窗口解析该键定义,判断为“上页”;然后在窗口结构体数组Menu Index中取得要转向窗口的索引值,根据索引值取得该窗口显示控制程序的指针,并释放菜单项结构体ItEMS,执行该窗口显示控制程序。代码如下:


3 应用实例
在某装备模拟项目中,以AT89C52芯片为核心器件,显示部分采用图形点阵液晶显示模组HG3202405V2-B-LWH-LV,外部复合功能按键6个,实现菜单设计。部分代码如下:

主菜单窗口如图2所示。

结语

单片机的多级菜单设计是项目开发中较为常见的问题,本文给出了解决方案并在项目中得到应用。其特点表现在两个方面:一是系统开销小,仅靠MenuState和MenuItEMS两个结构体和几个变量即可维护各窗口和窗口内的同级菜单项;二是模块各部分功能独立性强,各菜单窗口的显示控制程序彼此独立、互不影响,键盘处理程序也自成一体。因此,该方案模块化程度高,开发过程简单方便,扩展性好,可移植性强,适于团队合作开发和维护。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

8位单片机在嵌入式设计领域已经成为半个多世纪以来的主流选择。尽管嵌入式系统市场日益复杂,8位单片机依然不断发展,积极应对新的挑战和系统需求。如今,Microchip推出的8位PIC®和AVR®单片机系列,配备了先进的独立...

关键字: 单片机 嵌入式 CPU

在嵌入式系统开发中,程序烧录是连接软件设计与硬件实现的关键环节。当前主流的单片机烧录技术已形成ICP(在电路编程)、ISP(在系统编程)、IAP(在应用编程)三大技术体系,分别对应开发调试、量产烧录、远程升级等不同场景。...

关键字: 单片机 ISP ICP IAP 嵌入式系统开发

在嵌入式系统开发中,看门狗(Watchdog Timer, WDT)是保障系统可靠性的核心组件,其初始化时机的选择直接影响系统抗干扰能力和稳定性。本文从硬件架构、软件流程、安全规范三个维度,系统分析看门狗初始化的最佳实践...

关键字: 单片机 看门狗 嵌入式系统

本文中,小编将对单片机予以介绍,如果你想对它的详细情况有所认识,或者想要增进对它的了解程度,不妨请看以下内容哦。

关键字: 单片机 开发板 Keil

随着单片机系统越来越广泛地应用于消费类电子、医疗、工业自动化、智能化仪器仪表、航空航天等各领域,单片机系统面临着电磁干扰(EMI)日益严重的威胁。电磁兼容性(EMC)包含系统的发射和敏感度两方面的问题。

关键字: 单片机 电磁兼容

以下内容中,小编将对单片机的相关内容进行着重介绍和阐述,希望本文能帮您增进对单片机的了解,和小编一起来看看吧。

关键字: 单片机 复位电路

在这篇文章中,小编将为大家带来单片机的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 单片机 异常复位

今天,小编将在这篇文章中为大家带来单片机的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: 单片机 仿真器

单片机将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对它的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 单片机 中断 boot

一直以来,单片机都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来单片机的相关介绍,详细内容请看下文。

关键字: 单片机 数字信号 模拟信号
关闭