单片机C语言下LCD多级菜单的一种实现方法
摘要:
介绍了在C 语言环境下,在LCD 液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个
结构紧凑、实用的程序模型。
关键词: 液晶显示屏; 多级菜单; 单片机; C 语言; LCD
中图分类号:TP311. 1 文献标识码:B
收稿日期:2005 - 11 - 21
0 引言
由于C 语言的结构性和模块化,采用C 语言编写的程序容易阅读和维护,还有很好的可移植性。本文介绍一种用C 语言实现的LCD 多级菜单的方法,该方法已成功应用在煤矿安全监测设备上。
1 硬件环境及LCD 菜单实现的功能
图形点阵式液晶可显示用户自定义的任意符号和图形,并可卷动显示。它作为单片机系统人机交互界面的重要组成部分被广泛应用于实时检测和显示的仪器仪表中,例如手机上的显示屏就是图形点阵液晶。
采用图形点阵式液晶显示较之其它显示方式主要有以下优点:
(1) 工作电压低、功耗极低。工作电压仅为3~5 V ,工作电流≤10 μA/ cm2 ,特别适用于低功耗的仪器仪表中。
(2) 液晶显示属被动显示,受外界光线干扰小。
(3) 图形点阵式液晶可显示的信息量大、分辨率高。
(4) 不产生电磁干扰。
(5) 可靠性高,使用寿命长。
本文所介绍的LCD 采用128 ×64 点阵的液晶屏,因此可显示16 ×16 点阵的汉字4 行8 列。菜单为多级嵌套形式,最长的有13 层,主要完成对某个测点各方面的设置或查询,可通过“向上”、“向下”、“回退”、“确认”4 个键或遥控器来实现对菜单的选择。具体功能:“向上”键:在本层菜单的项目中向上移动进行
选择;“向下”键:在本层菜单的项目中向下移动进行选择;“回退”键:取消本层的菜单设置,返回上层菜
单;“确认”键:确认本层的菜单设置,进入下级菜单。可根据用户在菜单中的选择项对测点进行某些设置,或者进行某些特殊的显示,例如对某个测点的实时曲线显示等。
2 程序设计
根据需求,首先建立一个结构,并定义一个结构变量KbdTabSt ruct 。结构变量就是把多个不同类型的变量结合在一起形成的一个组合型变量,构成一个结构的各个变量称为结构元素。该结构中共有6 个结构元素,分别是5 个字符型和1 个指针变量,5 个字符型变量分别为当前及各个按键的索引号,也就是操作的状态号,最后1 个指针变量指向需执行函数。这样就可以做一个结构数组,在结构数组里为每一个菜单项编制一个单独的函数,并根据菜单的嵌套顺序排好本菜单项的索引号,以及本级菜单项的上、下卷动的索引号和上、下级菜单的索号。
具体程序如下所述:
typedef st ruct
{
uchar KeyStateIndex ; / / 当前状态索引号
uchar KeyDnState ; / / 按下“向下”键时转向的状态索引号
uchar KeyUpState ; / / 按下“向上”键时转向的状态索引号
uchar KeyCrState ; / / 按下“回车”键时转向的状态索引号
uchar KeyBackState ; / / 按下“退回”键时转向的状态索引号
void ( 3 CurrentOperate) ( ) ; / / 当前状态应该执行的
功能操作
} KbdTabSt ruct ;
# define SIZE - OF KEYBD - MENU 55 / / 菜单总长度
KbdTabSt ruct code KeyTab[ SIZE - OF - KEYBD - MENU ] =
{
{0 ,0 ,0 ,1 ,0 , ( 3 MainJob1) } ,
{1 ,7 ,2 ,8 ,0 , ( 3 Dsp Point) } , / / 第一层
{2 ,1 ,3 ,8 ,0 , ( 3 DspCurve) ) , / / 第一层
{3 ,2 ,4 ,36 ,0 , ( 3 Dsp Kout) } , / / 第一层
{4 ,3 ,5 ,50 ,0 , ( 3 DisCloseDown) } , / / 第一层
{5 ,4 ,6 ,8 ,0 , ( 3 ModifyPoint) } , / / 第一层
{6 ,5 ,7 ,52 ,0 , ( 3 SetCloseDown) } , / / 第一层
{7 ,6 ,1 ,0 ,0 , ( 3 Cancel) } , / / 第一层
…
…
{52 ,53 ,53 ,0 ,1 , ( 3 OkSetCloseDown1) } ,
{53 ,52 ,52 ,0 ,1 , ( 3 OkSetCloseDown2) } ,
{54 ,0 ,0 ,0 ,0 , ( 3 Disable) } ,
} ;
void Get Keylnput (void)
{
switch ( status &0xf0)
{
case 0xe0 :/ / 回车键,找出新的菜单状态编号
…
KeyFuncIndex = KeyTab[ KeyFuncIndex ] . KeyCrState ;
…
break ;
case 0xb0 :/ / 向下键,找出新的菜单状态编号
…
KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyDn2
State ;
…
break ;
case 0xd0 :/ / 向上键,找出新的菜单状态编号
…
KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyUp2
State ;
…
break ;
case 0x70 :/ / 回退键,找出新的菜单状态编号
…
KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyBack2
State ;
…
break ;
case 0 ;
ret urn ; / / 错误的处理
break ;
}
KeyFuncPt r = KeyTab[ KeyFuncIndex ] . CurrentOperate ;
( 3 KeyFuncPt r) () ; / / 执行当前按键的操作
}
3 结语
本文介绍了C 语言编程的特点,简单介绍了LCD 作为人机界面的特征,并介绍了一种用C 语言实现的LCD 多级嵌套菜单结构。该结构紧凑、性能稳定可靠,已多次使用在安全监测设备中。
系统要运行可靠,对其有关设备是否能够安全运行地检测也是很重要的一环。因而程序对系统所涉及的设备都进行了全面监测,主要有电动球阀故障、出水口电动闸阀故障、水位传感器故障、水泵启停时间、运行电流、电动机温度、电动机和水泵轴承温度、出水压力、高压柜状态、高压柜故障、阀门故障等,并视情况进行事故自动处理或报警要求检修。本系统中各个机组有3 种运行选择:自动、半自动和手动。通常情况下按照水位高低和系统时间自动选择是否开泵,同时观察水位变化率从而选择需要开几台泵。在半自动方式下,一旦该泵的开泵信号被监测到,系统将自动根据当前情况用射流方式或者真空泵方式来抽真空,当真空度达到要求后启动电动机, 同时观测出水口处的压力, 当其大于5 MPa时打开出水口处的电动闸阀实施正常排水。为了完善系统,防止意外情况的发生,同时为了便于检修,还保留了手动方式,该方式在正常运行情况下是不使用的。.
(转)
单片机C语言下LCD多级菜单的一种实现方法的更多相关文章
- C语言中返回字符串函数的四种实现方法 2015-05-17 15:00 23人阅读 评论(0) 收藏
C语言中返回字符串函数的四种实现方法 分类: UNIX/LINUX C/C++ 2010-12-29 02:54 11954人阅读 评论(1) 收藏 举报 语言func存储 有四种方式: 1.使用堆空 ...
- C语言中返回字符串函数的四种实现方法
转自C语言中返回字符串函数的四种实现方法 其实就是要返回一个有效的指针,尾部变量退出后就无效了. 有四种方式: 1.使用堆空间,返回申请的堆地址,注意释放 2.函数参数传递指针,返回该指针 3.返回函 ...
- 用R语言实现对不平衡数据的四种处理方法
https://www.weixin765.com/doc/gmlxlfqf.html 在对不平衡的分类数据集进行建模时,机器学**算法可能并不稳定,其预测结果甚至可能是有偏的,而预测精度此时也变得带 ...
- linux下忘记mysql密码的几种找回方法
今天我们主要是讲一下关于linux忘记mysql密码处理方法,下面提供了5种linux忘记mysql密码找回方法哦.方法一(先进入root权限):# /etc/init.d/mysql stop# m ...
- iOS边练边学--级联菜单的两种实现方法
一.方法1:如图,图中的两个tableView分别交给两个控制器来管理 重点难点:categoryTableView被点击之后,subcategoryTableView要取得相应的数据进行刷新,所以s ...
- C语言中结构体(struct)的几种初始化方法
转自https://www.jb51.net/article/91456.htm 本文给大家总结的struct数据有3种初始化方法 1.顺序 2.C风格的乱序 3.C++风格的乱序 下面通过示 ...
- python下timer定时器常用的两种实现方法
方法一,使用线程中现成的: 这种一般比较常用,特别是在线程中的使用方法,下面是一个例子能够很清楚的说明它的具体使用方法: #! /usr/bin/python3 #! -*- conding: u ...
- Web前端开发实战6:CSS实现导航菜单结合二级下拉式菜单的简单变换
前面几篇博文都在讲导航菜单和二级下拉式菜单,事实上有非常多方法都能够实现的.详细的情况还要视情况而定. 在后面学习到jQuery框架之后,会有更丰富的动画效果.因为在学习Ajax和jQuery的初步阶 ...
- 轻量级多级菜单控制框架程序(C语言)
1.前言 作为嵌入式软件开发,可能经常会使用命令行或者显示屏等设备实现人机交互的功能,功能中通常情况都包含 UI 菜单设计:很多开发人员都会有自己的菜单框架模块,防止重复造轮子,网上有很多这种菜单框架 ...
随机推荐
- myeclipse2014破解版本链接
myeclipse2014破解版本下载链接 http://www.my-eclipse.cn/#download myeclipse2014破解版本汉化链接 https://blog.my-eclip ...
- 用代码编辑数据库T-SQL语句
1.创建表 create table Car( Code varchar(50) primary key, Name varchar(50), Time date, Price float, Bran ...
- Android开发之onActivityResult()中的resultCode为0,intent为null的解决办法
BUG:昨天在使用activity之间传值的时候,遇到了一个bug,该bug为:Activity A启动Activity B,然后在Activity B中取到一个值,并通过back键返回到Activi ...
- bzoj2251
以前看到这道题想到的是SA,做起来不是很美观 学了SAM之后,这题简直是随便搞 ..,'] of longint; s,sa,mx,w,fa:..] of longint; i,n,last,t:lo ...
- uva1639 Candy
组合数,对数. 这道题要用到20w的组合数,如果直接相乘的话,会丢失很多精度,所以用去对数的方式实现. 注意指数,因为取完一次后,还要再取一次才能发现取完,所以是(n+1)次方. double 会爆掉 ...
- Qt之自定义界面(窗体缩放-跨平台终极版)
简述 通过上一节内容,我们实现了窗体的缩放,功能很不错,但是很遗憾-不支持跨平台!如果对于多平台来说,这是一个硬伤,所以,我们急需要一个能够支持跨平台的实现方案. 在网上看到过很多不同的实现方式,多多 ...
- sql2005主从数据库同步配置
网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求:这时候我们可以考虑使用主从库.主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据的 ...
- I.MX6 Goodix GT9xx touchscreen driver porting
/************************************************************************ * I.MX6 Goodix GT9xx touch ...
- angular js 指令的数据传递 及作用域数据绑定
<div my-directive my-url="http://google.com" my-link-text="Click me to go to Googl ...
- 【大数阶乘】NYOJ-28
大数阶乘 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入 输入一个整数 ...