12*12汉字点阵编码生成

时间:2024-04-12 10:38:10

最近在学习stm32,看到了LCD显示这一块,查看其中的代码有一句是显示字符串的,如下,12*12汉字点阵编码生成
下载到板子上,运行程序,LCD显示屏上显示出了“Mini STM32”,于是我想当然得就把代码中的”Mini STM32 _”换为了“***我爱你 _”,结果显示屏上什么都没有显示,莫非是STM32看透了我的心,知道我其实还想着别的人……,怎么可能呢,我的心里只有那个她,既然不是我的人品问题,那么一定是代码哪里出了问题。
经过一番排查,终于发现了问题所在,
12*12汉字点阵编码生成

原来,在一个名为font.h的头文件里已经定义了各个字符(” ”到”~”)的点阵位码,如上图所示,没定义的中文的你叫它输出中文,它能输出来才怪呢,我觉得中文的位码库肯定是有现成的,但如果都像上面那样几千个汉字的点阵位码都存在.h头文件里,是不是太占用地方了(我不知道啊,瞎说的),那不如就自己定义一个存放自己需要的那几个字的点阵位码的数组,反正我的需求也不大,“我爱***" 或者 “***我爱你”,即使这***不只一个人,那也占不了多大的地方,况且我也不是那么的三心二意,顶多一年一个…… 计划已经制定好了,那就自己去求位码吧,我现在网上搜了搜,没啥收获,但有一个还是启发了我,那位用的是EXCEL,于是我就从EXCEL入手了,因为EXCEL有很多小格子,可以很形象的创建点阵,我模仿者那个帖子创建了一个正方形点阵,方法是把列宽改为1.75,行高不动,
12*12汉字点阵编码生成

创建好了如上图,在这里我拿12*12的点阵为例,于是我圈出了这么一块地方,加上框线,方便“写字”,如下图蓝色区域,
12*12汉字点阵编码生成

接下来我就在这张超“甜”字格里写字了,写个简单的“彗”(遗憾的是12*12写不了太复杂的,比如“爱”字就颇费我一番脑筋
12*12汉字点阵编码生成

写好了!
12*12的点阵再在这里啰嗦几句吧,我用到的显示扫描函数是按列扫描的,所以上图中蓝色区域的第一列从上往下依次是bit15bit4;bit3bit0没有用到,默认都为0。第一列编码就是0x00,0x00,第二列就是0x54,0x00……等等
怎样由excel自动地生成这些编码就是本文的重点了,
在EXCEL里我又重新开辟了这么一块地方,并在其旁边填充了这么一串数字,如下图,接着用这串数字填充每一列,如下图所示
12*12汉字点阵编码生成

(由于方格太小#号为显示不完全的数字)
接下来,将填充区“写”好的字复制,粘贴在数字区,粘贴选项选择粘贴格式,则效果如下图,

12*12汉字点阵编码生成

接下来要对1212区域中的黄色区域进行求和,在此之前我们先把蓝色区域中的数都用0来替换,选中上图1212区域,即红框内的所有部分,点击工具栏查找和选择替换选项,查找内容格式填充选择蓝色,替换为0,全部替换,
12*12汉字点阵编码生成

得效果如上图,
之后选择一块212的区域,在第一列第一行输入dec2hex(sum( ,)),用于计算高8 位的和,第一列第二行输入dec2hex(sum(,*)),用于计算第8位的和,sum内的参数根据你数字区选的范围而定。将第一行其余5个单元格的格式都复制为与本行第一个相同,将第二行其余5个单元格格式复制为与本行第一个相同,得到如下效果,
12*12汉字点阵编码生成

再另选一块2*12区域,将上述单元格复制粘贴为数值,
12*12汉字点阵编码生成

注意此图虽与上图内容相似,但地址不一样,切记
在第一行第一列单元格内输入=”0x”&(),()表示上图第一行第一列单元格所在位置,将其余11个单元格复制成与之相同的格式,则得如下效果
12*12汉字点阵编码生成

至此大功便告成了,
对于我来说还要进行一步转置操作,在转置之前,还要进行一步粘贴为“值和数字格式”的操作,再把得到的数据进行转置得到的结果才正常,如下图
12*12汉字点阵编码生成

把得到的编码粘贴进库,加上逗号,
12*12汉字点阵编码生成

这样就可以问心无愧地在LCD屏幕上大声打出“***我爱你”了!(编码在上,你有兴趣猜猜我喜欢的人叫啥吗)

我在0x0这个地方卡了很久,一心想着要把它变为0x00,后来一直找不到好的解决办法,突然茅塞顿开0x00和0x0不是一样的吗?!对于代码的运行来说0x00和0x0毫无二致,变为统一的两位仅仅美观而已,这才把这个工作完成了。
我相信这样的问题不只我一个人遇到过,大家一定有其他更好的方法,希望能得到指导,并且我觉得我的方法太复杂了,这么一套操作下来,估计拿笔都算出来了,用C语言、MATLAB等工具肯定也能生成,尤其是MATLAB,我觉得利用其图像处理的功能很容易生成(我不知道啊,瞎说的),另外逗号的加入也可以利用程序生成,我把这项工作留给你们吧,好好完成哟!