便携设备中的汉字库设计

2007-03-09 19:03:27来源: 互联网
[b]1 便携式设备的常用设计方法 [/b]  一般的便携式设备采用如图1所示的电路框图设计(根据需要可增可减)。在该系统中,用图形点阵液晶模块作为显示,24C256用作汉字库的存储,X1203用于日历时钟,键盘/触摸屏作为输入设备,RS232用于通讯,ISD系列语音芯片可以记录语音及播放语音。这里只讨论使用点阵液晶显示汉字的情况以及汉字库的设计方法。一般汉字库有以下几种方案实现。   (1)使用程序空间做小字库。这在汉字用量不大的情况下,是一种完美的解决方法。但若要用AT89C2051、AVR系列、PIC系列、430F11X系列等作为主控芯片,其主要程序空间就只有2K字节左右,这种方案是不可行的。以500个汉字为例,16%26;#215;16点阵的字库将需要500%26;#215;32=16 000字节的ROM空间,如果使用12%26;#215;12点阵的汉字,也需要500%26;#215;24=12 000字节的ROM空间。所以,汉字库的大小在500字已经不能接受,设计小型的掌上设备,要使用引脚数较少的MCU时(如前所述),ROM空间已经感到相当紧张,再占用其空间做汉字库更不能想像。    (2)使用大容量的ROM芯片专门做汉字库。用这种方式可以使用全部的国标汉字,是一种较常用的方法。一般采用27C040芯片,但占用系统I/O数较多,占印刷板面积大,单是27C040就需要19根地址线,8根数据线,还有一些控制信号,还可能需要一片地址锁存芯片。这种方法在便携式设备的设计时一般不采用。 (3)使用自带汉字库的液晶模块。这较为方便,但成本较为高昂,一般为固定规格的汉字,常用的是16%26;#215;16点阵,使用不灵活。   (4)使用I2C器件实现汉字库的设计。下面将详细讨论这种方法。 2 设计综述   用串行I2C方式的EEPROM实现汉字库设计,这种方式下系统的构成成本低廉,体积小巧,方便灵活。在图1的设计中,使用128%26;#215;64点阵规模的常用液晶模块,可以显示12%26;#215;12点阵的汉字5排,每排10个汉字。使用了一片24C512做汉字库,它有64K字节的存储空间,可以存放64K/24=2 730个汉字的12%26;#215;12点阵字模。如果采用压缩的方法,每个12%26;#215;12点阵的汉字占用18个字节,则可存放64K/18=3 640个汉字。如果使用两片则可以容纳7 280个汉字,而使用多片时同样占用两根口线,且不额外占用资源,同时还可以连接其他的I2C器件,如日历芯片、I2C方式的A/D、D/A等,如果24Cxxx还有空余空间,则可以作为记录器,记录数据。在实际应用时,我们使用尺寸小的液晶模块(50 mm%26;#215;40 mm%26;#215;3 mm),这样,整个电路除键盘外全盖在液晶模块的下面,如果使用液晶上的触摸屏作为键盘,则所有电路的大小可以与液晶屏的尺寸一样,整个系统相当小巧,非常适合掌上设备或其他便携式设备应用。    如果使用其他方式实现汉字库,则体积将会较大:使用程序空间做字库,则只能实现很少的汉字字模,而ROM尺寸小的芯片还不能实现;若用27C040等则体积肯定大;使用带字库的模块则厚度较大。    24C512芯片与MCU接口只占用两根I/O口线:SDA,SCL。因此,随便使用89C51的I/O连接即可,见图1(注意:需要10kΩ的上拉电阻),多片时只是在每一片的地址端加以区别,而不需要额外的I/O口线。 3 设计方法 3.1 汉字字模数据   下面以“使用此汉字库”为例说明字模点阵的形成情况。液晶屏的“使用此汉字库”是按如图2所示的方式一点一点地显示的。图中的每一点对应液晶屏上的每一点。我们只须将所有的点阵数据写入液晶模块的缓冲区就可以了。   常用的12864液晶模块使用HD61202作液晶控制器,所以,该模块是竖着取模的(由HD61202所决定),而且最高位在下面(请参见HD61201的详细资料)。所以“汉”的字模数据为:    这里,以“汉”为例,第一个数据088H是最左边的上面第一竖排有点的位置所对应的数据,而且下面为高位。第二个数据091H为左边的上面第二竖排有点的位置所对应的数据,依次类推,得到“汉”上半部分的前12个点阵数据,同样可以得到“汉”下半部分的后12个点阵数据。可以看出,在下半部分的字模,实质上只有一半数据有用,另一半全是0,故,可以采用压缩的办法,缩减字模数据,即下半部分的点阵数据完全可以两个数据缩减成一个数据。比如“汉”压缩后的字模数据为,上半部分不变,前12个数据与原来相同,下半部分两两组合为一个字节,后半部分只有6个字节,这样,一个汉字就只需要18个字节,这样可以大大节省存储器的使用: 088H,091H,064H,018H,002H,01EH,062H,082H,062H,01FH,002H,000H,00FH,008H 084H,021H,024H,088H    如果液晶模块所使用的控制器是6963或1330/1335等,则必须横着取字模,相应的“汉”的字模数据为(每字节右边为高位): DB 000H,002H,0F2H,007H,024H,002H,029H,002HDB 02AH,002H,044H,001H,044H,001H,083H,000HDB 082H,000H,042H,001H,022H,002H,01AH,00CH    压缩算法与61202的不一样,为左边不变,右边压缩,数据组织上为奇数(对应点阵的右半边)压缩,偶数不变。 3.2 汉字字模数据存放在24Cxxx中   在一般情况下为自定义汉字库,也有使用全汉字库的情况。在全字库的情况下,可以把现有的汉字库直接存放在两片24C512中(采用压缩方法,每个汉字18字节)。这两片的地址分别是:0-0FFFFH,10000H-1FFFFH。 汉字首地址=((区码-1)%26;#215;94+位码-1)%26;#215;18。    大多数情况下使用汉字不会很多,一般用的是自定义汉字库。用一片24C256芯片(见Atmel公司24C256技术手册)可以存放用户常用汉字1 820(32K/18)个,或1 365(32K/24)个,剩余空间可以用作数据记录,对一般用户来说足够了。但放在程序ROM里,将占用32K程序区,对使用小ROM容量(比如89C2051,PIC系列,430F11x等)芯片的场合是不可能的,而用一片24Cxxx芯片就完全解决了,只占用两根I/O口线!这么多数据怎么存放在24C256中呢?很简单,使用编程器。大多数的编程器都支持24Cxxx的编程。先使用字模提取软件得到你所需要的汉字的字模数据,一般情况在购买液晶时会附送的。一般情况会用汇编的DB伪指令来定义,或使用C语言的数组来定义:unsigned char code hzdot〔24*xxxx〕={0x12,0x32,......}。得到这些数据后,用相应的单片机编译软件得到编程器能用的.hex或.bin文件,再使用编程器烧写。在用字模软件取汉字模的时候,必须将汉字按照一定的顺序进行排列,使用此汉字库的时候再按照这个顺序就可以将汉字依次显示出来。 3.3 字模数据在24Cxxx中的存放情况举例   用户自定义的汉字库已经存放在24Cxxx中了,下面是字库中的开始部分,汉字“使用此汉字库……”的字模,取模方式为纵向、下为高位,其中地址列为在24C256中的片内地址。   从表1与图2可以看出,汉字字模在24C256中的存放规则:第一个汉字的字模数据放在24C256中从0000H开始的24个单元,即0000-0017H。第二个放在24C256中从0018H开始的24个单元,即0018H-002FH……,依次类推。每个汉字在字库中的第一个字模数据在24C256中的地址为:X%26;#215;24+0,(X为用户汉字库中的第几个汉字)第二个字模数据在24C256中的地址为:X%26;#215;24+1,第三个字模数据在24C256中的地址为:X%26;#215;24+2,……,依次类推,用户汉字库中的第X个汉字的第I个字模数据为:   X%26;#215;24+I。    由此,我们在液晶屏上显示汉字的时候依次写出X%26;#215;24+I(I为00-23)就可以了。24Cxxx为I2C总线方式的EEPROM存储器,用作汉字库时,我们只需要掌握从中读出数据的方法,写入数据的工作就让编程器去完成。下面介绍如何读取汉字库中的汉字信息。 4 24Cxxx汉字库的使用   所需要的汉字库已经存放在24Cxxx存储器中了,只需要将它们取出来显示在液晶屏上。下面举例说明:在系统中需要1 300个汉字,使用24C256作为汉字库,可以存放32 768/24=1 365个12%26;#215;12点阵的汉字,能满足要求。在使用中每一个汉字有一个唯一的编码,序号从0000到1299。要写某一个汉字在液晶屏上只需要给出它的编码即可。 4.1 24C256的读写   24C256的读写遵循I2C总线的规约,需进行总线启动、数据读写、应答信号查询、总线停止等操作,这些子程序假设都已经有了,在程序中声明如下: 4.2 将器件中的数据读取出来在液晶屏上显示   下面,我们在液晶屏的的第2行的开始显示“使用此汉字库”。先读取连续的24个汉字点阵数据,程序如下:   这六个汉字在汉字库中的编码依次为: 0000 0001 002 0003 0004 0005,    则每一个汉字点阵数据的第一个位置分别为: 0000%26;#215;24,0001%26;#215;24,0002%26;#215;240003%26;#215;24,0004%26;#215;24,0005%26;#215;24    以每一个汉字的第一个数据位置为起始地址依次读取24个数据到显示缓存,再调用显示程序(写显示缓存的数据到液晶模块中)……。相应的程序如下: 参考文献 1 胡汉才.单片机原理及其接口技术.北京:清华大学出版社,1998 2 徐爱钧.单片机高级语言C51应用程序设计.北京:电子工业出版社,1998
编辑: 引用地址:http://www.eeworld.com.cn/designarticles/ledanddisplay/200703/8876.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved