APP下载

汉字字符串的无冗余可裁剪中文显示解决方案※*

2012-08-27陈孝坚陈健屈环宇

单片机与嵌入式系统应用 2012年12期
关键词:机软件存储空间字符串

陈孝坚,陈健,屈环宇

(嘉兴学院 数理与信息工程学院,嘉兴314001)

引 言

随着数字化技术的飞速发展,嵌入式产品应用在我们生活中的各个方面。尤其是那些高性能、低成本、低功耗的RISC处理器已广泛地嵌入到家用电器、仪器仪表等生活所必需的产品之中。嵌入式产品将面向基层、面向大众,获得更广泛的应用。

当产品面向大众时,要做到较好的人机交互,就必须能显示中文,从而达到与用户对话的效果。于是,便出现了一个值得深入研究的问题:显示中文时如何实现占用存储空间小、字模无冗余、不依赖于其他嵌入式GUI、操作方便等效果。

1 中文显示解决方案的设计理念

作者多次遇到需在液晶屏上显示中文的项目需求,通常用以下两种方法解决。

(1)逐个字模法

当显示汉字字符串数在十几个时,通常会逐个获取汉字字模,再组合成所要显示的汉字字符串。

在硬件层面,此方法虽占用的存储空间较小,但容易出现字模冗余。

在操作层面,此方法操作起来非常复杂,得逐字取模,而且还需组合成汉字字符串数组。当所需显示的汉字字符串增加时,取模操作将成倍数增加,而组合成字符串的操作将呈指数次增加。

也就是说,当需要显示字符串较多时,此方法非常繁琐。

(2)字模库法

当所需显示的汉字字符串数在几百个时,通常会采用字模库法。

在硬件层面,此方法占用的存储空间非常大,不会出现字模冗余。

在操作层面,此方法操作起来非常方便。

但这种方法有个致命的缺陷,其占用的存储空间太大,不能应用在家用电器、仪器仪表等追求低成本的小型嵌入式产品中。

(3)基于汉字字符串法

这种方法是综合以上两种方法的优缺点改进而成的。

在硬件层面,此方法所占用的存储空间根据用户所用到的字数多少而决定,且消除了字模的冗余。

在操作层面,此方法以数组的形式提供给用户接口,简单易用。

此方法只提取产品中所用到的汉字字模,占用存储空间小,且以数组的形式提供给用户调用的接口,简单易用,非常适用于家用电器、仪器仪表等存储容量较小的小型嵌入式系统。

2 中文显示解决方案简介

该中文显示解决方案由两部分组成:一是运行于宿主机的上位机软件;二是运行于目标机的具有中文显示功能的函数集。

2.1 上位机软件

用户输入:只需简单地输入产品中所用到的字符串即可,如图1所示,如“嘉兴的南湖。”、“共产党的诞生地在南湖!”、“我们的大学在嘉兴!”。

软件输出:软件根据用户的输入,会按照顺序提取出其中无冗余的字——“嘉兴的南湖。共产党诞生地在!我们大学”,之后生成专用的字模库、字符串所对应的字模数组,这些数据存放在软件生成的test.h文件中。

图1 上位机软件

2.2 具有中文显示功能的函数集

如图2所示,该截图截自于该函数集的头文件。为尽可能地简化使用步骤,将该中文显示解决方案的配置及函数声明放在了同一个头文件中,限于篇幅,截图只显示了16×16的汉字显示及相关函数,相应的32×32、48×48显示函数等也包含在该头文件中。

图2 函数集头文件截图

配置部分及中文显示函数集如下:

考虑到ASCII的字模数据仅为汉字的一半,故从上位机软件和目标机程序两方面着手,解决汉字和ASCII交叉显示及间距计算等问题。例如16×16的汉字字模数据为32个字节,而16×16的ASCII码数据为16个字节,因而在上位机软件产生字模数据时,在ASCII数据前加16个0x00,而在目标机程序中判断并消除这16个0x00。这样既达到了半字显示的目的,又解决了ASCII码字模数组与汉字字模数组间不相容的问题。

3 此方案的使用方法

有了前面的介绍,大家对该中文显示解决方案应该有了比较清晰的了解。接下来介绍一下其使用方法。

①用户首先要实现液晶屏的画点功能。也就是说需实现两个函数的功能:液晶屏初始化函数和画点函数。

②将该解决方案提供的3 个文件添加到工程文件中,如图3所示。

图3 工程文件

③在上位机软件中,输入项目中所需显示的所有字符串,并点击“取字模”按钮生成特定的字模库。

④将上位机生成的test.h中的数据复制到font.h文件中。

⑤调用该方案提供的相关显示函数即可完成中文显示功能。

结 语

该GUI中文显示解决方案专为LED 广告屏、家用电器、仪器仪表等追求低成本、高性能的小型嵌入式系统而设计。有如下优点:

①无需导入整个汉字库,占用存储空间大大减小。

②用户使用方便,只需输入应用中所需的字符串即可。

③每个汉字的字模只定义一次,消除不必要的冗余。

④每个字符数组后有对应的字符串注释,方便用户查找调用。

⑤不依赖于其他GUI,易于移植,可独立运行。

⑥可选择实现16×16、32×32、48×48这3种汉字及ASCII码的交叉显示。

编者注:源程序见本刊网站www.mesnet.com.cn。

[1]Ian F Darwin.Java经典实例[M].2版.关丽容,张晓坤译.北京:中国电力出版社,2009.

[2]林信良.Java JDK6 学习笔记[M].北京:清华大学出版社,2007.

[3]王田苗.嵌入式系统设计与实例开发——基于ARM 微处理器与μC/OS-II实时操作系统[M].北京:清华大学出版社,2003:103-135.

[4]任哲.嵌入式操作系统基础μC/OS-II和Linux[M].北京:北京航空航天大学出版社,2006:52.

猜你喜欢

机软件存储空间字符串
基于多种群协同进化算法的数据并行聚类算法
苹果订阅捆绑服务Apple One正式上线
用好Windows 10保留的存储空间
道岔监测系统上位机软件设计
基于正交试验法的北斗用户机软件测试用例设计
PCI-e高速数据采集卡的驱动与上位机软件设计
一种新的基于对称性的字符串相似性处理算法
图形化仪表控制系统上位机软件的设计与开发
依据字符串匹配的中文分词模型研究
一种针对Java中字符串的内存管理方案