液晶显示多级汉字菜单的方法
摘 要:以8031单片机控制MGLS-240128液晶显示器为例,介绍利用CCDOS中的汉字库(HZK16)实现多级汉字菜单显示的方法。当显示内容改变时,不需要更改程序,只要更改菜单参数即可显示。
关键词:液晶显示器;MGLS-240128;汉字库;多级菜单
1. 引言
目前常用的小型显示器有LCD和LED ,LED显示器只能显示数字和有限个英文字符,不能显示汉字,显示内容不直观,操作人员只能根据约定格式了解显示内容。而LCD则可显示各种汉字和图形,能实现中文菜单显示,便于操作,并且功耗低。因此LCD得到广泛应用。用LCD显示汉字时,一般采用自制汉字模和汉字编码,当显示内容较多时, 字模库容量很大,汉字的编码亦很难记住,给编程造成困难,当显示内容改变时,字模库也要作相应变化,工作量大。这里介绍一种直接利用CCDOS中的汉字库(HZK16)显示汉字多级菜单的方法。将HZK16和菜单内容固化在EPROM中,从而方便地实现了多级汉字菜单的显示,充分发挥了LCD的优点。
2. MGLS-240128显示模块简介及接口电路
本文使用的显示模块是MGLS-240128,它的点阵数是240×128,如显示16×16点阵的汉字,可显示8行,每行15个字。MGLS-240128模块内藏HD61830控制器,模块的电原理框图如图1所示。
有时在菜单显示中,显示的页数很多。为了便于在EPROM中定位,在计算机中编辑菜单时,应在每页菜单前加pxx:其中p表示一页开始,xx为该页序号,冒号表示以下为该页的内容。回车可换行到下一行并进入中文编辑状态输入,需要显示的内容。每页分8行,每行15个汉字或字符(包括空格)。在编辑的文件中,每行结尾有回车、换行符。这样,每一页菜单中,pxx以ASCII码形式存放,每个汉字以机器内码形式存放,每个机器内码占两字节。每行结束还有回车换行符,共有9行。这样每页长度为4+8×15×2×+9×2=262字节。若一共有40页,则存储器共需:40×262=10480字节。图2给出一菜单示例。国标GB2312-80把汉字分为94区,每区94个字符。其中1~15区是图形符号和字母,16~55区是一级汉字,共3755个。对于一般显示,前55区就足够了。在HZK16中,每一字符占32字节,共需32×55×94=165440字节。
为了存储汉字字模和显示内容,约需180k字节存储器,可选用一片27020。其硬件原理图如图3所示,为了简便起见,只画出光标移动键、回车键和返回键,供操作时参考。图中的ROM分为两部分,一部分是2764,内装用户程序,一部分是27020,内装字库和菜单,因为程序必须从0000H开始执行,所以2764的地址空间为0000H~1FFFH,27020的地址空间为8000H~FFFFH。
3. 利用CCDOS中的汉字库显示汉字
在计算机汉字系统中,每个汉字内码为二字节编码,字节的最高位置1,而ASCII码为7位编码,最高位为0。因此,可根据字符值大于还是小于128来判断它是汉字还是ASCII码。汉字地址码是指在一个汉字库中,某一汉字字形信息存放在库中的逻辑地址的编码。地址码=[(内码第一字节-AIH)×94+(内码第二字节-AIH)]×32。
27020被分为8区,每区占32k字节。汉字字模存于0~6区,而菜单存在第7区,通过P1口实现选区。因此,寻找一个汉字的字模信息首先要确定此汉字所处的区数;再确定在此区中的地址(字模地址)。区数号=地址码/32768的商。字模地址=(地址码/32768的余数)×32+8000H。如汉字“唐”的机器内码是CCC6H,地址码=[(CCH-AIH)×94+(C6H-AIH)]×32=4079×32。区数号=4079×32/32768的商=4,字模地址=(4079×32/32768的余数)×32+8000=83E0H。
由于在图形方式下,显示一个汉字的介绍文章很多,而且方法也大同小异,因此不再详细介绍一个汉字的显示过程,这里只给出一个流程。如图4所示。
4. 一页菜单的显示方法
显示16×16点阵的汉字时,显示屏被划为8×15个方格。每页菜单也是8×15个字符,排列格式一样,因此每个字符可被放在一个方格内。若每页菜单中的字符坐标记为x,y,表示字符位于显示屏的第x行,第y列方格内。坐标原点在左上角。一页菜单的显示流程图如图5所示。
5. 多级菜单的显示
显示菜单时,需把光标放在菜单和第一选项序号处,当要选其他项时,按动光标移动键,使光标放到待选项序号处,再按回车键,便进入下一级菜单。当要返回上一级菜单时,按返回键即可。为了达到以上的要求,首先要为每页菜单建立一个表格(菜单表格),表格的内容(即菜单参数)如下:第一字节放此页菜单待选项数。后面依次放各选项序号在屏幕中的x,y坐标和选项所对应菜单在EPROM中的首地址。这样,每个选项占四字节,最后两字节放在上级菜单在EPROM中的首地址。为了便于寻找,应使每个表格长度一样,至少应等于选项数最多的那页菜单所需的表格长度。如最多选项有8个,则格长度=1+8×4+2=35。如果某页菜单无选项,除了表格中最后两字节填上级菜单的地址外,其余地方填0。把所有的表格按页号顺序放在一起,形成一个总表格。把其首地址称为表格基地址。在程序中给每级菜单都设一个选项计数器。初值为0,每按一下光标移动键,选项计数器加1。光标处汉字反白(黑底白字),一般汉字为白底黑字。实现过程如下:由需反白字符的x,y值算出此字符字模在显示缓冲区(DDRAM)中的位置,从DDRAM中读出字模并取反白后送回原处。
光标显示子程序如图6所示,键处理子程序如图7所示。
6. 结束语
在实际工作中运用此技术显示多级菜单时,由于编程简单方便,避免了自制汉字库的繁杂工作。并且可以把整个程序作为一个模块,只需更改菜单表格的内容(即菜单参数),就可显示各种内容的菜单。为了操作更方便,可加光标上移键。当末级菜单有多页时,可加翻页键。