菜单设计

  • 格式:pdf
  • 大小:264.98 KB
  • 文档页数:5

Ox05,OxFF,Ox09,0xFF,0xFF,0xFF,OxFF,
0xFF,OxFF,OxFF,0xFF,OxFF,OxFF,0xFF,OxFF,
0xFF,0xFF,0xFF,OxFF,OxFF,OxFF,
OxFF,OxFF,OxFF,OxFF,0xFF,OxFF,OxFF,
0xFF,OxFF,//0“北京” 0xFF,O)(FF,O)(FF,O)【FF,0】(FF,OXFF,O)【FF,
Ox24);//设置地址指针,即要显示的位置 lcdDatWrite(dat);//先写要显示的数据 lcdcmdwrite(oxco);//再写命令码,命
令完成写一次数据。且地址指针自动增加 ) (3)根据数组内容写满屏
void LCD fullscreenwrite(uchar*p)
//数组为480个元素,描述了屏幕被分为 480(30×16)个小块后各块内的所显示的数据VoC/D T
RST、rdd
■c] V∞t
DⅨ卜7 ‘.
r。
SLA
FS
SLK
图2 AT89C51与LCM2401281连线原理图 Fig.2 Connection of AT89C51 and LCM240128l
图2中AT89C51的P3.7,P3.6,P3.1, P3.4,P3.3,P3.2分别与LCM240128l的控制 线/WR,/RD,CE,C/D,/RST,FS相连,PO口与 数据总线DBO~DB7相连,单片机通过控制线和 数据线操纵液晶显示器显示设定的菜单。 3.2软件设计
{ uint i:
ucharj;

for(i—O;i<480;i++)

if(。(p+i)!一oxFF)//是否为标志值?
for(j=O;j<16;j++)

//从字库里调字模显示,字库ziku
[]为自建字模数组
lcdXYWrite(i%30,i/30‘8+j,ziku
[。(p+i)。32+2’j],1);//写左边两个方格
第22卷第5期 2007年lo月
液晶 与显 示
Chinese JournaI of Liquid Cfystals and Displays
文章编号:1007—2780(2007)05一0634一05
V。1.22,No.5 0ct.。2007
基于点阵图形液晶模块的多菜单设计
陈伟锋,高宝建,汪 俊,张 远,黄美茹
lcdXYWrite(i%30+1,i/30’8+j,
ziku[。(p+i)’32+2’j+1],1);//写右边两个
方格

) } (4)数组建立 建立网格化屏幕显示内容的对应数组是本系 统设计的重要一步,也是简化液晶显示编程、提高 编程效率的关键所在。示例如下: 在屏幕左上角显示“北京”二字建立的数 组为: uchar xdata meun ol[480]一{
万方数据





第22卷
配兼容。具有4 kB的可编程或可擦除的程序存 储器‘引。本系统通过外部程序存储器和数据存储
器扩展来存放显示用的字模和菜单数组,硬件主 要连接如图2所示。
l程序

P3.7
I存储器

P3.6
P3.1
P3.4
P3.3
I熟P
Po.乱P1D.7
一 ~
P3.2
册R
mD
_ FG
VM
,cE
采用以往的做法——编制出每个不同菜单专 用的显示程序,这在应用于显示少量菜单的系统 尚可,当用于多菜单显示的场合时,编程烦琐、任 务量大,而且效率也不高。本文介绍一种快速显 示和修改多个不同中英文菜单界面的程序设计方 法,并结合AT89C51单片机与LCM2401281液 晶模块组成的系统编程实现了该方法。该方案已 成功应用于中文菜单显示的电力测量仪中,效果
明显。
2 设计思路
对于点阵图形液晶显示器来说,汉显菜单的 设计就是如何编程将汉字按一定的格式在屏幕上 显示出来口]。一般来说,单片机系统为了能显示 汉字,必须使用汉字字库Ⅲ。使用汉字字库有两
收稿日期:2007一05·09;修订日期:2007一06一04
种方法:一种方法是将汉字字库写入EPROM,扩 展下位机的寻址能力。另一种是将要用的汉字的 点阵存入嵌入式系统的程序存储器中,使用时用 查表的方式读取这些汉字的点阵畸]。其中,前者 编程简单,但硬件复杂。后者硬件简单,不需扩展 下位机的寻址能力,但将汉字字模作为常量数组 会大大占用RoM空间。
这样,一个菜单界面的格式与内容便由一个
目,器
-(a)

Fig.1
图1。北”和。京” Characters。bei一(a)and“jing”(b)
数组确定了,不同界面对应的数组大小相同,数组 元素代表的意义一致,且其取值均为两位的16进 制编码,故可方便用同一函数进行处理。
通过对屏幕网格化后建立每屏菜单的对应数 组解决了两个问题:首先,要显示的每个菜单无需 再编专门的处理程序,只需建立与之对应的数组, 这样的数组建立比较简单方便,就如同向方格纸 中填写汉字一样,从而大大提高了菜单的设计速 度;其次,该数组存储在程序存储器中不会占据很 大的空间却大大减少了代码量,显著提高了液晶 屏的显示速度。
的接口问题,本设计采用C语言。实现该法的部 分程序如下:
(1)写命令与数据的子程序 写无参命令:void lcdCmdWrite(uchar ne训:md) 写数据:void lcdDatwrite(uchar newDat) 写带参命令:void lcdDCWrite(uchar datl,
uchar dat2。uchar cmd)
需要说明的是,该方法在方便定位的同时是 以牺牲显存为代价,就是说采用该法的显示界面 不是很紧凑。所幸的是通常要求非常紧凑的场合 并不多见。重要的是完全可以在无内容的区域通 过编写语句再插入其他显示内容。例如对于表格 来说可以通过数组显示出竖线和表格内容,表格 横线通过划线语句实现等。另外,此方法并不局 限于汉字显示,在需要英文字母、阿拉伯数字及自 定义画图元素的显示时同样切实可用。实际上, 在所设计的系统中,菜单的显示包括中英文字符、 标点符号及表格等。经实际使用显示,采用该方 法完全达到了设计要求,并且考虑到以后系统的 升级所引起菜单的增加甚至格式的变化,该方法 预留的编号空间都可以满足汉字的扩充和画图元 素的增加,方便菜单的修改及扩充。
在软件设计中采用模块化结构,使程序清晰 易编,便于调试扩展。编程采取以下流程:首先编 制出状态查询、写命令、写数据、延时等基本子程 序,然后在此基础上编写带参命令、LCD复位、初 始化、清屏、任意位置写一字节数据、显示一屏的 通用处理函数等功能程序模块。主要的软件流程 图见图3和图4。
单片机常用的编程语言有两种:汇编语言和 C语言[。]。综合两者特点及显示模块与整个系统
关键词:液晶显示模块;菜单设计;单片机
中图分类号:TN27;TN702
文献标识码:A
1引

液晶显示器具有低电压、微功耗、寿命长、体 积小,使用方便等诸多优点,在测量和控制领域被 广泛使用,它已成为测量结果显示和人机对话的 重要工具[1’2]。在液晶显示器使用日趋成熟的今 天,可显示图文并茂的图形点阵式液晶显示器倍 受青睐。在这类显示器的使用中,如何方便快捷 地设计出显示多个内容完整、界面友好的菜单程 序成为最关注的问题之一。
图4写满屏的程序流程
Fig.4 Flow chart of writing the whole screen

l以菜单A对应数 l组为参写满屏

以菜单B对应数 组为参写满屏

以菜单C对应数 组为参写满屏
Fig.3
图3显示A、B、C 3个不同菜单的流程。
Flow chan of displaying three different menu A,B and C.
万方数据
第5期
陈伟锋,等:基于点阵图形液晶模块的多菜单设计
幕上的最小操作单位。控制屏幕显示的过程实际 就是向相应显存中送入特定数据的过程。在屏幕 上确定位置显示汉字就是向从屏幕的确定位置字 节处开始向其以下的15个字节和以右一列的16 个字节送入字模数据口]。问题是如何确定开始字 节位置。由于屏幕z向由左至右依次是第0~ 29,共30个字节,y向为128字节行,显然y向位 置的确定比较麻烦。鉴于此,采取以下方法:
本文采用如下的设计思路:将用到的汉字字 模存于扩展的片外程序存储器;然后对屏幕网格 化,建立每屏菜单的对应数组,将该数组常量也存 于片外程序存储器中,最后用同一处理函数调用 该数组数据,完成不同菜单界面的显示。下面以 AT89C51控制的LCM2401281液显系统为例阐 述如下:
对于LCM2401281点阵图形液晶显示器而 言,该显示器有图形和文本两种显示方式,这两种 显示方式中显示RAM每一个单元所代表的液晶 屏上的像素点阵列的大小不一样卟]。对图形方式 而言,显示RAM中的数据就直接控制了像素点 的亮暗,所以一个显示RAM单元就代表了显示 屏上~个1×8的点阵。本文采用图形方式故对 文本方式不再赘述。在LCM2401281的显示屏 上每行(设为z向)有240点,每列(设为y向)为 128点。~行中从左至右的每8点对应着显存的 一个存储单元(存一字节数据),这8点构成了屏
(西北大学信息科学与技术学院,陕西西安710127.E—mail:chw卜2001@163.com)
摘要:研究了点阵图形液晶模块的字符显示方法,详细阐述了一种对屏幕网格化进行菜单 设计的新方法,构建了基于AT89C5l与LCM240128l实现该方案的硬件平台,并采用C51 语言实现了具体的显示程序。该方案对硬件平台要求较低,在简化软件设计的同时,大大提 高了菜单设计效率,有效缩短了系统开发周期,特别是在多菜单设计的场合效果更为明显,具 有良好的应用价值。