汉字的动态编码与显示方案_第1页
汉字的动态编码与显示方案_第2页
汉字的动态编码与显示方案_第3页
汉字的动态编码与显示方案_第4页
汉字的动态编码与显示方案_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、汉字动态编码及显示方案基于几种常见的单片机汉字显示方案,提出了一种基于PC机预处理的汉字动态编码和动态字库显示方法,解决了存储空间、显示速度和软件开发维护之间的矛盾。它具有平台的优势。同时,给出了一个针对单片机51优化的汇编显示程序。关键词:内部编码动态编码字体由于汉字的特点,汉字的显示一直是中国普及计算机应用的一个障碍。首先,为了在电脑上显示和处理汉字,中国人发明了硬件设备“汉卡”。后来,中国各种纯软件技术的DOS逐渐成熟,其中,西方软件的运行速度和性能仍有明显差距。最后,软件进入支持UNICODE并真正实现国际化的WIN95,硬件进入奔腾时代,实现了汉字和西文的统一显示,但这一切都是基于硬

2、件资源的快速发展。以国际GB2312为例,一、二级汉字库中有6000多个汉字,每个汉字按1616点阵计算,字体需要占用32字节的存储空间。整个字体库的大小超过20万千字节,高点阵(超过24个点阵)和矢量字体库以及Windows使用的TrueType字体的大小是几兆字节,这在386年早期是不可想象的。单片机因其使用灵活、结构简单、体积小、成本低而广泛应用于工业和生活中。正因为如此,它的硬件资源是有限的,它的寻址和计算机能力远远低于个人电脑,汉字的显示更有限。人们对单片机系统中LED数码管的简单显示并不满意。根据单片机的特点,发展了许多汉字显示方法。1单片机显示汉字的几种常用方法(1)使用标准词汇

3、1该方法模仿中文操作系统,将一个标准的中文字库加载到只读存储器中,然后根据汉字的内码在字库中寻址,找到相应的字体,提取出来并发送给显示器。由于它采用与PC机相同的编码(内部代码),软件的开发和维护非常简单,基本上类似于编写PC机软件。对单片机系统本身的要求要高得多。1616点阵字体库需要256千字节,但一般8位单片机的寻址能力只有64千字节。为了扩展内存,除了增加大部分硬件成本外,由于内存分页管理和地址切换,显示速度明显受到影响,只能显示一种点阵字体。(2)直接固化显示字体2要显示的句子中的所有汉字的字体数据被顺序提取并存储在存储器中。当显示时,字体数据被直接取出并发送到显示器。该方法占用空间

4、小,程序简单,显示速度快。然而,字体数据的提取和存储是一个复杂的过程。显示大量汉字或修改程序几乎是不可能的,软件的可维护性很差。(3)建立索引为3的小型字体库所有要显示的汉字都统一到一个小型字体库中,字体库分为两部分:索引元素和字体表。索引表由若干条定长记录组成,记录内容有:汉字内码、地址码和识别码。地址码是汉字字体在字体表中的位置,标识码标志着汉字的点阵形式或字体。根据主要介绍,汉字字体存储在字体表中。显示汉字时,根据待显示汉字的内码在索引表中查找,找到相应的索引记录后,读出地址码和识别码,然后从字体表中读出字体并发送显示。该方法可以根据实际使用情况裁剪字体库,硬件成本小。然而,如果有更多的

5、单词,平均搜索时间会更长,效率会降低。2动态编码综上所述,我们发现在方法1中,程序员的工作量最小,但是单个关键机器的软硬件开销最大;方法二,单片机成本较低,但编写和维护软件非常困难;方法3,介于两者之间。显然,存储空间、显示速度和软件开发与维护部分之间存在矛盾。受各种PC机仿真软件的启发,我们提出了一种基于PC机预处理的汉字显示方法汉字动态编码,在实际应用中很好地解决了这个问题。其基本原理如下:建立一种新的动态编码机制;代码与汉字无关,只代表汉字在字体中的位置(这个位置也是动态的);该代码用于替换程序中的字符串(C语言)或数据段(汇编语言)中的汉字内部代码。根据这个新代码,单机显示程序可以直接

6、在专门建立的动态小字数据库中找到字体,而无需复杂的寻址和搜索操作,如图1所示。实现汉字动态编码的过程是先识别汉字,然后建立编码字典,提取字体,建立动态字库,重写内部代码。首先,扫描程序文件,识别其中的汉字,按照出现的顺序或内部代码的大小进行排序,消除重复出现,建立编码字典;根据汉字在编码字典中的位置(序号),汉字可以用区号和位码编码,也可以用其他方法。简而言之,序列号与其动态编码之间是一一对应的;根据字典中每个汉字的内部编码,从PC机的点阵字体中依次提取字体,并按顺序存储,建立小规模的动态字体,使每个汉字字体在字体中的位置与其在编码字典中的序号和动态编码一一对应。最后,再次扫描程序文件,根据代

7、码字典将每个汉字的内部代码重写为相应的动态代码。因为程序文件中的汉字会随时增减,代码也会随之变化,字体的大小也会随时变化。因此,它被称为动态编码和动态字体。考虑到一般应用,大约1000个汉字可以满足要求。根据汉字的动态编码方法,字长只有32 KB,只需要一张27256,几乎不需要额外的硬件。这样,字体的大小可以通过汉字的数量来控制,编程和维护可以按照中文系统的习惯进行。只需用PC机对准备好的单片机程序进行预处理,使程序员从复杂的汉字处理工作中解脱出来,从而有效地降低了软硬件的开发成本。汉字动态编码的具体实现实现汉字动态编码的关键是建立编码字典和重写内部代码。以一行汉字“天上有太阳,水中有月亮”

8、为例,说明了动态编码的实现过程。(1)汉字识别汉字在PC机上的存储和处理是通过内码实现的。每个汉字的内码是唯一的,由2个字节、分区码和位码组成。为了区别于西方语言中的ASCII码,汉字内码的区号和位码的值大于0A0H。我们需要处理的源程序文件都是文本文件,存储了西文字符、控制字符的ASCII码和汉字的内码。当扫描文件中大于0A0H的字节内容时,我们可以判断这些字节是汉字内码的一个字节,它们必须成对出现。第一个字节是差,第二个字节是位码,都大于0A0H,否则会出错。用C语言和汇编语言表示字符的方式不同,但文件中最后一个字符的存储格式是一样的。根据上面一行汉字,它可以表示为:“天上有太阳,水里有月

9、亮”;print fhz(OneEnt);/*printfhz()显示函数*/使用十六进制编辑器(我们使用UEdit32)查看C语言字符串定义LCALL DISPLAY显示是一个显示子程序使用十六进制编辑器查看上面用汇编语言定义字符串的语句,如下所示:4F 4E 45 53 45 4E 54 3A 44 42 20 27 CC EC C9 CF D3 D0 B8 F6 CC AB D1 F4 A3 AC CB AE D6 D0 D3 D0 B8 F6 D4 C2 C1 27 2C 30 30 48 0D 0A由此可以看出,情况与上述完全一样。(2)建立编码字典编码字典是在扫描时逐渐建立的。每次

10、扫描一个汉字(包括全角符号)时,都会与字典中现有的字符进行比较。如果没有重复,新字符将按顺序存储在字典中,否则,扫描将继续,直到文件关闭。由于每个字符都是从尾部添加的,它们的序列号也是依次增加的,可以根据序列号进行动态编码。由于显示的汉字一般超过256个,即使进行动态编码,也需要通过2字节编码来实现。以MCS51系列单片机和1616点阵汉字为例,8051的地址指针DPTR是一个16位指针,由高、低两字节指针DPH和DPL组成。如果内存以0FFH(256)字节分配,修改DPH可以直接寻址任何页面,修改DPL可以寻址该页面的任何字节。一个1616点阵汉字的字体大小是32字节,每页内存只能容纳8种汉

11、字字体。可以优化动态编码的高字节指向字体的页面地址(DPH),低字节指向页面上字体的第一个地址(DPL)。考虑到地址空间的有效分配,字体的地址应放在0A000H(程序和数据存储器)之后,字体的地址应有效分配,字体的地址应放在0A000H(程序和数据存储器)之后,地址的页偏移量应加到动态编码的高字节(大于或等于0a0h)。考虑到汉字和西文的区别,动态编码的低位字节也需要增加一个大于或等于0A0H的偏移量。如果编码字典中某个汉字的序号为Num,则该汉字的动态编码为:动态编码高字节=页面偏移量Num/8动态编码的低位字节=偏移量(Num%8)32 (1)通常,偏移量可以设置为0A0H。单片机显示一个

12、汉字时,只需将其动态编码的高字节发送到DPH,低字节减去0A0H后发送到DPL,即可得到相应字体的地址指针。(3)提取字体,建立动态字体库汉字内码与点阵字体之间的详细关系可以参考相关数据,它们有以下关系:字体的第一个地址=(内部代码高字节1)94(内部代码低字节1)N (2)注意:n是中文点阵字体的字节数。根据编码字典的内容,按照字体的第一个地址,依次取出汉字字体,按顺序将其写入二进制文件,即建立一个动态字库(其他方法省略),用编程设备将其写入EPROM,即可使用。(4)代码重写内码被电脑用来识别和处理汉字。单片机只能处理我们设置的动态代码,需要根据代码字典将程序中唯一的汉字机器码转换成相应的

13、动态代码。因为你在源程序的文本编辑器中看到的是系统处理的字节,你看不到汉字的内部代码,也不能重写它。根据“汉字识别”一节,动态代码(十六进制数)可以直接更改到磁盘文件的相应位置,而无需经过文本编辑器,但处理后的汉字将在文本编辑器中显示乱码字符。(5)汉字显示了解动态字体库中动态编码与字体的关系后,我们可以根据PC机下汉字显示的原理,在单片机下完成程序设计,并编写以前的函数printhz()或子程序DISPLAY,并参考相关数据4。Mcs51汉字显示程序根据上述汉字动态编码方法,我们用Borland C编写PC机预处理程序,用PC机对ASM51或C51源程序进行预处理后,建立动态字库,重写内部代码,并编写一个西文字符代码的显示与流字符的显示基本相同。将西文字库(仅数字和字符)加载到程序内存中,根据ASCII码的值计算字体的第一个地址,依次读出字体,然后发送显示。该方案不仅适用于单片机系统,也适用于任何不支持中文系统的嵌入式系统。根据这个想法,我们还可以设计一个不同字体和点阵的混合字体库,支持新的国家标准编码,超过20,000个字符。甚至矢量字体在单片机系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论