# lcd1602
----------
### 介绍
lcd1602 是一个易用且高效的控制库,用于驱动 1602A 液晶显示屏。
目前,本库在 51 单片机(STC89C52)上测试通过,1602A 是一个 2x16 字符型带背光液晶显示屏。
**支持 LCD1602 的 8 位总线通信模式。**
### 关于此库
*lcd1602* - Version 1.1.2<br>
*by Nixsawe <[email protected]>*
<!-- 其他成员对项目或本说明文档做了修改后,请在上面添加作者信息 -->
本库说明文档及代码均由项目成员辛苦完成,请在遵循开源协议的场景下使用本库。
<!-- 学习参考:https://zhuanlan.zhihu.com/p/166184285 -->
<!-- 学习参考:《单片机原理及应用》 -->
### 为什么编写这个库
抽象与封装,是现代计算机能够高效设计、开发、运行的基石。<br>
为简化程序设计逻辑,为未来学习做准备,特封装此库。
### 使用方法
1. 将 `lcd1602.c` 添加到工程中
2. 将库所在目录,添加到工程的包含目录列表 (`INCLUDE DIR`)
3. 在程序源文件中引用本库的头文件 `lcd1602.h`
(可参考 **dled_ctl** 库的使用方法,大同小异)
### 减小空间占用
可在 `LX51` 的连接器参数中添加 `REMOVEUNUSED` 参数,**删除未使用的函数**以减小空间占用。
可参考 **dled_ctl** 库对应部分。
### 功能原理
本小节以及接下来的一节将叙述 LCD1602 液晶屏设备以及本模块的功能原理等有关内容,如果仅想查阅库的方法,请点击[传送门](#调用逻辑 "快带我传送过去")。
#### 基本组成
标准的 LCD1602 液晶屏显示模块有 16 个引脚
| 引脚号 | 符号 | 引脚说明 | 引脚号 | 符号 | 引脚说明 |
| :----: | :--- | :------- | :----: | :--- | :------- |
| 1 | VSS | 电源地 | 9 | DB2 | Data IO |
| 2 | VDD | 电源正极 | 10 | DB3 | Data IO |
| 3 | VO | 偏压信号 | 11 | DB4 | Data IO |
| 4 | RS | 命令/数据| 12 | DB5 | Data IO |
| 5 | RW | 读/写 | 13 | DB6 | Data IO |
| 6 | E | 使能 | 14 | DB7 | Data IO |
| 7 | DB0 | Data IO | 15 | BLA | 背光正极 |
| 8 | DB1 | Data IO | 16 | BLK | 背光负极 |
各引脚说明如下
1. VSS 接电源地 GND
2. VDD 接电源正 +5V
3. VO 负责调整显示时前景、背景的对比度。一般接电位器以方便调整
4. RS 是命令/数据选择线。当这条线为低电平时,代表要执行的是一条命令或是访问运行状态;当这条线是高电平时,将进行数据操作
5. RW 是读/写选择线。这条线低电平代表向设备写命令或数据,设备是接收端;高电平代表从设备读状态或数据,单片机是接收端
6. E 是 LCD1602 的使能线。在将要发起通信时,单片机在这条线上建立上升沿,LCD1602 监测到上升沿后设备动作,根据 RS、RW 的设置选择对应的模式,在 DB0\~DB7 引脚上与单片机完成通信。操作执行完成后,E 应维持低电平
7. DB0\~DB7,并行数据输入/输出引脚。在 8 位总线模式下,这 8 个引脚都需要连接,一次传输 8-bit 的数据;在 4 位总线模式下,只需接 DB4\~DB7 这高 4 位,一次传输 4-bit 的数据,先高后低,每次操作都需要两次传输
8. BLA 背光正极,通过一个 10\~47Ω 的限流电阻与 VDD 相连,如果不需要背光,也可以将此引脚直接接地
9. BLK 背光负极,接 VSS
LCD1602 有一个 **DDRAM** 显示数据存储器,要显示的数据会先写到这个存储器里面,再由设备内部的控制电路自行显示出来。LCD1602 同样支持自定义字符,这靠内部的 **CGRAM** 自建字模存储器实现。
下面的部分,我们将详细介绍 **DDRAM**、**CGRAM** 以及字符显示、自建原理。
#### 字符显示原理
LCD1602 有一个显示控制位 **D**,可以通过功能设置 (*Function Set*) 命令来控制整个屏幕是否启用。当 **D=1** 时,屏幕启用,能够显示东西;反之,屏幕显示将被关闭,但仍能写入和读取数据。
LCD1602 的 **DDRAM** 显示数据存储器就是它的显存。要显示字符时,我们写对应的字符码到显存中,则该字符就会自动显示在屏幕对应位置。所谓的字符码,实际和字符的 **ASCII** 码是一致的(在 ANSI ASCII 标准范围内)。
字符的绘制不需要我们自己动手,是因为 LCD1602 内置有一个 **CGROM** 字库,内置有 192 个字模数据。当字符被写到 DDRAM 后,LCD1602 内部的控制电路将根据字符码从内部的字模库 CGROM 中找到对应的字模数据,然后将其显示出来。
DDRAM 能存储 80 个字符数据。如果显示行数被设为两行,则 DDRAM 中地址范围 **00H\~27H** 存储第一行内容,**40H\~67H** 存储第二行的内容(每行 40 个字符)。
若显示行数被设为一行,则 **DDRAM** 中可使用的地址范围将是 **00H\~4FH** (单行 80 个字符)。
然而液晶屏一次最多只能展示 16\*2=32 个字符,那么剩下的字符去哪儿了呢?
实际上 LCD1602 维护了一个**可显示区域**,当显示行数为 2 行时,这个区域的最大显示范围是 32 个字符,仅显示一行时,最大显示范围是 16 个字符。下面我们将以 2 行显示模式为例,说明可显示区域的概念。
可显示区域就像一个窗口,是可以相对屏幕而移动 (*shift*) 的,若没有经过屏幕移位,则初始的显示效果将会是下面这样:
![图片1-默认显示效果](images/lcd1602-display-zone-01.png "默认的显示效果")
整幅图是 DDRAM 的存储范围,第一行是 **00H\~27H**,第二行是 **40H\~67H**,其中,**可显示区域**(被黑框圈起来的区域)中的字符将会在屏幕上显示出来。
与可显示区域相对的是**隐藏区域**,隐藏区域的内容目前没有被显示,但是写入 DDRAM 的数据不会丢失。
当产生屏幕移位 (*shift*) 操作,屏幕发生移动,可显示区域位置不变,则可以认为**可显示区域向相反的方向移动**。注意屏幕移动方向与可显示区域移动方向是相反的,这在用户视觉感官上更好理解。
在默认显示状态的基础上,我们将屏幕向左移动两个字符位置,对应的,可以认为是可显示区域向右移动两个字符位置,如下图所示:
![图片2-移位后显示效果](images/lcd1602-display-zone-02.png "移位后显示效果")
实际显示中,原来屏幕上最左边的两列字符被“移出”可显示区域,右边有两列字符“进入”可显示区域。
尽管显示如此,DDRAM 的内容却没有发生改变,因为对于 LCD1602 设备来说,只是**可显示区域**这个窗口发生移动。
可显示区域**永远是连续的**,屏幕向右移动 n 个字符位置(n<40),等效于屏幕向左移动 (40 - n) 个位置。显示的内容总是从连续的可显示区域最左端开始,一直到最右端结束。
在默认显示状态的基础上,我们将屏幕向右移动 11 个字符位置(或者说,将屏幕向左移动 29 个字符位置),对应的,可显示区域向左移动 11 个字符位置,如下图所示:
![图片3-“不连续的”可显示区域怎么解读](images/lcd1602-display-zone-03.png "“不连续的”可显示区域怎么解读")
由于可显示区域是连续的,那么实际的可显示区域,应该是从第 30 列开始,到最后的 40 列,连接到最前面的第 1 列到第 5 列,按这样的顺序连接显示,则实际显示的内容,将会如上图下半部分那般“拼凑”起来。
例如,我们写入如下的数据到 DDRAM 中:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn
opqrstuvwxyz0123456789------------------
则在 2 行模式下,未经移动时,液晶屏上将显示
ABCDEFGHIJKLMNOP
opqrstuvwxyz0123
进行两次屏幕右移�
没有合适的资源?快使用搜索试试~ 我知道了~
lcd1602 功能函数封装lcd1602-master.zip
共15个文件
png:10个
md:1个
c:1个
需积分: 5 0 下载量 169 浏览量
2024-05-13
08:02:46
上传
评论
收藏 87KB ZIP 举报
温馨提示
lcd1602 功能函数封装lcd1602-master.zip
资源推荐
资源详情
资源评论
收起资源包目录
lcd1602-master (1).zip (15个子文件)
lcd1602-master
lcd1602.c 5KB
LICENSE 16KB
lcd1602.h 12KB
.gitignore 430B
images
lcd1602-display-zone-01.png 11KB
char-A-5x8.png 3KB
char-A7.png 237B
char-A-5x11.png 3KB
char-A0.png 1KB
char-A4.png 1KB
cursor.png 3KB
lcd1602-display-zone-02.png 15KB
char-A1.png 1KB
lcd1602-display-zone-03.png 32KB
README.md 32KB
共 15 条
- 1
资源评论
流华追梦
- 粉丝: 4640
- 资源: 2155
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功