相信大家都知道如何通过查字库表的方法来显示表中的任意一个字符。假如现在我想显示某个温度值,需要标志出温度符号”°C”,现在你去字库表里面查找,发现根本找不到这个符号,那怎么办?可以通过自定义字符解决这个问题。在上一个帖子简单讲解了LCD1602的基本操作过程,下面我们就来简单描述如何让1602显示自定义字符。
1. 思路分析
为了方便阅读,在这里我们把LCD1602字库表的一部分截取过来。前面讲了,如果要显示字符‘A’,那么写入数据高位(b7-b4)为0100,写入数据低位(b3-b0)为0001,合起来为0x41.那么如果现在写入数据0x00显示什么呢?数据0x00高4位和低4位全部为0,对应下表中第一行的第一列,我们发现里面是空的,如下图中红色方框所示。
图1
这个红色框的部分就是给我们‘自定义字符的’。CGRAM一共64个字节,一个字符需要8个字节,这样CGRAM一共可以表示8个字符,简单的说就是有8个‘空’可以由我们来自定义(我们把它记作-“自定义空”)。类似的,在(b7-b4)为0000的整列都是空的,其余的都是有字符的,也就是说右边蓝色框部分是‘固定’的,或者说别人已经帮我们写好的。现在我们要写入数据0x00显示某个字符,那么就需要在0x00对应的这个位置(上图红色框所示)构造出一个字符,简单的讲就是先‘填空’, ‘填空’之后就和蓝色部分一样了。而‘填空’的这个字符可以是任意的,也就是说属于‘自定义字符’。
这样思路就很清楚了
第一步:填空 (构造这个字符)
第二步:显示这个空 (显示这个字符)
2. 如何填空(构造字符)
前面讲了1602模块共2行,每行16个空格,一共32个空格,如下图所示,每一个空格能显示一个字符。
图2
现在我们从这32个空格中提取出一个来分析,如下图所示。仔细观察,一个大空格实际上是由很多小空格组成的,每一行5个小空格,一共8行。我们把这里面的每一个小空格理解成一个led(共40个)。那么也就是说,LCD1602模块显示32个字符,实际上每一个字符是由40个led组成的。这样回到我们的目的-显示自定义字符,实际上就是控制这40led点亮或者熄灭。
这里为了分析的方便,现在给每一行(5个led)前面多添加3个led,如下图所示,只不过每一行前面的这3个led永远都不亮。
图3
这样问题就变成了如何控制8×8的点阵,每一行8个led,一共8行。回去查看LCD1602指令表即可,这个命令字节(CMD)的高两位固定为01(也就是0x40),剩下的6位如何分布,如下图所示。CMD剩下6位中的高3位,用来确定“你要填哪一个空”,前面讲了一共有8个“自定义空”可用。如果你取000的话,就表示你填的是图1中红色方框所示的“自定义空”,如果取001的话,就表示图1中红色方框下面的一个“自定义空”,依此类推。继续看,CMD的低3位就来确定8×8的点阵位置。如果取000,就表示第一行的8个led,如果取001,就表示第二行的8个led,依此类推。确定了点阵的‘行’,紧跟着写入一个字节的数据就可以了,一个字节8位,刚好对应这一行的8个led,1表示led亮,0表示led灭。
图4
3. 显示构造字符
当这个字符构造好了之后,剩下步骤就前面一样了,确定显示位置,确定显示内容。
LCD1602自定义字符参考代码:
此内容由EEWORLD论坛网友ppptalk原创,如需转载或用于商业用途需征得作者同意并注明出处