一种汉字显示方法

文档序号:6397231阅读:510来源:国知局
专利名称:一种汉字显示方法
技术领域
本发明涉及计算机汉字显示方法,特别是在没有字库的单片机上显示汉字的方法。
背景技术
目前,单片机的汉字显示一般采用标准字库法,即将字库固入ROM中,将单片机的 硬件和软件进行特别扩展后以显示汉字。众所周知,即使是16X16点阵标准字库,也需占 用200K以上单元内存,而就目前主流51系列单片机而言,最大寻址范围仅64K,即使程序区 与数据区合并起来也仅128K内存,因此若不加特别的扩展设计,不要说检字程序和用户空 间,仅字库就容纳不下。这种方法虽然可以直接使用现成标准字库,但却需占用大量的硬件 和软件资源,并增加很大一部分成本和设计难度。
发明的内容 针对现有单片机在汉字显示中的上述难题,申请人进行了研究改进,提供另一种
占用空间小、通用性强的汉字显示方法。 本发明的技术方案如下 —种汉字显示方法,包括以下步骤 (1)在单片机非易失性存储器中建立点阵信息库、汉字原始码库及索引码库,其中 所述点阵信息库包括用于储存汉字的汉字点阵信息库及用于储存ASCII码的ASCII码点阵 信息库; (2)获取需要显示的文本的原始码; (3)对需要显示的文本中的汉字进行分析,将对应的汉字点阵信息从矢量字库中 逐一提取出来,按顺序写入所述汉字点阵信息库,相同的汉字点阵信息不重复写入;
(4)将需要显示的文本中的汉字的原始码,按顺序写入所述汉字原始码库,相同的 汉字原始码不重复写入; (5)将需要显示的文本的原始码重新编码,写入所述索引码库,其步骤包括
(5a)当碰到需要显示文本的原始码中小于0x80的字符,则该字符表示ASCII码, 占一个节字,将该ASCII码的原始码不做改变写入索引码库; (5b)当碰到需要显示文本的原始码中大于或者等于0x80的字符,则该字符及其 后的一个字符表示汉字,占两个节字,将第一个碰到的汉字重新编码为0x80 0x00写入索 引码库; (5c)再次碰到表示汉字的原始码时,若该汉字未出现过,则依次重新编码为0x80 0x01 、0x80 0x02、0x80 0x03…,写入索引码库;若该汉字已经出现过,则按该已经出现过的 同样的编码重新编码,写入索引码库; (6)按所述索引码库搜索点阵信息库,将对应的汉字点阵及ASCII点阵予以显示, 其步骤包括 (6a)当碰到ASCII码字符时,搜索所述ASCII码点阵信息库;
3
(6b)当碰到汉字字符时,计算该双字节汉字字符与0x80 OxOO的差值,计为该汉 字点阵的索引值; (6c)按照该下式得到的该汉字点阵的起始地址搜索所述汉字点阵信息库该索 引值X每个点阵的字节数+所述汉字点阵信息库的起始地址=该汉字点阵的起始地址。
(7)PC要读取需要显示的文本时,读所述索引码库,对索引码库中ASCII码直接 读取,对索引码库中汉字则按照下式得到的该汉字原始码的起始地址搜索所述汉字原始码 库,换为相应的原始码读取索引值X2+汉字原始码库的起始地址二该汉字原始码的起始 地址。 所述ASCII码点阵信息库为标准库。
本发明的有益技术效果是 本发明可以在没有字库的单片机上用较小的空间显示汉字。其优点如下(一)重 新构建的点阵信息库占用空间较小;(二)通过索引码来搜索汉字点阵,计算简单,显示速 度更快;(三)可以同时显示从0x80 0x00到OxFF OxFF共32768个汉字,足够一般应用使 用;(四)由于点阵信息是从PC机的矢量字库中提取出来的,所以可以显示宋体、隶体等各 种字体;(五)通用性强,可用于显示各种大小的字体点阵;(六)也可以用于显示日文、韩 文等其他语言文字。
具体实施例方式
下面对本发明的具体实施方式
做进一步说明。 (1)在单片机的非易失性存储器中建立点阵信息库、汉字原始码库及索引码库。其 中点阵信息库包括用于储存汉字的汉字点阵信息库及用于储存ASCII码的ASCII码点阵信 息库,所述ASCII码点阵信息库为标准库。
(2)获取需要显示的文本的原始码。 以单片机需要显示的文本为字符串"你好你好!"为例。其中"你好你好"为汉字 字符,"!"为ASCII码。由《信息交换用汉字编码字符集》国家标准GB 2312可知,"你好你 好"的汉字原始码为0xC4 0xE3 OxBA 0xC3 0xC4 0xE30xBA 0xC3,由美国信息交换标准编 码ASICII可知,"!"的原始码为0x21。因此,整个字符串"你好你好!"的原始码为0xC4 0xE3 OxBA 0xC3 0xC4 0xE30xBA 0xC3 0x21。 (3)对需要显示的文本中的汉字进行分析,将对应的汉字点阵信息从矢量字库中 逐一提取出来,按顺序写入所述汉字点阵信息库,相同的汉字点阵信息不重复写入。
PC机对汉字字符"你好你好"进行分析,将"你"、"好"的汉字点阵信息从PC机提 供的矢量字库中分别提取出来。现以32X32的矢量字库为例,即每个汉字要显示为32X32 的点阵。由于32X32点阵的一个汉字字型共有32行;每行有32列,占32个二进制位,而 1字节由8个二进制位组成,则每行为4个字节。则32X32点阵的一个汉字字型占32X4 =128个字节。因此,将PC机从矢量字库中提取的32X32汉字"你"的点阵信息保存在汉 字点阵信息库的起始位置开始的第0 127个字节中,将PC机从矢量字库中提取的32X 32 汉字"好"的点阵信息保存在汉字点阵信息库的起始位置开始的第128 255个字节中。
(4)将需要显示的文本中的汉字的原始码,按顺序写入所述汉字原始码库,相同的 汉字原始码不重复写入。
由于"你好你好"的汉字原始码为0xC4 0xE3 OxBA 0xC3 0xC4 0xE3 0xBA0xC3。因 此,将第一个汉字"你"的原始码"0xC4 0xE3"保存在汉字原始码库起始位置开始的第0 1个字节中,将第一个汉字"好"的原始码"OxBA 0xC3"保存在汉字原始码库起始位置开始 的第2 3个字节中。其他相同的汉字不必再重复保存。 (5)将需要显示的文本的原始码重新编码,写入所述索引码库,其步骤包括(5a) 当碰到需要显示文本的原始码中小于0x80的字符,则该字符表示ASCII码,占一个节字,将 该ASCII码的原始码不做改变写入索引码库;(5b)当碰到需要显示文本的原始码中大于或 者等于0x80的字符,则该字符及其后的一个字符表示汉字,占两个节字,将第一个碰到的 汉字重新编码为0x80 0x00写入索引码库;(5c)再次碰到表示汉字的原始码时,若该汉字 未出现过,则依次重新编码为0x80 0x01、0x80 0x02、0x80 0x03…,写入索引码库;若该汉 字已经出现过,则按该已经出现过的同样的编码重新编码,写入索引码库;
对于前述实施例,对需要显示的文本"你好你好!"的原始码重新进行编码。将其 中的汉字"你"重新编码为"0x80 0x00",汉字"好"重新编码为"0x800x01 ",则字符串"你 好你好"的新编码为0x80 0x00 0x80 0x01 0x80 0x00 0x800x01。由于"!"为ASCII码, 其原始码为0x21,不做改变紧跟在"你好你好"的新编码之后。然后将上述"你好你好!"完 整的新编码0x80 0x00 0x80 0x010x80 0x00 0x80 0x01 0x21写入索引码库。
(6)按所述索引码库搜索点阵信息库,将对应的汉字点阵及ASCII点阵予以显示, 其步骤包括(6a)当碰到ASCII码字符时,搜索所述ASCII码点阵信息库;(6b)当碰到汉字 字符时,计算该双字节汉字字符与0x80 0x00的差值,计为该汉字点阵的索引值;(6c)按照 该下式得到的该汉字点阵的起始地址搜索所述汉字点阵信息库该索引值X每个点阵的 字节数+所述汉字点阵信息库的起始地址=该汉字点阵的起始地址。 对于前述实施例,单片机需要显示文本时,按索引码库的内容搜索点阵信息库。碰 到表示汉字的字符"0x80 0x00"时,计算0x80 0x00与0x80 0x00的差值,得到索引值为0, 计算索引值OX每个点阵的字节数128+汉字点阵信息库的起始地址,得到该汉字点阵信息 的起始地址为汉字点阵信息库的起始位置开始的第0个字节,从而将汉字点阵信息库的起 始位置开始的第0 127个字节保存的汉字"你"的点阵予以显示。同样的,碰到表示汉字 的字符"0x80 0x01"时,计算0x80 0x01与0x80 0x00的差值,得到索引值为1,计算索引 值IX每个点阵的字节数128+汉字点阵信息库的起始地址,得到该汉字点阵信息的起始地 址为汉字点阵信息库的起始位置开始的第128个字节,从而将汉字点阵信息库的起始位置 开始的第128 255个字节保存的汉字"好"的点阵予以显示。碰到表示ASCII码的字符 "0x21"时,直接搜索ASCII码点阵信息库,将保存的"!"的16X32点阵予以显示。经上述 步骤,从而将"你好你好!"文本完全显示出来。由于是通过索引码来搜索汉字点阵,与通过 原始码来搜索汉字点阵相比,计算过程简单很多,因此显示速度更快。 (7)PC要读取需要显示的文本时,读所述索引码库,对索引码库中ASCII码直接 读取,对索引码库中汉字则按照下式得到的该汉字原始码的起始地址搜索所述汉字原始码 库,换为相应的原始码读取索引值X2+汉字原始码库的起始地址二该汉字原始码的起始 地址。 对于前述实施例,PC要读取需要显示的文本时,读索引码库。碰到表示汉字的字符 "0x80 0x00"时,计算0x80 0x00与0x80 0x00的差值,得到索引值为0,计算索引值0 X 2+汉字原始码库的起始地址,得到该汉字原始码的起始地址为汉字原始码库的起始位置开始 的第0个字节,从而将"0x80 OxOO"转换为汉字原始码库起始位置开始的第0 1个字节保 存的"你"的原始码"0xC40xE3"。同样的,碰到表示汉字的字符"0x80 0x01"时,计算0x80 0x01与0x800x00的差值,得到索引值为1,计算索引值1 X 2+汉字原始码库的起始地址,得 到该汉字原始码的起始地址为汉字原始码库的起始位置开始的第2个字节,从而将"0x80 Ox01"转换为汉字原始码库起始位置开始的第2 3个字节保存的"好"的原始码"OxBA 0xC3"。碰到表示ASCII码的"0x21"时,则直接读取。经上述步骤,从而将索引码库中的内 容完全转换为PC机可以识别读取的原始码。 本发明可以同时显示从0x80 0x00到OxFF OxFF,共32768个汉字,足够一般应用 使用。不仅适用于显示32X32的汉字点阵,还可以适用于显示16X16、64X64等各种大小 的汉字点阵,并且点阵字库可以是宋体、隶体等各种字体的字库,甚至是日文、韩文等其他 语言文字的点阵字库,因此通用性极强。 以上所述的仅是本发明的优选实施方式,本发明不限于以上实施例。可以理解,本 领域技术人员在不脱离本发明的精神和构思的前提下,可以做出其他改进和变化。
权利要求
一种汉字显示方法,其特征在于包括以下步骤(1)在单片机非易失性存储器中建立点阵信息库、汉字原始码库及索引码库,其中所述点阵信息库包括用于储存汉字的汉字点阵信息库及用于储存ASCII码的ASCII码点阵信息库;(2)获取需要显示的文本的原始码;(3)对需要显示的文本中的汉字进行分析,将对应的汉字点阵信息从矢量字库中逐一提取出来,按顺序写入所述汉字点阵信息库,相同的汉字点阵信息不重复写入;(4)将需要显示的文本中的汉字的原始码,按顺序写入所述汉字原始码库,相同的汉字原始码不重复写入;(5)将需要显示的文本的原始码重新编码,写入所述索引码库,其步骤包括(5a)当碰到需要显示文本的原始码中小于0x80的字符,则该字符表示ASCII码,占一个节字,将该ASCII码的原始码不做改变写入索引码库;(5b)当碰到需要显示文本的原始码中大于或者等于0x80的字符,则该字符及其后的一个字符表示汉字,占两个节字,将第一个碰到的汉字重新编码为0x800x00写入索引码库;(5c)再次碰到表示汉字的原始码时,若该汉字未出现过,则依次重新编码为0x80 0x01、0x80 0x02、0x80 0x03…,写入索引码库;若该汉字已经出现过,则按该已经出现过的同样的编码重新编码,写入索引码库;(6)按所述索引码库搜索点阵信息库,将对应的汉字点阵及ASCII点阵予以显示,其步骤包括(6a)当碰到ASCII码字符时,搜索所述ASCII码点阵信息库;(6b)当碰到汉字字符时,计算该双字节汉字字符与0x80 0x00的差值,计为该汉字点阵的索引值;(6c)按照下式得到的该汉字点阵的起始地址搜索所述汉字点阵信息库该索引值×每个点阵的字节数+所述汉字点阵信息库的起始地址=该汉字点阵的起始地址。
2. 根据权利要求1所述汉字显示方法,其特征在于,还包括以下步骤(7) PC要读取需要显示的文本时,读所述索引码库,对索引码库中ASCII码直接读取, 对索引码库中汉字则按照下式得到的该汉字原始码的起始地址搜索所述汉字原始码库,换 为相应的原始码读取索引值X2+汉字原始码库的起始地址二该汉字原始码的起始地址。
3. 根据权利要求1所述汉字显示方法,其特征在于,所述ASCII码点阵信息库为标准库。
全文摘要
一种汉字显示方法,在单片机非易失性存储器中建立点阵信息库、汉字原始码库及索引码库,获取需要显示的文本的原始码,对需要显示的文本中的汉字进行分析,将对应的汉字点阵信息从矢量字库中提取出来,按顺序写入汉字点阵信息库,将需要显示的文本中的汉字的原始码,按顺序写入汉字原始码库,将需要显示的文本的原始码重新编码,写入索引码库,按索引码库搜索点阵信息库,将对应的汉字点阵及ASCII点阵予以显示。本发明可以在没有字库的单片机上用较小的空间显示汉字,可以显示宋体、隶体等各种字体,以及显示各种大小的字体点阵,也可以用于显示日文、韩文等其他语言文字。通过索引码搜索汉字点阵,计算简单,显示速度快。
文档编号G06F17/30GK101739936SQ20091026307
公开日2010年6月16日 申请日期2009年12月16日 优先权日2009年12月16日
发明者沈斌, 陈志明 申请人:台安科技(无锡)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1