【嵌入式】LCD计算偏移显示中文小记

in 默认分类 with 0 comment

前言

在这之前,我手头上的LCD显示字符串是通过另外一名大佬写的批处理文件生成的字库,然后如果要显示文本的话,就得预先在一个文本文档里面先定义好字符,然后批处理文件就会去加载这个文本文档并生成相应的点阵和对应预先输入的句子字符在字库中的偏移。这样使用起来不是很灵活,需要我去修改驱动,达到的要求就是调用函数lcd_disp("测试文本"),就能直接在液晶屏幕中显示对应的字符

思考

仔细想一想,其实实现流程就是能够通过解析传入的字符串指针,然后取得其在批处理生成的点阵字库中找到这个汉字对应的位置,显示到LCD即可。

  1. 字符串的解析

    在当前的项目中经软件查看得知,中文使用的是GB2312的编码,而英文使用的是ASCII编码。知道了文文本的编码方式,那就好办了。

    后面经过查阅相关资料得知,GB2312中文字符是有2个字节组成的(区位码),其中高位字节为字符所在的区块,而地位字节就是字符在当前区块的位数,而且所有的可见中文字符的最高位都是1。在英文ASCII字符中,所有可见字符对应的最高位都是0,字符串的最后一位都是以0x00结尾的。

    得知到这些规则,字符串解析的问题就迎刃而解了。我们只需要在一个循环里面遍历字符串,如果遇到这个字节的最高位为1,那么这个字节拼接下一个字节就是一个汉字;如果遇到这个字节最低位为0,那么这个字节就不是中文字符,一个字节自身就是英文或者数字或者特殊符号;知道遇到这个字节为0x00,则结束循环。字符串解析完成。

  2. 点阵字库的生成

    这里我就直接用了前辈写的批处理文件生成的字库了,关于其实现方法,我在后面再写写自己的实现方法。

  3. 对应字库遍历位置的寻找

    这里我觉得我可以参照前辈的方法,写一个程序来替我生成这部分的代码,只不过区别在于我不需要去预先生成对应文本的偏移【我们可以写一个程序预先生成这些对应关系的C文件】,需要一个函数自动算出来,那么问题又来了,如何让函数去找到他们呢?,在这里我想到了2种方法。

    1. 预生成对应的顺序表
      顺序表生成过程
      这里我们打个比方,假如我要整理字的对应,对应的GB2312编码为0xbcd3。我们可以判断它后面2位数数值(判断的方法随你定,也不一定是4个,这个看情况),分别放入不同的数组中,来预先生成对应的字符和偏移对应的表。当需要函数查找并显示的时候,就可以直接计算在哪个表中,然后循环判断获取即可。
    2. 预生成对应的二叉树
      二叉树生成过程
      我们可以先按照一定顺序排序好所有集合,然后按照图中的步骤分解成顺序二叉树,那么在取数据的时候只需要一层一层判断下去即可。个人觉得,这种方法其实要由于上一种方法,原因~你懂得

代码

代码后面再补上...现在手头上没有...