- 1 -
中国科技论文在线
基于 Visual Basic 的汉字字模软件设计
甘醇*
作者简介:甘醇(1987-),男,研究生,主要研究方向:电力电子与电力传动
(中国矿业大学信电学院,江苏 徐州 221008)
摘要:本文主要介绍了字模软件的实现原理,并结合实际情况,设计了相关的字模软件。为
了方便软件系统设计,软件采用 Visual Basic 作为编程语言。为了达到多平台的目的,软
件可以输出两种不同的编程语言,为了面向不同的点阵显示屏用户,软件可以提供 4种不同
的输出类型。软件采用了很多人性化的设计,提供了 16×16 点阵显示模拟和复制等扩展功
能。为点阵显示屏相关电路设计者提供了方便,达到了提高工作效率、节约成本的目的。
关键词:计算机技术;字模;Visual Basic;点阵显示
中图分类号:TP311
Characters Font Software Design Based on Visual Basic
Gan Chun
(School of Information and Electrical Engineering, China University of Mining and Technology,
JiangSu XuZhou 221008)
Abstract: This paper introduces the principle of word-model software and makes design combined
with the actual situation. In order to facilitate the software system design, software using Visual Basic
programming language as. In order to achieve the goal of the kinds of different software platform, the
software can output the two different programming languages. To face different matrix display users,
the software can provide four different types of output. The paper uses many humanized designs,
provides 16 ×16 dot matrix display simulation and copy function expansion. It provides convenience
for designers of Dot matrix LCD related circuit and improves work efficiency and saves cost.
Keywords:computer technology;font;Visual Basic;dot matrix display
0 引言
点阵显示屏已经被广泛地应用于火车站、飞机场、船泊码头、银行等各种广告宣传中,
它具有显示稳定、功耗低、寿命长、显示内容易改、显示方式丰富等特点[1]。在液晶上显示
汉字,以往较多的场合是根据具体的现场要求,在许多工业控制、智能化仪器仪表设计中,
常只需要少量有限的汉字输出,这时构造汉字代码建立字库尤为重要。多数工程技术人员依
据汉字点阵构造原理,将每个汉字一点一点地描出来,然后将其点阵信息编成代码值引入设
计软件。显示相关的部分汉字,这种针对特定场合的汉字显示是简单可行的,不需要很大的
字库,但有很大的缺点[2]:1. 只能显示固定的几个汉字,不能满足显示较多汉字的场合,也
不易升级;2. 交互性较差,用户一般无法输入汉字进行交互;3. 不易于通信,由于汉字存
储和处理没有按照一定的规范,所以也就无法传输汉字信息和其他设备进行通信。
由于现在的产品设计、开发软件大部分是以 Windows 操作系统作为操作平台,所以在
Windows 操作平台上开发一种简便、快捷的方法从字库中提取标准汉字字模代码也很有必
要。由于现在的点阵显示屏种类较多,设计语言较为广泛,所以设计一款多平台,面向不同
类型的点阵显示屏的汉字字模软件,是很符合市场需要的。
- 2 -
中国科技论文在线
1 字模提取原理
在计算机系统中,利用二个字节的代码表示一个汉字。计算机系统内部处理和存储汉字
使用的是两个字节的机内码。UCDOS 为用户提供了大多数汉字的 16 点阵和 24 点阵的字库,
其中以 16×16 点阵字库最为常用。汉字点阵字模代码是按照区位码的顺序在文件 16×16 点
阵字库中存放的。在程序中容易获得汉字的机内码,如果知道区位码和机内码之间的关系,
就可以编程得到字模代码。
区位码和机内码的关系为:机内码高字节=区码+A0H;机内码低字节=位码+A0H。经
上述分析可得,获取汉字字模的基本步骤为:1. 获取汉字的机内码。2. 通过汉字的机内码
推算出区位码。3. 由区位码从字库中查找得到汉字点阵字模代码。
Windows 操作系统提供了大量的矢量字库,不但可以选择汉字的点阵大小,而且字体
非常丰富,添加新的字库也比较容易。所以获取矢量字体的点阵数据可以大大提高汉字显示
的便利[3]。
矢量字库中储存的是一些曲线的数据,不像点阵字库一样直接读取就能显示。如果想读
取矢量数据,然后画图,一般采用间接的方式:先设置字号,字体,加粗,斜体等。然后将
这个字显示到位图上,之后通过读取位图的各点数据,来获得汉字的点阵数据。点阵字库字
模提取流程图和矢量字库字模提取流程图如图 1、2 所示。
获 得 汉 字 机
内 码
转 换 为 区 位
码
在 字 库 中 查
找 字 模 代 码
生 成 字 模 代
码
设 置 字 体 格
式
生 成 位 图
读 取 位 图 各
点 的 代 码
生 成 字 模 代
码
图1 点阵字库字模提取流程图 图2 矢量字库字模提取流程图
Extraction flow of word-model Extraction flow of word-model
of Bitmap fonts of Vector fonts
2 软件设计方案
字模提取模块方案设计
本设计采用 VB 为软件设计平台,实现 16×16 点阵字模输出,为了面向不同的点阵显示
屏用户,本设计提供了 4 种不同的输出方式[4]:横向输出;纵向输出;纵向取模上高位;纵
向取模下高位。这四种输出字模方式涵盖了大部分的点阵显示屏的显示方式,配合 4 种不同
的字模代码输出方式,实现了多平台输出的目的。同时本设计也提供了复制操作、报时操作、
模拟点阵显示操作,方便软件使用者提取所需字模并进行校对。
本设计采用的是从 HZK16 点阵字库中提取汉字字模代码的方案。HZK16 字库是符合
GB2312 标准的 16×16 点阵字库[5],HZK16 的 GB2312-80 支持的汉字有 6763 个,符号 682
- 3 -
中国科技论文在线
个。其中一级汉字有 3755 个,按升序排列,二级汉字有 3008 个,按偏旁部首排列。一个
GB2312 汉字是由两个字节编码的,范围为 A1A1~FEFE。A1-A9 为符号区,B0 到 F7 为汉
字区。每一个区有 94 个字符。一个汉字占两个字节,这两个中前一个字节为该汉字的区号,
后一个字节为该字的位号。其中,每个区记录 94 个汉字,位号为该字在该区中的位置。要
找到汉字在 hzk16 库中的位置就必须得到它的区码和位码。因为汉字编码是从 0xa0 区开始
的,所以文件最前面就是从 0xa0 区开始,要算出相对区码:
区码:区号(汉字的第一个字节)- 0xa0
位码:位号(汉字的第二个字节)- 0xa0
可以得到汉字在 HZK16 中的绝对偏移位置:offset=(94×(区码-1)+(位码-1))×32。通过偏
移地址通过偏移地址从 HZK16 中按顺序读取汉字编码,HZK16 字库中汉字字模存储方式如
图 3 所示,字模提取方案流程图如图 4 所示。
1 字 节 2 字 节
3 字 节 4 字 节
… … … …
… … … …
… … … …
… … … …
… … … …
… … … …
… … … …
… … … …
… … … …
… … … …
… … … …
… … … …
2 9 字 节 3 0 字 节
3 1 字 节 3 2 字 节
图 3 HZK16 字库中汉字字模存储方式
Sorage ways of characters font in HZK16
图 4 字模提取方案流程图
Font extraction solution chart
- 4 -
中国科技论文在线
字模代码输出模块方案设计
本设计面向汇编语言和 C 语言,提供了正常显示和取反显示 2 种不同输出模式,针对 4
种不同的液晶显示需求,输出 16×16 点阵字模代码[6]。针对这 4 种不同的输出方式,本设计
分别采用了 4 种不同的方案:
横向输出:此种输出为 3 种不同输出方案的基础。横向输出对应的顺序为 HZK16 字库
存放字模的顺序,所以,此横向输出较为简单。横向输出采用如下步骤:(1)将 HZK 16 字库
中提取的字模代码转化为 2 进制代码。(2)将产生的 2 进制代码放入一个 1 维 256 元素的数
组中。此处生成 1 维 256 元素数组为实现 1 点阵横向模拟、纵向输出的字模提取提供便利。
纵向输出:(1)读取横向输出产生的 1 维 256 元素数组。(2) 从读取的数组第一个点起每
隔 16 个点读取数组中的数,读完 16 组数字后,改从第 2 点起每隔 16 个点读取数组中的数,
进行 16 次,以此类推,直到从第 16 个点起,读完 16 组数据。将所有的读取的数据按照先
后顺序存入一个新的 1 维 256 元素数组。(3) 读取第(2)步产生的新的一维数组的数据,每 8
个数据,按照 2 进制字节对应的模值进行赋值,然后进行相加,求出纵向显示对应的每字节
的 10 进制数据。将第(2)步产生的 10 进制数据存入一个新的 1 维 32 元素的数组。第(3)步产
生的新的 1 维 256 元素数组中的数据对应的为纵向模拟显示时使用的 2 进制点阵字库,此步
骤为纵向点阵显示模块,提供了便利。
纵向输出上高位输出:(1)读取纵向输出第(3)步产生的 1 维 32 元素的数组。(2)从读取的
数组第一个数据读取,每隔 2 个读一次,读到第 31 个数据时,改从第 2 个元素每隔两个进
行读取,读到第 32 个数据。(3)将第(2)步读取的 10 进制数据放入一个新的 1 维 32 元素的数
组中。(4)按顺序读取第(3)步产生的数组的前 8 个数据,然后间隔 8 个数据,再进行连续读
取 8 个数据。读完 16 组后,从原数组第 9 个数据开始读取,按顺序读取原数组的 8 个数据,
然后间隔 8 个数据进行读取,直到再次读完 16 组数据。把读取的数据按顺序存入一个新的
1 维 256 元素的数组中。纵向输出上高位输出方式的算法集合了横向输出和纵向输出所产生
的数据,并且产生了新的 1 维 256 元素的数组,可以用于纵向输出上高位的模拟点阵显示模
块。
纵向输出下高位输出:(1)读取纵向输出上高位产生的 10 进制数组,按照先读单数,后
读双数的顺序,存入新的 10 进制数组。(2)读取纵向输出上高位产生的 2 进制数组。先从第
8 位读至第 1 位,再从第 16 位读至第 9 位,以此类推,读完全部的 256 个数据,并按读取
顺序放入新的 2 进制数组中。步骤(1)产生的 10 进制数组用来作为字模输出的数组,步骤(2)
产生的数组用于纵向输出下高位的模拟点阵显示模块。
字模输出模块流程图模块和 VB 界面设计如图 4 和 5 所示。
- 5 -
中国科技论文在线
图 4 字模输出模块流程图
Font output module chart
图 5 字模输出模块界面
Font output module interface
- 6 -
中国科技论文在线
模拟点阵显示模块方案设计
模拟点阵显示模块为本设计中的一个重点模块。此模块的实现采用如下方案:1. 按照
不同的输出方式读取输出字模过程中产生的 2 进制数组。2. 根据数据对应的数值在图片框
中以 16×16 方式画圈。模拟点阵显示实现较为简单,而且可以方便字模软件使用者查看点阵
显示情况。程序流程图和 VB 界面设计如图 6、7 所示。
图 6 点阵模拟输出流程图
Bitmap analog output chart
图 7 16×16 点阵模拟输出界面图
16×16 bitmap analog output interface
- 7 -
中国科技论文在线
字模代码输出模块方案设计
由模块设计部份可以知道,系统至少需要:1 个列表框、1 个单选框、2 个图片框、4
个按钮和 5 个文本框。为了美化程序界面,又加入了 1 个进度条控件、2 个时钟控件和 14
个标签,此时界面设计比较复杂,如何安排界面尤为重要,程序界面如图 8 所示。
图 8 最终程序界面
Eventually programming interface
经过调试,每个模块都能圆满实现,达到了字模软件设计的要求和目的。当输入汉字并
选择输出方式,点击“模拟点阵显示”即可输出对应汉字的 C 语言字模、C 语言取反字模、
汇编语言自模、汇编语言取反字模,如图 9 所示。
图 9 最终输出界面
Finally output interface
- 8 -
中国科技论文在线
3 字模代码仿真调试
为了验证软件输出字模代码的正确性,采用“汉字”进行测试,输出方式为 C 语言字
模纵向输出下高位。
“汉”的字模代码:0x10,0x22,0x64,0x0C,0x80,0x04,0x74,0x84,
0x04,0x04,0x04,0xC4,0x3E,0x04,0x00,0x00,
0x04,0x04,0x7E,0x01,0x80,0x40,0x20,0x11,
0x0A,0x04,0x0B,0x10,0x60,0xC0,0x40,0x00.
“字”的字模代码:0x00,0x10,0x0C,0x24,0x24,0x24,0x25,0x26,
0xA4,0x64,0x24,0x04,0x14,0x0C,0x00,0x00,
0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,
0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x00.
进行代码查询输出完全正确。经实验证明,本软件可以输出正确的纵向显示下高位字模
代码。由于本软件自带了 16×16 点阵模拟显示功能,且显示按照四种不同的输出方式进行,
已经达到了确保输出准确性的目的。
4 结论
本设计采用 VB 编程语言实现了从 HZK16 字库中提取 16×16 点阵字模,并将对应的
字模代码转换成 4 种不同的 16 进制代码并进行输出。通过此软件可以方便的提取汉字字模
用于点阵液晶显示。
[参考文献] (References)
[1] 黄金龙.点阵汉字字模提取软件设计[J] . 南昌:南昌职业技术师范学院学报,
[2] 梁纯,王军. 基于 MCS-51 单片机的 LED 点阵图文显示屏设计[J]. 北京:工矿自动化,2005.
[3] 邓彬伟. 矢量字库的设计与实现[J]. 南昌:计算机与现代,
[4] 堂学忠. Visual Basic 程序设计教程[M]. 北京:中国电力出版社,2002.
[5]《中华人民共和国汉字区位码表》( GB2312) [S].
[6] 诸昌铃. LDE 显示屏系统原理及工程技术[M]. 成都:电子科技大学出版社, .