在智能仪表等小型单片机应用系统中,一般采用发光二极管作功能提示,数码管显示数据。随着智能仪表功能的不断扩充和提高,这种显示方式逐渐不能满足需求。为系统添加一片液晶显示器作为显示设备,显然能够很大程度扩展系统功能,提升产品的档次。若在液晶显示器上显示汉字信息,如果采用带汉字库的液晶显示器会有一些弊端:成本高控制工程网版权所有,汉字大小固定,缺乏一些特殊的功能函数。针对这种情况,本文分析了一种低成本的汉字液晶显示实现方法,并给出了其C语言实现函数的源程序,以及汉字字符串提取程序和点阵字模提取程序的源程序。显示函数的实现中还重点设计了灵活的putchar函数,以便在程序中使用printf函数作为显示输出函数。
1 基本原理
这种低成本汉字液晶显示实现方法的基本原理是:采用一片图形液晶显示器作为显示设备,用软件实现汉字显示,汉字点阵字模直接从汉字库中提取出来后写到程序文件中。
整个实现过程包括以下部分;汉字
2 汉字字符串及点阵字模的提取
图形液晶显示器要显示汉字,必然需要汉字点阵字模,而要提取汉字点阵字模必须首先从程序中提取要显示的汉字字符串。一个汉字以两个字节的数据表示,这两个字节的数据有一个共同的特点就是数据最高位是“1”,这是与其他字符区分的重要特征。在C程序中,要显示的字符一般以双引号作为起始和终止,因此设计汉字字符串提取程序时只需要判断开始双引号和结束双引号之问的字符,将最高位为“1”的字符提取出来保存到另一汉字字符串文本文件中即可。C源程序FIND_CH.C,运行时可在命令行带多个C程序的文件名控制工程网版权所有,输出汉字字符串文本文件到STRINGCH.TXT中。
汉字字符串提取出来后,就将针对这些汉字从字库中提取其对应的点阵字模了。在此之前,先要设计保存这些点阵字模数据的方式,即数据结构。图形显示的每一个点对应用一位表示,对于不同点阵的字库,需要的数据字节长度是不相同的:8×8的点阵英文字母需要8×8/8—8个字节;12×12的点阵汉字需要12×12/8=18个字节16×16的点阵汉字需要16×16/8=32个字节;24×24的点阵汉字需要24×24/8=96个字节。生成的点阵字模数据,可以用H头文件的形式存储,以上字库对应为:EN8X8.H;C12X12.H;C16X16.H;C24X24.H。文件中首先定义包含的汉字数目www.cechina.cn,例如C12X12.H中:
#define chl2x12_num 5
表明本12*12点阵字库中有50个汉字。因为只提取了需要的汉字字模数据,并且将重复的字剔除掉。为了方便索引,在汉字字库建立汉字GB码信息数组,将汉字GB码的两字节数据用unsigned int表示,例如C12X12.H中:
code unsigned int chl2x12_code[chl2x12一num]={0xalal,0xbaba,0xd7d6,0xd2ba,0xbea7},/*汉字液晶*/
注意:在数据中总要预留1个汉字的空格(Oxalal),以便在以后程序设计时遇到显示没有找到字模数据的汉字时,显示空格控制工程网版权所有,它对应的数据是全空。在汉字GB码信息数据后注释行中写入了对应汉字,以方便阅读。
接下来的汉字点阵字模数据以二维数组表示:
code unsigned char ehl2x12_dat[ehl2x12_num][18]={
/*汉字12×12点阵库*/
{Ox00CONTROL ENGINEERING China版权所有,0x00,0x00,0x00,0x00,0x00,0x00.0x00,Ox00.0x00,0x00,Ox00CONTROL ENGINEERING China版权所有,0x00,Ox00,Ox00CONTROL ENGINEERING China版权所有,0x00,0x00,0x00},
/*(BABA):88926418021e628262H0200201f20488884*/