今天是年初一,恭祝坛友们新春快乐!狗年吉祥,万事如意,身体健康,财运旺旺,有更多的高科技成果出现。今年回乡下过年,无聊,把年前未完工的DIY的部份东西整理一下,把本人显示字库的制作方法整理好,并发出来。
这次编写字库的主要原因是打算升级VFD多功能闹种,
想增加电源控制音频控制等功能,由于单片机空间有限,程序超出了单片机空间,所以才想把显示的字库移到W25Q16中,由于网上没有找不到合适的字库,手头上也没有W25Q16的编程器,网上的字库生成软件找不到破解板,所以采用土办法编写,由于VFD显示不通用,所以在这又制作比较常用的OLED显示字库,把制作过程发出来供坛友参考。
本次制作是采用实验板及IIC总线的OLED显示器及W25Q16芯片进行制作,硬件如下图,
实验板电路图如下,OLED的时钟脚接P21,数据脚接P22,W25Q16的DO脚接 P0^3,DIO 脚接P0^5,CLK 脚接P0^4,CS脚接 P0^2,HOLD及WP接3.3V电源,注意W25Q16供电不能超3.6V。
以下为完成的效果图。
下图为9个区里取一个字或最后个字把它显示出来。在校验字库是否正确时,需显示的内容一样才对。
以下为ASII字库。
以下为唐诗一首。
以下为本人字库的制作方法,比较土,能用。
先在网上下载GB2312字库表,在压缩包文件夹里GB2312编码范围.txt文件就是,由于它是带说明的,字的顺序不连续,所以需把没用的字清空,如用手工清理太麻烦,而且容易出错,所以用易语言写一个小工具,把文字提取出来(如下图),
并进行整理,然后按照表的顺序,分成每1024个编码为一组(在每个32K区程序内的TXT文件就是整理好的文字,不要改动它。),主要是由于是采用STC15W4K48写入W25Q16,由于单片机内部程序空间只有48K,每个显示汉字是用16*16,即需32B,1024个字的编码占了32K,为了方便操作,所以1024个字为一组,汉字编码是有90多区,即9K多个字,所以需分9组,别加ASII编码(16*8,8*8两种显示)占用一组,所以共10组,即需写入单片机十次。
以下按第一区32K的编写过程作介绍,其它区是一样的,由于GB2312是从0100开始的,所为了简化计算,所以第一组补00-99空值。。第9区由于只有607个字,所以需补416个空位。
打开第一区32K的程序文件,里面有个文字编码表1.txt,这个文件是已排列好的字,只需在字模提取软件提取出来就行了。字模提取软件是PCtoLCD2002完美版,本显示字库是宋体16*16,OLED显示的字是列行式逆向,需在设置好相对应的参数,如下图,
点导入文本,导入文字编码表1.txt,然后生成,保存在编码表.txt中,然后打开它,检查一下是不是1024个字的编码,
如没错就全选,复制到第一区程序里面的unsigned char code DISPdat16X16[],
然后生成hex文件就行了,然后写入单片机,运行一下,通过串口输出检查一下对应的文字数据是否正确,如正确(3个连续的0XFF为引导码,用来区分每次传出的数据),就完成这区的写入。如些方法运行十次。就完成字库的编码,然后再运行一下字库显示测试,在开始位置演示的图片,看看是否一样,如正确,就完成本字库的制作。第一区到第九区是汉字宋体显示字库,第十区ASII由于只有8*8及16*8的显示字库。以上是制作字库的方法,可以扩展到制作其它字库。压缩包内的程序是已做好宋体OLED显示字库,如需制作其它的字库只需改动程序里的DISPdat16X16里的值就行了。
以下为字库的使用方法,本程序的字库是宋体汉字,尺寸16*16,以及ASII的8*8及16*8。输入汉字后,取出汉字2位编码,分别减去0XA0,前位*100,再加后位,就是这个汉字的GB2312的地址,由于每个汉字显示占用32B,所以当前汉字显示数据开始地址为GB2312编码地址*32。对于ASII的8*8显示数据开始地址为ASII*8+0x048000 ASII的8*8显示数据开始地址为ASII*16+0x048400。