一个轻量级的单片机多级菜单实现方法

发布者:WhisperingWaves最新更新时间:2018-03-25 来源: eefocus关键字:轻量级  单片机  多级菜单 手机看文章 扫描二维码
随时随地手机看文章

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

 

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

    1 菜单窗口模块设计

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

    1.1 菜单窗口切换机制

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

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

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

    1.2 菜单窗口显示控制

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

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


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

e.JPG

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


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

 

a.JPG

    结语

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


关键字:轻量级  单片机  多级菜单 引用地址:一个轻量级的单片机多级菜单实现方法

上一篇:飞机航向控制系统仿真动态模型平台的设计
下一篇:基于AT89S52单片机及CPLD的多间隔脉冲产生电路设计

推荐阅读最新更新时间:2024-03-16 15:58

如何使用STM8S单片机的多通道AD转换
STM8S单片机的A/D结构简介: 具有ADC1 ADC2(部分型号没有ADC2)最多提供16个转换通道,A/D转换的各个通道可以执行单次和连续的转换模式。 1.电压0到Vdda; 2.在64和80引脚封装的有独立的Vref,其他的封装形式Vref连接在Vdda 3.续转换形式; 4.时间14个时钟周期; 5.10位转换精度; 6.产生转换结束中断; ADC1结构图 编程中注意的知识点: 过置位ADC_CR1寄存器的 ADON位来开启ADC。当首次置位ADON位时,ADC从低功耗模式唤醒。为了启动转换必须第二次使用写指令来置ADC_CR1寄存器的ADON 位。在转换结束时ADC会保持在上电状态,用
[单片机]
51单片机 nRF24L01 无线模块 测试 按键灯远程控制
入正题,这个实验的功能就是一个发送模块(大的那个板)连接4个按键,通过按动这4个不同的按键来发送4种不同的命令,来控制接收端(小的板)点亮4个不同的灯。 _ !首先是发送模块: 1 void main() 2 { 3 uchar Tx_Buf1 ={1}; //发送的信息1 4 uchar Rx_Buf ; //接收到的数据暂存器,最多32字节数据 5 init_NRF24L01(); 6 LED6=1; //初始灯6熄灭 7 8 while(NRF24L01_Check()) //检查不到24l01则报警 9 { 10 beep=0;
[单片机]
51<font color='red'>单片机</font> nRF24L01 无线模块 测试 按键灯远程控制
51单片机入门 - 定时器的使用技巧
1、定时器和计数器 时钟周期:单片机时序中的最小单位,集体计算的放法就是时钟源分之一 机器周期:单片机完成一个操作的最短时间,=12个时钟周期 定时器:打开定时器后,定时器“存储寄存器”的值经过一个机器周期自动加1,也就是说,机器周期是定时器的计数周期。 2、定时器的寄存器 TMOD —— 工作模式选择寄存器——常用模式1和模式2. TCON —— 控制寄存器(TRn定时器开关) TH/TL —— 定时计数器 3、定时器应用 第一步:设置特殊功能寄存器 TMOD,配置好工作模式。第二步:设置计数寄存器TH0和TL0的初值。第三步:设置TCON,通过TR0置 1来让定时器开始计数。第四步:判断TCON 寄
[单片机]
51<font color='red'>单片机</font>入门 - 定时器的使用技巧
PICl6LF874单片机在电容测量模块中的应用
  电容式传感器已广泛应用于工业、医学、军事等领城。但目前大部分电容测量方法集成化水平低、精度低,因而对电容特别是对微小电容的精确测量始终是一个很重要的内容。振荡法电路结构简单、抗干扰能力差,板间内电容影响测量结果;电桥法利用电桥平衡原理测量电容,测量结果受桥臂电容性能影响较大。本文用到美国 Micmchip公司PICl6LF874单片机,该单片机采用RISC精简指令集、哈佛总线结构、流水线指令方式,具有抗干扰能力强、功耗低、高性能、价格低等特性。   1 PICl6LF874单片机   PICl6系列单片机采用精简指令集(Reduced Instruction Set Computer,RISC)结构,突破了传统单片机对PC
[测试测量]
PICl6LF874<font color='red'>单片机</font>在电容测量模块中的应用
MSP430单片机设计的婴儿睡眠监护系统
本文将介绍利用MSP430单片机设计的婴儿睡眠监护系统,该系统包括多点尿湿检测模块、声音检测模块、声光报警模块和无线传输模块。以低功耗的MSP430为主控,利用DHT11芯片检测温湿度,单片机处理后的温、湿度信息由nRF24L01发送给接收端,当温湿度超出阈值或检测到婴儿啼哭时进行声光报警。经实际测试,该系统运行可靠,低功耗、低成本、高实用性,具有推广价值。 在当今生活和工作节奏日益紧张的社会,女性往往要兼顾工作和家庭,尤其初为人母,既要照顾婴儿,还要料理家务,新妈妈们往往手忙脚乱。婴儿一天中大部分时间都在睡眠,如何对其进行睡眠监护,在婴儿醒来时及时安抚、如何解决尿湿问题一直困扰着忙碌的新妈妈们。绝大多数的家庭选择使用方便的纸尿裤
[单片机]
MSP430<font color='red'>单片机</font>设计的婴儿睡眠监护系统
51单片机洗衣机控制板及C语言程序
51单片机洗衣机控制板及C语言程序,该控制板单片机采用AT89C51单片机,所设计全自动洗衣机功能有:标准洗衣、经济洗衣、单独洗衣以及排水四种洗衣等四种方式,有强洗、弱洗及运行/暂停、显示及报警功能,程序利用利用Protues仿真软件观察洗衣机的运行状态和过程。整个设计能达到预想的设计效果。 #include 'reg51.h' #define uchar unsigned char #define uint unsigned int #define Enable(); EA=1; #define Disable(); EA=0
[单片机]
51<font color='red'>单片机</font>洗衣机控制板及C语言程序
基于51单片机驱动A4988实现步进电机逆时针转动
一、简介 A4988 是一款完全的微步电动机驱动器,带有内置转换器,易于操作。该产 品可在全、半、1/4、1/8 及 1/16 步进模式时操作双极步进电动机,输出驱动 性能可达 35 V 及 ±1 A。A4988 包括一个固定关断时间电流稳压器,该稳压器 可在慢或混合衰减模式下工作。转换器是 A4988 易于实施的关键。只要在“步 进”输入中输入一个脉冲,即可驱动电动机产生微步。无须进行相位顺序表、高 频率控制行或复杂的界面编程。 二、接线 典型接线图 实际接线 此处为方便 MS1-MS3不接ENABLE 低电平有效 此处不接 有需要可自行连接配置 A4988 模块 STC89C52RC 步进电机 电源 DIR P
[单片机]
基于51<font color='red'>单片机</font>驱动A4988实现步进电机逆时针转动
基于Atmega16L单片机的高精度频率调节器
1 引言 在现代化工业生产与高精度测试中,我们需要相当精确的频率来帮助判断设备性能指标。而且我们希望能够微调该频率。采用压控振荡器得到的频率不够精确,微调频率步骤烦琐,耗时漫长,因此有些测试项目限制了压控振荡器的使用。 Mega系列单片机是Atmel公司于2002年起陆续推出的。这款AVR增强型单片机具有速度快,抗干扰能力强,价格低廉等诸多优点。为了加快AVR单片机的软件编制,Atmel以及第三方提供的开发工具多种多样,程序开发方便有效。该单片机内部FLASH结构功能灵活,加锁后很难解密,可以最大限度地保护知识产权。AVR单片机可以广泛应用于通信、野外测试、汽车电子、医疗器械等领域,并且适用于各种低电压、低功耗的场合。 本
[单片机]
基于Atmega16L<font color='red'>单片机</font>的高精度频率调节器
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved