我们历时数载,开发成“51单片机13×14点阵缩码汉卡”,适用于目前国内外应用最为广泛的MCSX-51及其兼容系列单片机。
与此同时,还开发了13×14点阵汉字字模。13×14点阵字模,可完全与目前通用的16×16点阵汉字字模媲美,其在单片机和嵌入式系统的汉字显示应用中也具有明显的经济价值和实用意义。
1 单片机目前的汉字显示
信息交流的最主要方式之一即文字交流,但由于我国方块汉字数量繁多,构形迥异,使汉字显示一直是我国计算机普及的障碍。随着计算机技术的迅速发展,PC机的汉字显示已不成问题。但对于成本低、体积小、应用灵活且用量极为巨大的单片机而言,因其结构简单,硬件资源十分有限,其汉字显示仍面对着捉襟见肘,力不从心的窘境。
目前单片机的汉字显示有三种基本方法。
①采用标准字库法。即将国标汉字库固人ROM中,将单片机的硬件和软件进行特别扩展后以显示汉字。众所周知,即使是16×16点阵标准字库,也须占用200KB以上的单元内存,而就目前主流5l系列单片机而言,最大寻址范围仅64KB,即使程序区与数据区合起来也仅128KB内存。因此,若不加特别的扩展设计,不要说检字程序和用户空间,仅字库都装不下。这种方法虽然可以方便地使用现成标准字库,但却需占用大量的硬件和软件资源,增加很大一部分成本和设计难度,所以不经常使用。
②字模直接固化法。即将所显示的汉字,依先后顺序将其字模一一从标准字库中提取后,重新固化,予以显示。此法虽为简捷,但只适于显示少量汉字,且字模的制取繁琐,软件的修改维护都很困难。
③带索引小字库法。即将欲显示文件中的汉字字模,从标准字库中逐一提取固化,制成小型字库,并按其在小字库中的位置制成索引表,显示时从索引表查出其新的字模取码地址,取码显示。此方法虽比较灵活,可显示较多的汉字,但仍然局限于只能显示固定文件内容,且字模制取同样麻烦。
一种较新的单片机“汉字动态编码与显示方案”(见《单片机与嵌入式系统应用》杂志2003年第1期和第9期),实际上也是一种动态的“小字库”法,只是字库的制取,索引的编写及文件的改码皆由PC机自动完成,免去了繁琐的人工处理。
由上可见,目前单片机各种汉字显示方案均不理想。标准字库法,单片机不堪重负;而其它方法最大且又无法克服的缺点是,所显示文字皆有局限。显示内容也皆须专业人员设计而定,用户难于更改。这便极大地限制了单片机在各个领域的开拓和应用。究其原因,皆为单片机本身无汉卡,而这也正是我们致力于“51汉卡”开发的初衷。
2 13×14点阵汉字字模
为垫定“5l汉卡”的字型基础,首先开发成了l3×14点阵汉字字模。在目前通用的汉字字模中,最简单的是16×16点阵字模。在微型打字机中,也偶见有12×12点阵字模,但实用中不多见。字模点阵数直接决定着每一汉字所占单元内存值,能否在保证字模准确、美观的基础上,寻找一种较少的点阵字模呢?这便是我们最初的想法。于是我们经过反复选择比较,终于在国内首个推出了13×14点阵字模。此设计,一是基于我国汉字为方块字,故其行、列值需相近;二是汉字多有对称1生,故其列值宜奇不宜偶。设计实际表明,若行、列值很少,则难保证字模的准确性和美观性。
13×14点阵字模,是以我国现行简化字为准,并在此基础上设计而成。与目前通用的汉字16×l6点阵字模相比,其准确性和美观性并不逊色。然而其单字所占内存却由32个单元降至26个单元;另外使得每个单字显示由原来的256个像素降至l82个像素,使显示成本和空间均减少近三分之一。100×200点阵LED字屏,可显示16×l6点阵汉字72个,而l3×14点阵汉字便可显示l05个,且显示效果并无太大差异。这无疑对单片机和嵌入式系统汉字显示产品的开发和应用,具有明显的经济价值和实用意义。
3 51单片机13×14点阵缩码汉卡
“51汉卡”依据我国的汉字特点和单片机的快速构字功能,在13×14点阵字模基础上,以缩码形式开发而成单片机汉卡的开发,应以目前通用的主流单片机为研发对象,还应在囊括国标一、二级汉字及常用字符的前提下,使内存占用必须降至主流单片机可寻址范围内,且需留有足够的检字程序和用户应用空间。另外,字模设计必须准确、美观。字模提取速度也必须满足实用要求。“51汉卡”的开发正是依据原则,并达到了以上各项要求。
顾名思义,“51汉卡,,即以MCS-51系列及其兼容单片机为研发对象。以51系列为代表的8位单片机,在过去、现在以及可以予见的将来,都将是嵌入式系统低端应用的主流机型。此乃业界专家的共识。
“51汉卡”囊括了“GB2312-80”国标字库的全部一、二级汉字,并增补汉字86个;同时包括了大、小英文字母、阿拉伯数字等160个常用字符和不到4KB的构字程序,却仅总共占用了不足66KB的内存。每字平均约占9.8个单元,相对于16×16点阵每字占32单兀内存而言,尚不到其三分之一。这对于具有相互独立的64KB程序区和64KB数据区的51系列单片机而言,若适当配置内存,可为检字程序和用户留出90%以上的程序空间及相当数量的数据空间,对于一般用户的应用,都将绰绰有余。
另外,为使“51汉卡’’更便于使用和进一步节省内存,在上述基础上又开发成一套简化版本,删去了部分较偏僻的二级汉字。简化版本包括约5580个汉字,共占用内存58KB。实际上,按有关权威部门的统计,一般文本99%的文字是由2400个字写成的,因此使用简化版本,并配以简单的造字程序,一般亦可满足我们的使用要求。
"51汉卡”所用字模,即我们开发的完全可与16×16点阵字模媲美的I3×14点阵汉字字模。字模提取速度是我们最为关心的问题之一。经测试及实际使用表明,“51汉卡’’的提模速度完全可满足单片机汉字显示的实用要求。
我们使用Intel公司MCS-51经典系列87C51单片机在24MHz频率下测试,平均字模提取速度为2.1ms/字。因人的视觉暂留时间为0.1s,无论理论还是实际使用都表明,50字字模提取并显示,并无迟滞和待机之感。即使在1 2MHz频率下,20字取模,即点即出,在一般拼音检字和少量汉字显示中,完全可满足使用要求。随着单片机技术的迅速发展,目前,Intel公司、Atmel公司、philips公司、我国台湾华邦等公司生产的MCS-51兼容单片机时钟频率可达33MHz,增强型可达40MHz,以至达60MHz;现市售的“STC89LE”系列单片机,最高频率可达90MHz。这些芯片都完全能与MCS-51芯片兼容,对于更高需求的场合,更新升级也十分简便。另外,在单片机和嵌入式系统中,文字显示速度要求并不高,只要满足换屏时的视觉要求即可。其汉字显示字数,一般也不太多。如用LCD显示屏,128×64点阵,才显示32个字;192×64点阵才显48个字;即使使用l3×14点阵字模,满屏也才56个汉字。
4“51汉卡”设计依据及说明
“51汉卡”设计依据是,我国汉字虽然数量繁多,字型各异,但其中复合结构者占大部分,并素有“偏旁取义,正字取音”之说。如“寸”字与不同偏旁可组成“村”、“付”、“讨”、“守”、“过”等字。因此“51汉卡”除单结构字基本以全码设计外,复台结构字多用相应的单体字及其偏旁,以结构代码写成。利用单片机快速的单元积木式构字程序,便可迅速生成字模代码。这既保证了提码速度,又节省了大量的汉卡内存。
有关“51汉卡”的几点说明如下:
①凡汉字库中简、繁体字都有的用简体。如“後”以“后”代,“馀”以“余”代等;
② 《新华字典》未收入字,多未收入,如“酏”、“鼽”等字,但“婧”、“弪”等字仍收入;
③对于多体字,一般以常用字代,如“摺”以“折”代,“镟”以“旋,,代等,但“吒”不以“咤”代,“雠”不以“仇”代等;
④对通常已由其它字取代的字,都以这些字代替,如“岽”以“东”代,“肛’’以“船”代等;
⑤二级汉字中,不单独构成汉字的偏旁未收入;
⑥依据名篇名著,生活用语等,增补汉字86个;
⑦收编大、小写英文字母、阿拉伯数字、标点符号等各种常用字符160个。
5“51单片机汉卡”应用举例
利用“51单片机汉卡”,将使51系列单片机的汉字显示轻而易举,并可大为降低成本、体积和设计开发的难度,为单片机在生产控制、信息通信、文化教育和日常生活等领域,特别是计算机终端和手持产品的开发提供极大的便利和支持。
我们现已初步开发成“51汉卡”的“区位码输入法”和“拼音输入法,,检字程序,并利用“51汉卡”成功地开发了带有廉价单片机控制器的LED汉字显示屏。这不仅大幅度降低了成本费用。而且用户可以通过单片机控制器,随心所欲地改变显示内容。
5.1 硬件设计
CPU——87C51、12MHz晶振。
程序存储器一1片EPROM 27C512。
数据存储器一1片EPROM 27C512;1片EEPROM28C64A;1片6116。
控制器显示屏一LCD HY一19264B(深圳秋田视佳实业有限公司)。
LED屏选240×16点阵。
本系统用标准小键盘检字,一次可予选4000字;控制器LCD满屏显示l3×14点阵汉字56个;LED屏满屏显示汉字19个。
地址分配及用途如表l所列。
5.2程序设计框图
程序设计流程如图1所示。本系统采用12MHz晶振,若LCD取满屏56字,换屏时有约0.1s的延时,这对人的实际视觉并无大影响。