- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
8、DIY自己的字体
上一篇帖子实现了修改OLED的程序,并基本摸清其程序的流程。现在厂家又提供了OLED的取模软件,我们就可以创造自己的内容了。下面进入正题:
我们先将程序源码恢复到出厂时间状态,OLED的开机内容恢复到正常。然后我们去修改“开发从未如此简单”的界面。首先还是要找到控制这个内容的代码位置,如下图:
程序当中的每一个OLED_show_chn()的功能是显示一个字,后面我添加了注释,“开发从未如此简单”一共8个字,一共使用了8次OLED_show_chn();我们进入到这个函数中:
从程序员对程序的信息标注知道这段程序是用来显示汉字的,函数的3个参数代表起始点坐标和汉字内容,其中第3个参数就是选择字库当中的字了,16,17,18,19,20,21,22,23分别对应“开发从未如此简单”8个汉字。如下图:
程序里面的两个for循环是逐个点亮OLED的点阵,因为使用的是16*16的字库,所以要想显示一个字每次都要刷新16次才能完整的将字体显示出来。但是为什么是两个for语句?第一感觉一个就可以的了,但是不知道为什么需要2个,那么下面就将第二个for语句注释掉,编译烧录看看现象:
我烧录进板子之后的现象是“开发从未如此简单”的字样只显示了上面的半部分,下半部分完全消失了。由此可以看来第二个for语句是控制汉字的下半部分的,那第一个for就是控制上半部分了。OLED屏幕现象如下图(手机像素实在是差):
然后看到程序里面第三个参数之前都被乘32了,不知道什么原因,开始猜测可能是显示屏的硬件原因,我把那个32去掉之后OLED的显示内容就是乱码了,不成汉字。但是再观察一下16*16的字库发现,一个汉字是由32个数据组成的,程序员为了观察方面就把数据分层次了,并标注的0-23。因为我把32去掉了,本来“开”是第16行的所有32个数据的(16*32),然后就只剩下16了,就变成了第一行的第16个数据了0x04了,再扫描16次隐隐约约出现的是“温”的一部分,说白了*32就是该汉字在字库中的偏移地址。所以这个现象也解释通了,下面是修改的程序和OLED的现象:
好了,现在我们已经弄清楚程序是怎么一步一步控制汉字的显示了,下面我们就用厂家提供的“取模软件”生成一些自己的汉字添加到程序当中。我用这个软件生成了几个汉字“渴死的鱼儿”,并且代替了“开发从未如此简单”的内容显示在OLED上,效果还是不错的!下面这个是软件的界面:
这是个是字符模式,大家可以自己摸索摸索怎么玩的。打开软件的选项菜单,在弹出的窗口里面设置好字模选项,输出方式,点阵格式,取模走向,取模方式,输出数制等等点击确定,从codetab.h的字库程序说明情况来看,对软件的取模方式是:共阴(点阵格式:阴码)、列行式(取模方式)、逆向输出(取模走向)、输出数制(16进制)、点阵选择16。如下图:
设置确定后,点击“选项”下面的文本的图标,在弹出的窗口中输入你要生成的汉字,最后点击“开始生成”。如下图我输入的是“渴死的鱼儿”:
生成之后在你选择的保存路径中就可以看到2个文本了:
第一个文本内容就是程序中需要到的一堆十六进制数据,第二个文本是软件的设置输出的无关紧要,下图就是数据的内容:
可以看到这个内容和程序中的16*16的字库格式是一模一样的,我们把它复制到相应的程序当中去:
并在原来显示“开发从未如此简单”的程序位置修改程序内容,让其显示“渴死的鱼儿”(记得把之前的程序注释掉),如下图:
因为为了让字体显示的更散开一点,我每个字之间空了一个字,所以函数的起始点坐标相隔32个像素,但是最后一个是在不够32了,如果写出128就会被“挤”到下一行去显示了,所以最后的效果图最后一个字有点挤!
到现在已经可以完全实现自己的效果了,自己想添加什么内容可以随时加入程序,还有后期开发过程中显示“温度”、“湿度”、“大气压”什么的都可以,也可以加入自己的logo!附件资料是厂家提供的字模软件和这篇帖子的Word文档,厂商的技术支持还是挺给力的!
取模软件PCtoLCD:PCtoLCD2002(取字软件).zip(907.5 KB, 下载次数: 11)
2016-2-20 15:04 上传
点击文件名下载附件本帖Word版教程:DIY自己的字体.rar(1.23 MB, 下载次数: 11)
2016-2-20 15:04 上传
点击文件名下载附件图片怎么显示 ,比如公司LOGO
帖子里面介绍的有呀,就是程序里面的一个函数show logo();这个就是控制显示logo界面的,你也可以换成你自己的logo哦
你的意思是取模软件制造logo吗,这个我感觉他们是在软件里面画出来的
恩 按照点阵自己画吗?谢谢
我问他们了,是自己一个一个点出来的,在取模上面画出来的!
貌似可以导入某种图片来生成logo的
谢谢分享,....................
谢谢分享........
上一篇:7、自定义OLED开机内容
下一篇:牛人Zigbee学习经验(七)之DMA