1 引 言
常用的液晶显示模块分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块。图形液晶模块在我国应用较为普及, 因为中文不能像西文字符那样用字符模块即可显示, 要想显示中文必须用图形模块。
研究了图形液晶模块的汉字显示方法, 以8051 单片机为基础, 介绍了液晶模块与单片机的典型接口电路, 描述了通过外扩的EEPROM 存储汉字字模数据, 将其作为外部数据存储器进行寻址, 通过C51 程序详细介绍了使用方法。对于程序存储器和数据存储器分开寻址的单片机, 该方式能起到节省程序存储器, 扩大程序容量的作用。
2 液晶模块显示汉字方法
使用图形液晶模块可以显示汉字和图形。以DG12864( 128×64) 液晶模块为例, 其内置的液晶显示驱动控制器为日本东芝公司的T6963C, 在液晶屏上横向8 个点为1 个字节数据, 每个字节在显示缓冲区内有对应的地址, 液晶屏幕的左上角横向8 个点对应液晶模块显示缓冲区的首地址。采用图形显示方式, 在液晶显示器上汉字用点阵来显示, 最常用的是16×16 的汉字, 一个16×16 的汉字用32 个字节表示, 这32 个字节存放方式如下所示:
而一个24 ×24 的汉字则需72 个字节, 存放方式如下:
其他规格的汉字存放方式依此类推。在液晶显示器上需显示汉字时, 只要将要显示的汉字的点阵按其存放方式依次写入液晶控制器的显示缓冲区即可。
通过单片机将已提取的汉字的字模输入液晶控制器, 即可按设定在液晶模块显示屏上显示汉字。常见的做法是事先通过字模提取软件提取要显示的汉字的字模, 将其作为常量数组存放在单片机的程序存储区内。以C 语言格式建立包含"合"和"肥"两字的汉字字模常量数组, 如下:
Code const char Hz-Dot [ ] = {0x01, 0x01, 0x02, 0x04, 0x08, 0x 10, 0x 2F,0xC0, / / 合0
0x00, 0x1F, 0x 10, 0x10, 0x10, 0x 10, 0x1F, 0x10,0x00, 0x00, 0x 80, 0x40, 0x 20, 0x10, 0xEE, 0x 04,0x10, 0xF8, 0x 10, 0x10, 0x10, 0x 10, 0xF0, 0x10,0x04, 0x 7F, 0x 45, 0x45, 0x45, 0x7D, 0x 45,0x45, / / 肥0x 20
0x45, 0x7D, 0x 45, 0x45, 0x 45, 0x45, 0x 54, 0x 88,0x04, 0xFE, 0x 24, 0x24, 0x 24, 0x24, 0x 24, 0xFC,0x04, 0x 00, 0x 00, 0x02, 0x02, 0x02, 0xFE,0x00} ;
每个汉字字模由32 个字节组成, 单片机通过接口电路, 根据规定的时序, 将要显示的汉字字模的所有字节按液晶控制器规定的方式, 按预定位置写入液晶控制器显示缓冲区即可。这种方式适用于程序不大或单片机无外部扩展数据存储区功能的情况。
采用哈佛结构的单片机, 如8051 单片机及其派生产品, 程序存储器( ROM) 和数据存储器( RAM) 可分别寻址, 8051 单片机ROM 和RAM最大的寻址空间均为64 K.通常来说, 对于中型的嵌入式系统, 尤其是带液晶模块的单片机系统,64 K 的程序空间并不富裕, 而将汉字字模作为常量数组会大大占用ROM 的空间。而相对来说,数据存储器只需几K 就够用了, 剩下很多空间可用于功能芯片的扩展。将提取的汉字字模数据存放在EPROM 或EEPROM 内作为扩展的数据存储器供CPU 调用, 则只要设定该芯片的片选地址, 并知道每个汉字字模数据在该芯片的存储位置, 通过程序计算出偏移地址, 即可实现同样的显示功能。
3 单片机通过EEPROM 调用汉字字模的方法
图1 是DG12864 液晶模块与8051 单片机的接口电路。在电路中, 地址线A13??A15 通过GAL16V8 译码得到外扩芯片的片选信号, 其中液晶模块的译码地址为0xE000, 将地址线A0 与液晶模块控制口的C/ D 相连。当A0 为低时液晶控制器接收数据, A0 为高时液晶控制器接收命令码。因此液晶模块数据端口地址为0xE000, 液晶模块命令端口为0xE001.采用Keil C51 进行程序设计, 在程序中可进行如下定义:
# define XBYTE ( ( unsigned char volat ile x data* ) 0)
# def ine LCD-Data XBYT E[ 0xE000]/ / 液晶模块数据端口
# def ine Lcd-Code XBYT E[ 0xE001]/ / 液晶模块命令端口
存放汉字字模数据的EEPROM 芯片2864的片选地址为0x 9000, 则通过程序定义:
# def ine Hz-Dot 0x 9000
# define VBYTE ( unsigned char volatile x data* )
图1 51 单片机与液晶模块接口电路
评论
查看更多