标题: 1602自定义字符的另一种思路,实现超过8种自定义字符的显示 [打印本页]

作者: 51hei小胡    时间: 2017-3-15 23:52
标题: 1602自定义字符的另一种思路,实现超过8种自定义字符的显示
最近在做一个可定时的插座。原计划降低成本,用数码管做为倒计时显示。后面想到除了定时通电,还需要定时断电,或许后面还要增加其他功能。这样数码管的表现力就不够了。刚好手上还有一块闲置的1602,于是就寻思着用它来做一个有设置菜单选择的显示。不好意思,扯得有点远了。。
       1602我就不介绍了,大家都知道它具有自定义字符的功能,但是只能存储8个字符。按一般的思路,把字符写入CGRAM,然后取这8个定义好的字符来显示。但是,还可以用一种动态写入字符的方法。
       动态写入字符就是在需要显示该字符之前,才把字符写入到CGRAM中。所以,我们取好的字模存放在ARDUINO上,在显示前才写入。还有一点要注意的是,显示坐标的设置应该放在显示之前,如果放在写入字符之前就不能正常显示。
//不能显示:
LCD_SetXY(line, column);                    //设置坐标
LCD_WriteCGRAM(index, fontB[fontnum]);      //写入自定义字符
LCD_WriteData(index);                       //显示字符

//正常显示:
LCD_WriteCGRAM(index, fontB[fontnum]);
LCD_SetXY(line, column);
LCD_WriteData(index);

       例如我现在需要将数字反显(反显要自定义),但是一共有0-9,10个数字,如果按一般思路只写入8个字符是肯定不能实现的了,但如果是动态写入呢。如果我要反显'1',那么我就将反显的数字'1'写入CGRAM。而要显示'4',就写入'4'覆盖原来的'1'在CGRAM中的内存。这样,把10个数字显示完,也只用到了一个自定义字符的空间。不过在同一时间也还是最多显示8个自定字符。我原来以为一个字符显示出来后,如果不刷新屏幕,这个字符是不会受影响的。而实际上当我尝试写入新的字符时(在不同位置显示),原来显示的字符也会改变成最新写入的字符。
       虽然一次最多还是显示8个自定义字符,但在某些场合一个界面需要8个自定义字符,在另一个界面却需要另外8个自定义字符,就可以用这种方法实现。比如我就用来实现了菜单选项的反显,而且用这样即时写入字符的方法显示起来一点延迟也没有。
       下面是我显示的效果图
反显"timer on"

设置选项2


时间设置




这个界面用自带的光标会挺方便的,但我的程序是在一个循环体里更新,光标效果不好。。




作者: imxuheng    时间: 2017-3-16 17:11
不错,就是接线不美观
作者: dzbj    时间: 2017-3-16 17:27
楼主高人 赞

1602写个菜单太费劲了 出一点点效果就要折腾半天 现在已经完全投入串口屏 不再用1602之类的东西了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1