摘要:

    介绍了在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多级菜单的一种实现方法的更多相关文章

  1. C语言中返回字符串函数的四种实现方法 2015-05-17 15:00 23人阅读 评论(0) 收藏

    C语言中返回字符串函数的四种实现方法 分类: UNIX/LINUX C/C++ 2010-12-29 02:54 11954人阅读 评论(1) 收藏 举报 语言func存储 有四种方式: 1.使用堆空 ...

  2. C语言中返回字符串函数的四种实现方法

    转自C语言中返回字符串函数的四种实现方法 其实就是要返回一个有效的指针,尾部变量退出后就无效了. 有四种方式: 1.使用堆空间,返回申请的堆地址,注意释放 2.函数参数传递指针,返回该指针 3.返回函 ...

  3. 用R语言实现对不平衡数据的四种处理方法

    https://www.weixin765.com/doc/gmlxlfqf.html 在对不平衡的分类数据集进行建模时,机器学**算法可能并不稳定,其预测结果甚至可能是有偏的,而预测精度此时也变得带 ...

  4. linux下忘记mysql密码的几种找回方法

    今天我们主要是讲一下关于linux忘记mysql密码处理方法,下面提供了5种linux忘记mysql密码找回方法哦.方法一(先进入root权限):# /etc/init.d/mysql stop# m ...

  5. iOS边练边学--级联菜单的两种实现方法

    一.方法1:如图,图中的两个tableView分别交给两个控制器来管理 重点难点:categoryTableView被点击之后,subcategoryTableView要取得相应的数据进行刷新,所以s ...

  6. C语言中结构体(struct)的几种初始化方法

    转自https://www.jb51.net/article/91456.htm     本文给大家总结的struct数据有3种初始化方法 1.顺序 2.C风格的乱序 3.C++风格的乱序 下面通过示 ...

  7. python下timer定时器常用的两种实现方法

    方法一,使用线程中现成的:   这种一般比较常用,特别是在线程中的使用方法,下面是一个例子能够很清楚的说明它的具体使用方法: #! /usr/bin/python3 #! -*- conding: u ...

  8. Web前端开发实战6:CSS实现导航菜单结合二级下拉式菜单的简单变换

    前面几篇博文都在讲导航菜单和二级下拉式菜单,事实上有非常多方法都能够实现的.详细的情况还要视情况而定. 在后面学习到jQuery框架之后,会有更丰富的动画效果.因为在学习Ajax和jQuery的初步阶 ...

  9. 轻量级多级菜单控制框架程序(C语言)

    1.前言 作为嵌入式软件开发,可能经常会使用命令行或者显示屏等设备实现人机交互的功能,功能中通常情况都包含 UI 菜单设计:很多开发人员都会有自己的菜单框架模块,防止重复造轮子,网上有很多这种菜单框架 ...

随机推荐

  1. 学习Hadoop不错的系列文章

    1)Hadoop学习总结 (1)HDFS简介 (2)HDFS读写过程解析 (3)Map-Reduce入门 (4)Map-Reduce的过程解析 (5)Hadoop的运行痕迹 (6)Apache Had ...

  2. UVa 524 Prime Ring Problem【回溯】

    题意:给出n,把从1到n排成一个环,输出相邻两个数的和为素数的序列 照着紫书敲的, 大概就是这个地方需要注意下,初始化的时候a[0]=1,然后dfs(1),从第1个位置开始搜 #include< ...

  3. RPi 2B Raspbian SD卡内部架构

    /***************************************************************************** * RPi 2B Raspbian SD卡 ...

  4. Java [Leetcode 278]First Bad Version

    题目描述: You are a product manager and currently leading a team to develop a new product. Unfortunately ...

  5. (转)Linux上的Shebang符号(#!)

    https://linux.cn/article-3664-1.html 本文了将给你简单介绍一下Shebang(”#!”)这个符号. 首先,这个符号(#!)的名称,叫做”Shebang”或者”Sha ...

  6. ubuntu 安装 ia32-libs

    很多软件只有32位的,有的依赖32位库还挺严重的:从ubuntu 13.10已经废弃了ia32-libs,但可以使用多架构,安装软件或包apt-get install program:i386.有的还 ...

  7. (2)Spring集成Quartz定时任务框架介绍和Cron表达式详解

    在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但 ...

  8. 【转】Android 如何在Eclipse中查看Android API源码 及 support包源码

    原文网址:http://blog.csdn.net/vipzjyno1/article/details/22954775 当我们阅读android API开发文档时候,上面的每个类,以及类的各个方法都 ...

  9. asp.net MVC 应用程序的生命周期(上)

    首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束.那么MVC应用程序从发出请求到获得响应,都做了些什么呢? 本文我们会详细讨论MVC应用程序一个请求的 ...

  10. CPC23-4 K.喵喵的神·数

    题意:给出整数T,P,求c(T,P) mod P. 解法:用卢卡斯定理. 卢卡斯定理:解决c(n,m) mod p问题.Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p) ...