相信大家现在知道了如何通过查字库表的方法来显示表中的任意一个字符。假如现在我想显示某个温度值,需要标志出温度符号”°C”,现在你去字库表里面查找,发现根本找不到这个符号,那怎么办?下面我们就来就来通过自定义字符解决这个问题。
前面讲了,对于显示模块的控制,主要关注两个方面,在哪里显示,显示什么内容。我们知道图形(字符也可以看成是图形)是由线构成的,线是由点构成的。如果我们能控制在显示模块任意位置显示一个点,那么就能显示任何图形了。当然,这个“任意图形”指的是这个显示模块的显示能力。那么也就是说这个温度符号”°C”如何显示也就解决了。现在我们来看看如何在LCD1602模块的任意一个位置显示一个点。
为了方便阅读,在这里我们把LCD1602字库表的一部分截取过来。前面讲了,如果要显示字符‘A’,那么写入数据高位(b7-b4)为0100,写入数据低位(b3-b0)为0001,合起来为0x41.那么如果现在写入数据0x00显示什么呢?数据0x00高4位和低4位全部为0,对应上表中第一行的第一列,我们发现里面是空的,如上下图中红色方框所示。
这个红色框的部分就是给我们‘自定义字符的’。类似的,在(b7-b4)为0000对应的整列都是空的,除此列外其余的都是有字符的,也就是说右边蓝色框部分是‘固定’的,或者说别人已经帮我们写好的。‘自定义字符’部分与表中显示的CGRAM(character generatgor ram)有关,右边部分‘固定的’与CGROM有关。现在我们要写入数据0x00显示某个字符,那么就需要在0x00对应的这个位置(上图红色框所示)构造出一个字符,简单的讲就是先‘填空’, ‘填空’之后就和蓝色部分一样了。而‘填空’的这个字符可以是任意的,也就是说属于‘自定义字符’。下面我们就来看看怎么样‘填这个空’?
(1)打开字模提取软件(可在叁议电子www.ppptalk.com提供的工具软件中找到或者自行网上下载),点击新建图像
(2)选择8×8,点击确定
(3)建图像在模拟动画中点击放大格点,调整图像到最大,便于观察
(4)左边3列舍弃不用,右边5列随便点击,注意黑色点表示亮(为1),白点表示灭(为0),如果要显示一个点,那么在图中留下一个黑点即可。这里我们构造一个简单的汉字‘五’作为实验,如下图所示,
(5) 点击‘参数设置‘,然后点击‘其他选项’,如下图所示
选项配置如下,点击确定退出。
(6) 点击‘取模方式’中的‘C51 格式’,将‘点阵生成区’红色框部分即为构造数据
现在‘填空’的数据已经获得了,那么如何‘填空’?前面说了是CGRAM,那么如何写进去呢?回去查看LCD1602指令表即可,高两位固定为01(也就是0x40),剩下的6位如何分布,如下CGRAM地址列所示:
CGRAM一共64个字节,一个字符需要8个字节,这样CGRAM一共可以表示8个字符,也就是说有8个‘空’可以由我们来自定义。从上图中可以看到,bit5,bit4,bit3用来选择第几个‘空’(一共有8个‘空’可以填),bit2,bit1,bit0用来确定这个字符对应的8字节的数据(我们通过字模软件获取的‘填空’数据),bit7和bit6固定为0,1.
通过这种方式,我们就能显示任意字符了。当然这个“任意”是在显示模块的显示能力范围内。