打印
[ZLG-MCU]

单片机C语言下LCD多级菜单的一种实现方法

[复制链接]
6499|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bairan168|  楼主 | 2010-11-15 17:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
图形点阵式液晶可显示用户自定义的任意符号
和图形,并可卷动显示。它作为单片机系统人机交
互界面的重要组成部分被广泛应用于实时检测和显
示的仪器仪表中,例如手机上的显示屏就是图形点
阵液晶。
采用图形点阵式液晶显示较之其它显示方式主
要有以下优点:
(1) 工作电压低、功耗极低。工作电压仅为3~
5 V ,工作电流≤10 μA/ cm2 ,特别适用于低功耗的
仪器仪表中。
(2) 液晶显示属被动显示,受外界光线干扰小。
(3) 图形点阵式液晶可显示的信息量大、分辨
率高。
(4) 不产生电磁干扰。
(5) 可靠性高,使用寿命长。
本文所介绍的LCD 采用128 ×64 点阵的液晶
屏,因此可显示16 ×16 点阵的汉字4 行8 列。菜单
为多级嵌套形式,最长的有13 层,主要完成对某个
测点各方面的设置或查询,可通过“向上”、“向下”、
“回退”、“确认”4 个键或遥控器来实现对菜单的选
择。具体功能:
“向上”键:在本层菜单的项目中向上移动进行
选择;
“向下”键:在本层菜单的项目中向下移动进行
选择;
“回退”键:取消本层的菜单设置,返回上层菜
单;
“确认”键:确认本层的菜单设置,进入下级菜
单。
可根据用户在菜单中的选择项对测点进行某些
设置,或者进行某些特殊的显示,例如对某个测点的
实时曲线显示等。
程序设计
根据需求,首先建立一个结构,并定义一个结构
变量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) } ,   / / 第一层
程序设计
根据需求,首先建立一个结构,并定义一个结构
变量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) } ,   / / 第一层

相关帖子

沙发
思行合一| | 2010-11-16 23:32 | 只看该作者
mark

使用特权

评论回复
板凳
fuxiangbo| | 2010-11-19 17:31 | 只看该作者
有时间来研究,前端时间做了个简单菜单 折腾的厉害

使用特权

评论回复
地板
maoyanketi| | 2010-11-19 22:59 | 只看该作者
mark

使用特权

评论回复
5
amini| | 2010-11-22 15:58 | 只看该作者
嗯,有时间好好看看。

使用特权

评论回复
6
ty新气象| | 2010-11-23 10:11 | 只看该作者
嗯,不错.

使用特权

评论回复
7
午时龙且| | 2010-11-24 10:45 | 只看该作者
好牛啊

使用特权

评论回复
8
zhoujiewen| | 2010-11-27 20:11 | 只看该作者
值得学下!

使用特权

评论回复
9
米其林r| | 2010-11-27 23:08 | 只看该作者
留下慢慢看

使用特权

评论回复
10
sunboy20021| | 2011-10-27 15:51 | 只看该作者
慢慢研究!

使用特权

评论回复
11
shuaibaobao| | 2011-11-23 16:02 | 只看该作者
mark 有事件好好看看。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

776

帖子

2

粉丝