极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 26353|回复: 6

1602自定义字符的另一种思路,实现超过8种自定义字符的显示

[复制链接]
发表于 2013-7-5 01:45:23 | 显示全部楼层 |阅读模式
本帖最后由 le46710 于 2013-7-5 02:35 编辑

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-7-5 07:55:54 | 显示全部楼层
哇,真是不错
回复 支持 反对

使用道具 举报

发表于 2013-7-5 09:43:39 | 显示全部楼层
不错哈!1602刷新速度太慢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-5 11:20:36 | 显示全部楼层
学慧放弃 发表于 2013-7-5 09:43
不错哈!1602刷新速度太慢

刷新速度倒是没什么感觉,就是能显示的内容太少了
回复 支持 反对

使用道具 举报

发表于 2013-7-5 12:39:42 | 显示全部楼层
le46710 发表于 2013-7-5 11:20
刷新速度倒是没什么感觉,就是能显示的内容太少了

我昨MPU6050显示,那真是刷新速度慢死了
回复 支持 反对

使用道具 举报

发表于 2015-8-10 22:20:25 | 显示全部楼层
初学者学习
回复 支持 反对

使用道具 举报

发表于 2016-2-4 14:23:48 | 显示全部楼层
这个思路好,我也用上了~~
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 03:07 , Processed in 0.041579 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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