大一在用51显示汉字的时候,用的是带中文字库的12864液晶屏,那个时候只需要套下一下格式就可以实现汉字的显示:
Write_Com(XXX);
delay();
Write_Data("XXX"); //这里的XXX是汉字
但是接触STM32之后,开发板配套的LCD没有带中文字库,所以就只能直接显示英文,不能直接显示中文。再者加上最近要做一个MP3,想实现对于歌词和UI及歌名的中文显示,便萌生了学习汉字显示原理的想法。
汉字在单片机里不是以字符保存的,而是以内码保存的。常用的内码系统有GB2312,GBK等,前者能表示仅几千个汉字,而后者支持繁体字,总字数的达到两万多个。
一般来说,一个汉字对应一个内码,单片机在知道了内码过后再去字库里查找这个汉字的点阵数据,然后在液晶上显示出来。
大概的步骤如下:汉字内码->查找点阵库->解析->显示。所以我们如果有整个汉字的点阵库,就可以把电脑上的文本信息在单片机上显示出来了。这里要解决的最大的问题就是要制作一个与汉字内码对应的汉字点阵库,而且还要方便单片机查找。
每个GBK码由两个字节组成,第一个字节为0X81~0XFE,第二字节分为两部分,第一部分是0X40~0X7E,第二部分是0X80~0XFE。
第一个字节代表的意义叫做区,那么GBK里就一共有(0XFE-0X81+1)= 126个区。每个区里有(0X40-0X80+8X7E-0X40+2)= 190个汉字,总共是126*190 = 23940个汉字。点阵库只要按照这个编码规则从0X81开始,逐一建立每个区,