FLASH 字库实验
学习目标:
1. 复习 LCD 显示文字的原理。
2. 复习使用 FATFS 读取文件。
3. 学习 GBK 字库编码原理。
汉字显示在 LCD 彩屏中经常会用到,少则会用几个字,多则使用多个字库。
一般单片机的内存都很小,所以一般不在程序变量中存放字库,而使用 FLASH
来制作字库是一种很常见的字库使用方式。
这一节我们来学习如何使用 FLASH 制作字库。
15.1 GBK 字库编码原理
1. 汉字编码简介及字库显示原理简介
常用的汉字内码系统有 GB2312,GB13000,GBK,BIG5(繁体)等几种,
其中 GB2312 支持的汉字仅有几千个,很多时候不够用,而 GBK 内码不仅完全
兼容 GB2312,还支持了繁体字,总汉字数有 2 万多个,完全能满足我们一般应
用的要求。我们这节课使用的汉字内码系统就是 GBK 内码。
我们知道,文字在 LCD 上面显示,其实也就是在一定范围内显示一些点,
不显示一些点,从而构成一个文字显示出来,而我们的字库其实也就是存储这些
文字的点阵数据,这些点阵数据存储的顺序使用的就是 GBK 编码。那么我们要
显示字库汉字的整个过程为:
1) 读取汉字的 GBK 编码。(当我们使用 MDK 编译的时候,比如说我们定
义一组汉字字符串,其实在内存上面保存的数据其实也就是 GBK 的编
码。)
2) 根据 GBK 编码寻找到该文字在字库中的偏移地址。
3) 将字库编译地址转换成该文字的点阵数据在 FLASH 中的偏移地址。
4) 根据 FLASH 地址将文字的点阵数据读取显示到 LCD 彩屏上。
2. GBK 编码简介
GBK 码由 2 个字节组成,第 1 个字节为:0x81~0xFE,第 2 个字节分为两部
分:第一部分是 0x40~0x7E,第二部分是 0x80~0xFE。我们把第 1 个字节代表的
意义称为区,那么 GBK 里面总共有 126 个区(0xFE-0x81+1),每个区内有 190
个汉字(0xFE – 0x80 + 0x7E - 0x40 + 2),总共就有 126*190=23940 个汉字。
这么说大家可能理解起来比较模糊,我们来看一下第 1 个区的汉字编码:
第一区的第 1 个字节也就是 0x80,比如从下图中,我们就可以知道“丂”字
的 GBK 嘛是:0x80,0x40,依此类推,“丄”字的编码是:0x80,0x41,等等。
在这里大家注意观察,在一个区内,编码 0x80,0x7F 位置是空的,也就是
没有汉字,所以说第 2 个字节是分为两部分的。
在这里还有个小知识点,为什么第 1 个字节是从 0x80 开始的呢?这个是为
了兼容 ASCII 码而设定的,我们知道 ASCII 码一共有 127 个,也就是从
0x00~0x77F,当我们读取文字编码的第 1 个字节是小于 0x80 的时候,就可以判
断这个字符是个 ASCII 码字符。