找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4119|回复: 2
打印 上一主题 下一主题
收起左侧

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


时间设置




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



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:151348 发表于 2017-3-16 17:11 | 只看该作者
不错,就是接线不美观
回复

使用道具 举报

板凳
ID:47286 发表于 2017-3-16 17:27 | 只看该作者
楼主高人 赞

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表