在屏幕上显示字库中汉字
最近在搞屏幕,顺便弄了一个字库芯片,刚刚测试完毕。个人认为项目中人机交互是少不了的,而显示是人机交互中的重要一环,所以准备写一篇教程记录一下。
显示原理
首先要知道屏幕显示的原理。屏幕显示的原理其实很简单,其实就是和点阵一样,只不过屏幕集成度高,本质控制输出高或者低,跟点灯一样。
拿0.96寸的oled来举个例子。0.96oled分辨率128*64,也就是说横向128个led,竖向64个led,你想点亮某个led(假设1为亮,0为灭),那么只需要将那个led对应的位置1即可。那如何显示汉字呢。其实原理也是一样的。如下图所示,只需要将对应的点点亮,而这些对应的点可以拼成一个汉字的模样。
再具体一点就是,单片机将想要显示的点的数据通过spi或者iic传给屏幕驱动芯片,屏幕驱动得到命令后就会将对应的点点亮,具体怎么点后面介绍。
字体模型
看到这里可能会有疑问,我不可能每个汉字都去照着样子去点亮led吧?那多费劲!
确实费劲,不过有简单的方法。1.取模 2.用字库(本质还是取模)
1.取模
什么是取模?就上上图看到的一样,将汉字对应的点转换成单片机能识别的二进制数去点亮led,从而显示到屏幕上。只不过这一步可以用软件自动生成,不需要你自己比对这汉字去一个一个点点儿了。下面是三个字取模之后得到的数组,我们只需要将汉字输入到软件中,点击生成字模就行了,是不是很简单。
嵌(0) 入(1) 式(2)
{
0x01,0x80,0x31,0x8C,0x31,0x8C,0x3F,0xFC,0x00,0x30,0x33,0x30,0x33,0x3F,0xFF,0xE3},
{
0x33,0xDE,0x33,0x18,0x3F,0x18,0x33,0x18,0x33,0x3C,0x3F,0x3C,0x33,0x66,0x00,0xC3},/*"嵌",0*/
{
0x06,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0xC0,0x03,0xC0,0x03,0xC0},
{
0x06,0x60,0x06,0x60,0x0C,0x30,0x0C,0x30,0x18,0x18,0x30,0x18,0x60,0x0C,0xC0,0x07},/*"入",1*/