小程序
全国热线:
400-820-3783
公众号

全国联保

产品通过3C,CE,FCC等认证

液晶显示器汉字字模存储方法
2018-09-17

加载中

液晶模块显示汉字方法

   1

   使用图形液晶模块以点阵形式来显示汉字和图形。每8个点组成1个字节,每个点用一个2进制位表示,存1的点显示时在屏上显示1个亮点;存0的点则在屏上不显示,蕞常用的16×16的汉字点阵由32个字节组成。以在我国应用较为普及的液晶显示驱动控制器T6963C为例,在液晶屏上横向8个点为1个字节数据,则“国”字的16×16点阵字模如图1所示,通过字模提取软件按照先左后右,先上后下的方式对“国”字进行字模提取,则可获得图1右边的字模对应的32个字节值。将这些字节按一定顺序写入液晶控制器的显示缓冲区,就可在液晶屏上显示16×16的“国”字。同理一个24×24的汉字则需72个字节,存放方式如表1所示。其他规格的汉字存放方式以此类推。

 

 液晶控制器典型接口电路

   2

   通过单片机将已提取的汉字的字模输入液晶控制器,即可按设定在液晶模块显示屏上显示需要的汉字。图2是典型的液晶模块与单片机的接口电路。在图中选用在我国应用非常广泛的8051单片机作为MCU,采用12864(128×64)液晶模块,其内置的液晶显示驱动控制器为日本东芝公司的T6963C。在电路中,地址线A12-A15和WR、RD信号通过GAL16V8译码出外扩芯片的片选信号,其中液晶的译码地址为0xE000,将地址线A0与液晶控制口的C/D相连。当A0为低时液晶控制器接收数据,A0为高时液晶控制器接收命令码。因此液晶数据端口地址为0xE000,液晶命令端口为0xE001。采用KeilC51进行程序设计,在程序中可进行如下定义:

 

    #define XBYTE ((unsigned charvolatile xdata *) 0)

    #define Lcd_Data XBYTE[0×E000] //液晶数据端口

    #define Lcd_Code XBYTE[0×E001] //液晶命令端口

   单片机的数据线通过74HC245双向缓冲器与液晶控制器的数据口相连,用液晶控制器的片选信号/LCD_CS作为74HC245的使能信号,单片机的写信号/WR控制数据传送方向。/WR为低时,单片机数据写入液晶控制器;/WR为高时,CPU读取液晶控制器的数据和状态。

 汉字字模存储及提取方法

   3

   在单片机系统中对字模的存储,根据单片机的程序存储容量和其寻址空间情况,可采取以下3种方式。

 

   ①将提取的汉字字模数据作为常量数组存放在程序存储区内。这种方法较为常用,针对程序不大或单片机无外部扩展数据存储区功能的情况。

   如下面程序所示,将提取的要显示汉字的字模数据定义成常量数组。如要显示“合肥”两字。

    const char Hz_Dot[]={    // 汉字16×16点阵

 0×01,0×01,0×02,0×04,0×08,0×10,0×2F,0×C0,//合 0

 0×00,0×1F,0×10,0×10,0×10,0×10,0×1F,0×10,

 0×00,0×00,0×80,0×40,0×20,0×10,0×EE,0×04,

 0×10,0×F8,0×10,0×10,0×10,0×10,0×F0,0×10,

 0×04,0×7F,0×45,0×45,0×45,0×7D,0×45,0×45,//肥 0×20

 0×45,0×7D,0×45,0×45,0×45,0×45,0×54,0×88,

 0×04,0×FE,0×24,0×24,0×24,0×24,0×24,0×FC,

 0×04,0×00,0×00,0×02,0×02,0×02,0×FE,0×00};

   再编制汉字显示子函数Write_Hz,其中要调用另外2个子函数Lcd_Wait和Disp_address。Lcd_Wait为读取液晶控制器是否忙函数,而Disp_address为液晶控制器显示缓冲区地址设置函数,可根据液晶控制器资料编制。

    void Write_Hz(Uchar x,Uchary,Uint p) //写汉字

   //x,y为汉字在液晶屏的显示位置坐标,p为要显示的汉字在//数组中的下标。

    {
 Uchar i,low_ad,high_ad;

 Uint address,tp;

 

 address=(Uint)x*Wide+y;   //**

 tp=address;

 for(i=0;i<16;i++)       //写左半部

 {

    low_ad=(Uchar)(tp &&0xff);

    high_ad=(Uchar)(tp >>8);

    Disp_address(low_ad,high_ad);

    Lcd_Wait( );

    Lcd_Data=Hz_Dot[p+i]; //***

    Lcd_Wait( );

    Lcd_Code=0×C4;

    tp=tp+Wide;


 }

 address++;

 tp=address;

 for(i=0;i<16;i++)         //写右半部

 {

    low_ad=(Uchar)(tp &&0×ff);

    high_ad=(Uchar)(tp >>8);

    Disp_address(low_ad,high_ad);

    Lcd_Wait( );

    Lcd_Data=Hz_Dot[p+16+i];  //****

    Lcd_Wait( );

    Lcd_Code=0xC4;            //写数据命令

       tp=tp+Wide;

     }

    }

   函数Write_Hz的参数x和y对应液晶屏幕的显示位置,其与液晶控制器显示缓冲区中的地址通过行**可计算出,该行中Wide为事先定义的液晶屏每行字节数,对于DG12864液晶而言,Wide为16。函数函数Write_Hz根据16×16点阵汉字在液晶控制器显示缓冲区的存放形式,依次改变显示地址,先将左半部1~16个字节写入显示缓冲区,再写入右半部17~32个字节。若要液晶显示“合肥”两字,只要在程序中带显示地址参数调用该函数即可。如:

   Write_Hz(0,4,0);     //合

   Write_Hz(0,10,0x20);    //肥

   ②将提取的汉字字模数据存放在EPROM或EEPROM内,作为扩展的数据存储器供单片机调用。采用哈佛结构的单片机,如8051单片机及其派生产品,程序存储器(ROM)和数据存储器(RAM)可分别寻址,51单片机ROM和RAM蕞大的寻址空间均为64K。通常来说,对于中型的嵌入式系统,尤其是带液晶的单片机系统,64K的程序空间并不富裕,而将汉字字模作为常量数组会大大占用ROM的空间。而相对来说,数据存储器只需几K就够用了,剩下很多空间可用于功能芯片的扩展。将提取的汉字字模数据存放在EPROM或EEPROM内,并设定该芯片的片选地址,则只要知道某个汉字字模数据在该芯片的存储位置,通过程序计算出偏移地址,即可实现显示功能。例如:设存放汉字字模数据的EEPROM的片选地址为0x9000,则通过程序定义:

    #defineHz_Dot    0×9000

    #define VBYTE  (unsignedchar volatile xdata *)

   若要编制汉字显示子函数Write_Hz,只要将上面Write_Hz函数中:

    ***行换成Lcd_Data=*(VBYTE(Hz_Dot+p+i));

    ****行换成Lcd_Data=*(VBYTE(Hz_Dot+p+16+i))。

   ③将整个汉字字库存放在EPROM或EEPROM内,程序根据要显示汉字的机内码来调用汉字字模。某些高端单片机,如MOTOROLA的M68300系列32位单片机,寻址范围可达8M。液晶显示常用的16×16汉字库二进制数据文件为200K,将汉字字库存入大容量的EEPROM,通过地址线可寻址到汉字库中的每一个汉字。在计算机中对汉字的识别是通过机内码来实现的,汉字标准机内码为2字节代码。汉字在汉字库中是按照区位来排列的,每一区中有94个汉字,每个汉字都对应**的区号和在本区的位号,汉字输入法中就有区位码方法。实际上,汉字机内码和区位码有标准的对应关系,某个汉字在字库中的区号加上0×a0等于其机内码的高字节,位号加上0×a0等于其机内码的低字节。因此很容易通过程序计算出要显示的汉字在汉字库中的区位号,即得到了其在汉字库中的偏移地址。由于EEPROM中存储了整个汉字库,只须在硬件上设定存放汉字库的存储器片选地址,直接将汉字作为字符数组附给汉字显示函数,通过机内码计算出区号和位号,即可方便的对汉字字模进行调用了。与前2种方法相比,无须事先提取字模和设定其地址用于程序调用,因此在进行程序升级,涉及到汉字显示时,不用更改汉字字模数据。

 结 语

   4

   本文介绍了图形液晶的汉字显示方法,并以8051单片机为基础,结合液晶模块与单片机的典型接口电路,介绍了3种存放汉字字模的方法,并给出C51程序例子,具有很强的使用指导性。

暂无评论!
我要评论 只有购买过该商品的用户才能评论。
微信公众号
友情链接LINKS:

王经理:13391240541       客户热线:400-820-3783       固定电话:021-34602052

网   址:www.tvodm.com  

邮   箱:879947132@qq.com

地址:上海市松江区洞舟路559号10栋2层

上海液晶拼接屏厂家敬科电子主营:

等,

微信小程序

欢迎前来咨询:400-820-3783

  • 电话咨询
  • 13391240541
  • 400-820-3783
  • 021-34602052
Baidu
sogou
XML 地图 | Sitemap 地图