摘要:综合几种常用单片机汉字显示方案,提出一种基于PC机预处理的汉字动态编码和动态字库的显示方法,较好地解决了存储空间、显示速度、软件开发维护几方面的相互矛盾;具有平台化的优点,同时,给出针对MCS51优化的汇编显示例程。
关键词:机内码 动态编码 字库
因为汉字本身的特点,显示汉字始终是计算机在我国应用普及的一个障碍。最初,为了能在PC机上显示、处理汉字,国人发明了一种硬件设备"汉卡",后来各种各样的采用纯软件技术的中文DOS逐渐成熟,其中、西文软件的运行速度和性能还是有明显的差距。最终在软件进入支持UNICODE、真正实现国际化的WIN95以后,硬件跨入"奔腾"时代,才实现了汉字与西文的统一显示,但是这一切是以硬件资源的飞速发展为前提的。以国际GB2312为例控制工程网版权所有,一、二级汉字库共收录了6000多个汉字,每个字按16×16点阵计算CONTROL ENGINEERING China版权所有,字模需要占用32字节的存
1 几种常用单片机显示汉字方法
(1)采用标准字[1]
这种方法仿器中文DOS的办法,将一个标准的汉字库装入ROM存储器,再根据汉字的机内码在字库中寻址,找到对应的字模,提取后送到显示器显示。因为采用了和PC机相同的编码(机内码),软件的开发和维护非常简单,基本上与写PC机软件差不多。而对单片机系统自身的要求则相对高多了,16×16点阵的字库需要256K字节,但是一般8位单片机的寻址能力只有64K字节,要进行存储器扩充,除增加很大一部分硬件成本外,还因为要进行存储器分页管理、地址切换,显示速度明显受影响,而且只能显示一种点阵字体。
(2)直接固化显示字模[2]
将要显示的语句中全部汉字的字模数据依次提取出来,顺序存放在存储器中,当显示时,直接取出字模数据送至显示器即可。这种方法占用空间少,程序实现简单,显示速度快;但是字模数据的提取和存储安排是一件委有繁琐的事件,要想大量显示汉字或进行程序修改几乎是不可能的,软件的可维护性很差。
(3)建立带索引的小字库[3]
将全部要显示的汉字统一建成一个小字库,字库分为2部分:索引素和字模表。索引表由若干定长记录组成,记录的内容为:汉字机内码、地址码、识别码。其中地址码是该汉字字模在字模表中的位置,识别码标志该汉字的点阵形式或字体等。字模表中按素引存放汉字字模。显示汉字时先根据待显汉字的机内码在索引表中寻找,找到对应索引记录后,读出地址码和识别码,再根据此从字模表中读出字模,送显即可。这种方法可根据实际使用对字库进行裁剪,硬件开销较小,但是要进行复杂的查询运算CONTROL ENGINEERING China版权所有,字多了平均寻找时间就会变长,效率降低。
2 汉字动态编码
综上所述,我们发现:在方法1中控制工程网版权所有,程序员工作量最少,但单片要机的软、硬件开销最大;方法2中,单片机的开销较少,但是编写和维护软件极为困难;方法3,介于二者之间。显然,存储空间、显示速度、软件开发维护件间存在着矛盾。受各种PC机模拟软件的启发,我们提出一种基于PC机预处理的汉字显示方法--汉字动态编码CONTROL ENGINEERING China版权所有,在实际应用中较好地解决了这一问题。其基本原理如下:建立一种新的编码机制,这个汉字编码是动态的;一个编码不与某个汉字具体相联系,而仅代表某个汉字在字库中的位置(这个位置也是动态的);用该码代替程序里字符串(C语言)或数据段(汇编