社区导航

 
查看: 1665|回复: 27

[原创] 10分钟理解LCD1602如何显示自定义字符

  [复制链接]

12

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-8 23:31:19 | 显示全部楼层 |阅读模式
相信大家都知道如何通过查字库表的方法来显示表中的任意一个字符。假如现在我想显示某个温度值,需要标志出温度符号”°C”,现在你去字库表里面查找,发现根本找不到这个符号,那怎么办?可以通过自定义字符解决这个问题。在上一个帖子简单讲解了LCD1602的基本操作过程,下面我们就来简单描述如何让1602显示自定义字符。
1. 思路分析

为了方便阅读,在这里我们把LCD1602字库表的一部分截取过来。前面讲了,如果要显示字符‘A’,那么写入数据高位(b7-b4)为0100,写入数据低位(b3-b0)为0001,合起来为0x41.那么如果现在写入数据0x00显示什么呢?数据0x00高4位和低4位全部为0,对应下表中第一行的第一列,我们发现里面是空的,如下图中红色方框所示。
3.png
图1

这个红色框的部分就是给我们‘自定义字符的’。CGRAM一共64个字节,一个字符需要8个字节,这样CGRAM一共可以表示8个字符,简单的说就是有8个‘空’可以由我们来自定义(我们把它记作-“自定义空”)。类似的,在(b7-b4)为0000的整列都是空的,其余的都是有字符的,也就是说右边蓝色框部分是‘固定’的,或者说别人已经帮我们写好的。现在我们要写入数据0x00显示某个字符,那么就需要在0x00对应的这个位置(上图红色框所示)构造出一个字符,简单的讲就是先‘填空’, ‘填空’之后就和蓝色部分一样了。而‘填空’的这个字符可以是任意的,也就是说属于‘自定义字符’。
这样思路就很清楚了
第一步:填空           (构造这个字符)
第二步:显示这个空  (显示这个字符)

2. 如何填空(构造字符)

前面讲了1602模块共2行,每行16个空格,一共32个空格,如下图所示,每一个空格能显示一个字符。

1.png
图2

现在我们从这32个空格中提取出一个来分析,如下图所示。仔细观察,一个大空格实际上是由很多小空格组成的,每一行5个小空格,一共8行。我们把这里面的每一个小空格理解成一个led(共40个)。那么也就是说,LCD1602模块显示32个字符,实际上每一个字符是由40个led组成的。这样回到我们的目的-显示自定义字符,实际上就是控制这40led点亮或者熄灭。
这里为了分析的方便,现在给每一行(5个led)前面多添加3个led,如下图所示,只不过每一行前面的这3个led永远都不亮。

2.png
图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.png
图4

3. 显示构造字符
当这个字符构造好了之后,剩下步骤就前面一样了,确定显示位置,确定显示内容。

5.png

LCD1602自定义字符参考代码:
游客,如果您要查看本帖隐藏内容请回复





此内容由EEWORLD论坛网友ppptalk原创,如需转载或用于商业用途需征得作者同意并注明出处




此帖出自51单片机论坛


回复

使用道具 举报

654

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-4-8 23:58:03 | 显示全部楼层
不错!


回复

使用道具 举报

12

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2018-4-9 13:32:23 | 显示全部楼层

谢谢哦


回复

使用道具 举报

565

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-4-9 20:25:56 | 显示全部楼层
好资料...


回复

使用道具 举报

25

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-4-17 21:30:57 | 显示全部楼层
想看看楼主的更多的分享


回复

使用道具 举报

3

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-18 12:47:52 来自手机 | 显示全部楼层
可以可以


回复

使用道具 举报

3

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-20 07:43:35 | 显示全部楼层
不错的资料,谢谢分享!


回复

使用道具 举报

3

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-23 14:36:03 | 显示全部楼层
棒棒的,谢谢分享


回复

使用道具 举报

3

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-23 16:21:06 | 显示全部楼层
新手学习大片机,请指导!


回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-23 23:09:28 | 显示全部楼层
感谢讲解!


回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-23 23:24:54 | 显示全部楼层
1111111111111111111111111


回复

使用道具 举报

2

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-25 21:06:56 | 显示全部楼层
谢谢楼主的分享


回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-7-9 23:14:53 | 显示全部楼层
学习学习


回复

使用道具 举报

3

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-7-10 20:42:20 | 显示全部楼层
谢谢楼主


回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-7-12 14:06:04 | 显示全部楼层
还是不错的。


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-8-10 20:35:36 | 显示全部楼层
10分钟理解LCD1602液晶显示模块


回复

使用道具 举报

235

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-8-13 20:05:56 | 显示全部楼层
1602的自定义字符最多不能超过8个,每个字符是5*8点阵,只能显示笔划简单的少量汉字,笔划稍多一点就无能为力了。


回复

使用道具 举报

317

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2018-8-20 10:11:16 | 显示全部楼层
存储芯片/MCU/SRAM/PSRAM/DDR/FLASH/MRAM。web.www.sramsun.com  QQ3161422826 TEL:13751192923


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-8-22 15:49:59 | 显示全部楼层
学习


回复

使用道具 举报

7

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-9-3 18:25:45 | 显示全部楼层
讲得很详细,谢谢了


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2018-12-10 16:12 , Processed in 0.523216 second(s), 16 queries , Gzip On, MemCache On.

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