e-Paper 中字符显示
e-Paper 显示中文字符
微雪电子微雪电子墨水屏自推出以来经常有客户问到如何显示中文,今天特意写一个教
程展示如果显示中文。字符显示显示实际上也是图片的显示,一个字符就是一张很小的图片,
字符串显示,就是有一个个字符的图片拼接在一起显示一个字符。
英文字符显示原理
废话少说,在显示中文之前让我们来了解一下 ASCII 码是如何显示的。下面以 2.13inch
e-Paper HAT 的 STM32 程序为例讲解。
要显示字符首先要有字体,示例程序中 Fonts 目录下的文件就是对应不同的字体,打
开文件可以到看一堆数据。
每种字体都有一个结构体分别存储字体的信息。结构体包括数组指针,字体宽度,字体
高度。
1 / 15
e-Paper 中字符显示
以上字体是在 stm32 官方的示例程序复制过来的。是 ASCII 的字体,下来我们来讲解
一下我们怎么制作字体。下面图片是 Font8 字体"A"字符的字模,我们可以用字模软件来得
到 A 字符的数据。
字体数据就是用字模提取软件,将字模按照横向取模或者纵向取模,将逐个像素点用数
组表示。要显示“A”字符就找到“A”字符的数据然后将字模逐点显示出来就行了
2 / 15
e-Paper 中字符显示
这里需要注意一点就是红框这里,字体数组是按照 ASCII 的顺序存储的,第一个字符就
是空格 " ",而每个字符的数据大小是相同的。所以将 A 的 ASCII 码减去空格键的 ASCII
码,这样就可以找到字符"A"的数据开始位置。
字符串显示就是将一个个字符显示出来。
字符集
好了,我们已经大概知道怎么显示英文字符了。在显示中文之前还需要了解字符集。
什么是字符集呢?字符集就是所有字符的集合,ASCII 码就是一个字符集,ASCII 只有 0~127
个字符。用一个字节表示。只能显示英文,不能显示中文。
3 / 15
e-Paper 中字符显示
所以要显示中文就必须使用中文的字符集。中文比较常用的字符集是 GB2312 ,GBK。
GB2312 是对 ASCII 的中文扩展。兼容 ASCII。而 GBK 是 GB2312 的扩展,兼容 GB2312,
能显示更多的中文。有兴趣的同学可以网上一下这两个字符集的定义,如果要显示中文我们
只需要知道。ASCII 码用一个字节表示,中文用两个字节表示。第一个字节小于 127 的字符
就是 ASCII 码,占一个字节。第一个字节大于 127 的字符就是中文,由两个字节连在一起
表示一个汉字。由于中文需要两个字节,首先要将 keil 设置为 GB2312 编码方式.点击 Edit
->Configuration 打开配置窗口,选择 GB2312 编码。
4 / 15
e-Paper 中字符显示
制作中文字符
要显示中文字符,我们首先要制作中文字体。打开字体取模软件,在“参数设置”中点
击“字体输入区字体选择”选择对应的字体和大小。
5 / 15
e-Paper 中字符显示
其他选项可以设置取模方式。
在文字输入区输入要取模的汉字,按 Ctrl + Enter 结束输入
在“取模方式”中选择 “C51 格式” 就可以得到字模数据。
6 / 15
e-Paper 中字符显示
要将中文字库添加到程序中,首先要用一个结构体存储字体信息。
和 ASCII 码 sFONT 结构体类似,中文的结构体为 cFONT,包含有字摸数据指针,字
符个数,字体宽度,字体高度,还有一个 ASCII 字体宽度。而中文数据是 CH_CN 结构体数
组构成,每个字符包含“汉字内码索引”和“点阵码数据”。索引是为了找到这个字符的数
据,点阵码数据就是要显示的数据,这个是字模提取软件得到的。
7 / 15
e-Paper 中字符显示
下 面 就 是 微 软 雅 黑 12 号 字 体 的 结 构 体 变 量 , 包 含 这 个 字 体 的 信 息 。 其 中
Font12N_Table 为数据指针,字符个数为 sizeof(Font12CN_Table)/sizeof(CH_CN),ASCII
字符宽度为 11,汉字宽度为 16,字体高度为 21.
由于微软雅黑字体中,ASCII 字符的宽度会比汉字小一点,所以为了显示好看,设置两
种宽度。
显示中文字符
字体已经制作好了,那么接下来显示了。在程序中添加一个中文字符函数函数。
8 / 15