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