摘要:在以单片机为核心的嵌入式应用中,友好的人机互界面起着十分重要的作用。笔者在设计中使用WGM-12864B图形LCD模块实现一种中文窗口菜单界面,设计中使用的方法具有普遍性意义。 关键词:人机交互界面 图形LCD模块 数据结构 窗口 菜单 随着液晶显示技术的进步,高质量的液晶显示模块会被日趋广泛地应用于各种嵌入式系统中。在系统整体设计中,人机交互界面的设计往往占据着很大一部分工作,现以某嵌入式系统的人机交互部分为例,介绍一种使用WGA-12864B图形LCD模块实现中文窗口菜单界面的方法。 WGM-12864B模块是单色图形点阵液晶显示模块,点阵数为64×128,其点阵存储区如图1所示。 模块点阵分为左右两边,左右两边的结构是完全一样的。对模块的点阵存储区进行读写操作时,由CS1、CS2进行片选,高电平有效。模块中每8行为1页,页地址由X确定;Y确定点阵的列号,点阵数据的每一个字节所在的位置由(CSi,X,Y)唯一确定。字节中的每一位对应着相应的像素,为1显示该像素;为0则不显示。液晶显示模块工作时,逐行扫描点阵存储区。首先被扫描的行显示在LCD屏幕的第1行上,其余行则依次顺序显示。“扫描起始行”可以通过Z地址寄存器来设置。Z可以是0~63的任意一行,如Z=56时,则显示在LCD屏幕上的次序从上到下分别为: 56,57,…,62,63,0,1,2,…,54,55 该模块的这一功能为窗口的滚屏提供了便利。 系统扩展了1片8255A作为人机界面的接口,硬件接口电路如图2所示。8255A的A口连接图形LCD的8位数据线,B口低6位连接相应的控制线, 3 用户界面的软件设计 人机交互界面设计的目标是实现中文窗口界面, 首先,应当确定系统需要多少个窗口,每个窗口有多少个菜单,画出窗口之间的变迁图,可以知道所有的窗口应当组成一个树形结构。菜单中的汉字大小为16×16的点阵,数字和符号的大小为16×8的点阵。这些点阵数据可以由点阵提取程序获得。点阵数为64×128的LCD模块只能同时显示4个菜单项,每个菜单项点据256个字节的点阵存储空间。窗口多于4个菜单项时,应当使用滚屏功能。为方便数据的安排,系统规定了参数、菜单、窗口及LCD缓冲区的数据结构。 (1)数据结构 为方便参数的显示和处理, 菜单点阵的数据结构如图4所示。菜单序号表示该菜单在该窗口所有菜单中的次序;菜单长度表示该菜单项中汉字的个数,菜单点阵数据区存放的是菜单中汉字的点阵,每一个汉字都是16×16的点阵;参数标志为0表示没有参数,为1表示此菜单项是对话框,后面跟着参数。参数存放在参数指针域指向的内存中,若是系统参数,则要预先从E2PROM读到内存中。由于系统是16位寻址的存储空间,所以用2个字节存放指针。参数存放格式如图3所示。 窗口点阵的数据结构如图5所示,其中用到了菜单数据结构,窗口中使用到的菜单项依着菜单序号顺次存放,各域的含义是显而易见的。注意,窗口的点阵数据是事先按照此格式建立的,系统中所有窗口以此格式存放非易失存储介质中,如ROM。以此格式,系统可以有255个窗口,每一个窗口可以多达255个菜单项。 系统在内存中特定区域开壁了1个LCD显示缓冲区,将要显示的整个窗口的点阵数据按下列格式拼装好以后存放在此区间。LCD的显示程序从此区间中读取数据到LCD点阵数据存储区,LCD显示程序正是凭借此数据结构管理用户交互界面。每个菜单项除了汉字和参数的点阵外,其余的空间用00H补齐为256字节。对话框中显示的参数,可以依据菜单数据结构中的参数指针域检索到数据,然后把它译码成为可以显示的16×8的点阵数据。LCD缓冲区数据结构如图6所示。当前菜单域指的是当有获得焦点的菜单序号,需要反显,主要用于光标管理。显示中的菜单项序号分别对应着当前LCD点阵存储区中的4个菜单项,这些数据主要用于滚屏操作。其余各域和上述类似。 (2)人机交互设计 人机交互设计的重点在于窗口界面的显示、滚屏、光标的管理及参数的显示、修改和保存。现在只介绍窗口的滚虐和参数的输入输出显示。 参数的输入输出显示是人机交互界面中的重要环节。显示的参数来自键盘输入或系统内部,数据的流向如图8所示。参数依据图3对应的数据格式存放到参数指地所指的内存中,然后启动窗口更新即可。若该参数需要保存,则存入对应的E2PROM地址中。本系统使用X5045作为E2PROM,同时兼作看门狗。 本文主要从数据结构的角度出发,结合器件的特片,提出了图形LCD在嵌入式应用中解决人机交互问题的一般方法,实现了中文窗口菜单,解决了参数的输入、显示、修改和保存。文中的方法具有非常好的灵活性和良好的可维护性,程序员可以在需要的时候方便地修改原有窗口或者加入新的窗口,而不至于影响系统软件原有的结构。这些便利都得益于系统定义了合理的数据结构。 |