1.导言 和单片机搭配的显示器,有12864、TFT、OLED等。在有些系统中,我们需要显示汉字,可以购买汉字芯片,或者购买带汉字显示的显示器,当然,也可以自己做字库。 这里我们介绍一种自己做字库的方法,成本2元*币左右。 2.汉字显示原理 看原理需要知道什么是像素:像素是液晶屏的最小单位,看你的手机屏幕或者电脑屏幕,他们实际上是由一个一个的正方形组成的,如果你的电脑或手机屏幕分辨率太高,不容易看到,需要借助放大镜,分辨率低的话,仔细一看就看见了,都是由一个一个的正方形组成的,这里面的一个正方形,就是1个像素。例如,12864屏幕就是128像素*64像素的屏幕,即横着有12864个正方形,竖着有64个正方形。
上图是12864屏幕的一角,请你仔细看看,是不是一个一个的正方形组成? 比128*64大的分辨率是320*240,还有800*600,1024*768,1280*720等,总之,分辨率越大,人的肉眼就越但不见它是由一个一个小正方形组成的。所以现在的手机屏幕是越来越高,当你用惯一个分辨率极高的手机,再去用你原来分辨率极低的手机,你就会发现原来的那个手机真是很模糊! 讲完了像素的概念,下面开始讲汉字显示的原理: 现在流行的汉字字库有两种,一种是GB2312、一种是GBK。这是两种不同的编码约定。 - GB2312有六千多个汉字,是一些常用的汉字
- GBK有2万多个汉字,包含所有的GB2312汉字,包含整个中国的汉字
假如我们想在液晶显示器上显示一个16*16像素大小的汉字“瑞”,怎么办呢?先看一下“瑞”字在液晶显示器上被放大的效果:
上面的这个瑞即是16*16像素大小的字体,你可以数一下上面的像素点。你可以看一下,在上面“亮”的地方用“写点函数”写成和其它点不同的颜色,不就可以了吗!按照这个思想,我们就需要采用一种有效的办法了。从上面图像的右上角开始扫描,每行有16个点,即可以用两个字节来表示,“暗”的地方用0表示,亮的地方用1表示,那么第一行就可以写成十六进制的00 20,以此类推,可以得出第二行,第三行的字节码,如此一来,一个汉字就需要32个字节来表示。搞好了汉字的这些码,在程序中给TFT开个16*16大小的区域,然后开始扫描这些字节,遇到0,写背景色,遇到1,写定义的颜色。汉字显示就是如此了。 3.为什么显示英文一般不用字库芯片? 英文的单词都是由26个字母构成了,加上大小写的区别和一些字符,也不过才95个。假如要显示8*16像素大小的字符,每一个字符需要16个字节的字库空间,95个字符即是95*16=570个字节。即占用570个字节的RAM。对于LPC1114的8K字节RAM来说,搓搓有余了。 4.为什么显示中文需要字库芯片? 显示中文的话,必须需要每一个字的字模,16*16像素大小的中文,每一个中文都要32个字节。GBK收录了中文两万多个,如果要都能显示,需要700多K字节的空间。 所以,我们选择了把这些字库放在外部存储器当中,我们选择了2M的FLASH存储芯片W25Q16做为存储媒介。放个700多K的字库足够了,如果你愿意,同时放两种字体的字库都没问题。
|