汉字显示实验

本章,我们将向大家介绍,如何用 STM32 控制 LCD 显示汉字。在本章中,我们将使用外部 FLASH 来存储字库,并可以通过 SD 卡更新字库。 STM32
读取存在 FLASH 里面的字库,然后将汉字显示在 LCD 上面。 本章分为如下几个部分:
 1.汉字显示原理简介
 2.硬件设计
 3.软件设计
4.下载验证

1.汉字显示原理简介

    常用的汉字内码系统GB2312,GB13000,GBK,BIG5(繁体)等几种,其中GB2312支持的汉字仅有几千个,很多时候不够用,而GBK内码不仅完全兼容GB2312,还支持了繁体字,总汉字数有2万多个,完全能满足我们的一般应用的要求。

    本实验我们将制作三个GBK字库,制作好的字库放在SD卡里面,然后通过SD卡,将字库文件复制到外部FLASH芯片W25Q64里,这样,W25Q64就相当于一个汉字字库芯片了。

     汉字在液晶上的显示原理与前面显示字符是一样的。汉字在液晶上的显示其实就是一些点的显示与不显示。要显示汉字,我们首先要知道汉字的点阵数据,这些数据可以由专门的软件来生成。只要知道了一个汉字点阵的生成方法,那么我们在程序里面就可以把这个点阵数据解析成一个汉字。

    知道显示了一个汉字,就可以推及整个汉字库了。汉字在各种文件里面的存储不是以点阵数据的形式存储的(否则那占用的空间就太大了),而是以内码的形式存储的,就是GB2312/GBK/BIG5 等这几种的一种,每个汉字对应着一个内码,在知道了内码之后再去字库里面查找这个汉字的点阵数据,然后在液晶上显示出来。这个过程我们是看不到,但是计算机是要去执行的。

    单片机要显示汉字也与此类似:汉字内码(GBK/GB2312)----查找点阵库----解析----显示。所以只要我们有了整个汉字库的点阵,就可以把电脑上的文本信息在单片机上显示出来了。
这里我们要解决的最大问题就是制作一个与汉字内码对得上号的汉字点阵库。而且要方便单片机的查找。每个 GBK 码由 2 个节组成,第一个字节为 0X81~0XFE, 第二个字节分为两部分,一是 0X40~0X7E,二是 0X80~0XFE。其中与 GB2312 相同的区域,字完全相同。

我们把第一个字节代表的意义称为区,那么 GBK 里面总共有 126 个区(0XFE-0X81+1),每个区内有 190 个汉字(0XFE-0X80+0X7E-0X40+2),总共就有 126*190=23940 个汉字。我们的点阵库只要按照这个编码规则从 0X8140 开始,逐一建立,每个区的点阵大小为每个汉字所用的字节数*190。这样,我们就可以得到在这个字库里面定位汉字的方法:
当 GBKL<0X7F 时: Hp=((GBKH-0x81)*190+GBKL-0X40)*csize;
当 GBKL>0X80 时: Hp=((GBKH-0x81)*190+GBKL-0X41)*csize;

其中GBKH、GBKL分别表示GBK的第一个字节和第二个字节(也就是高位和低位),Hp为对应还在点阵数据在字库里面的起始地址(假设是从开始存放)csize代表一个汉字点阵所占的字节数。可以得出字体大小与点阵所占字节数的对应关系为:
csize=(size/8+((size%8)?1:0))*size;

size为字体大小,比如12(12*12)、16(16*16)、24(24*24)等。

这样我们只要得到汉字的GBK码,就可以得到该汉字点阵库里面的位置,从而获取其点阵数据,显示这个汉字了。

 

 

 

 

 

 


 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值