摘要:
介绍了在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 语言; LCD 中图分类号:TP311. 1 文献标识码:B 收稿日期:2005 - 11 - 210 引言 由于C 语言的结构性和模块化,采用C 语
优点是可以使用较少的按键来
实现
多种功能的调参;
缺点是使用此
方法
比较占用内存,而且需要提前对要
实现
的功能和界面有个框架,否则在后期更改时候可能比较费事,在构想时候可以使用思维导图来理清自己想要设置的界面。
以下是详细过程:
首先可以在对应的.h文件中设置好所需要的结构体
typedef struct
uint8 current;//当前状态索引号
uint8 up;//向上翻索引号
uint8 down;//向下翻索引号
uint8
摘要:本文以AT89C51
单片机
控制使用比较普遍的YM12864液晶显示器为基础,介绍了
一种
采用分页原理
实现
多级中文菜单操作的
方法
。给出了YM12864主要技术参数、显示特性和的程序。设计的中文菜单具有一定的通用性,只需更改其中的菜单项即可将此设计应用到家电、仪器仪表等设备上,为操作者提供友好方便的中文操作界面。
目前小型的显示器主要有
LCD
和LED,LED显示器只能显示数字和有限个英文字符,不能显示汉字,显示内容不直观,操作人员只能根据约定格式了解显示内容。而
LCD
则可显示各种汉字和图形,尤其能
实现
中文菜单显示,为操作者提供方便友好的操作界面,并且功耗低,因此
LCD
得到
unsigned char up;//上键
unsigned char down;//下键
unsigned char enter; //确认键 void (*current_operation)();//函数指针
}key_table;
//菜单1
void fun1()
printf(“清华北大\n
1、至少有3级菜单,每级菜单至少有6个子项目(第三级的子项目里的内容可以为空),有选择条显示。
2、能修改参数,浮点型数据修改的最大范围是-9999.99到9999.99,整形数据修改的最大范围是:-9999到9999,每个变量的最大值和最小值可以由使用者设定,修改的参数掉电可保存;修改并保存的参数个数至少为20个。
3、具有参数调节界面,在参数调节界面里,可一边执行其他功能函数一边进行调参操作,并且变量调节界面根据变量的属性至少要求具有3种不同的调节界面。
4、若想添加一个新的参数,可以在3分钟完成程序修改并实现功能。
5、切换页面的时候不准出现明显的清屏现象。
6、只允许使用OLED或者IPS/TFT屏幕显示,屏幕的通信协议可以是I2C或者SPI。
提示:所有题目不限单片机型号(例如:STC89C52,STC12,STC15,STM32)、数量,不限传感器,不限数据显示屏幕(例如:1602、12864、OLED、TFT/IPS、),不限无线通信模块(例如:蓝牙、NRF、WIFI模块、无线串口),可以使用成品模块,单片机最小系统可以选择使用开发板上的,也可以自制(推荐自制)。
这个怎么实现,希望大佬可以给一些指点,51单片机哦!
linux2.6.32.2 mini2440平台移植-- UDA1341 音频驱动移植
lvvvhebe: