博主福利:100G+电子设计学习资源包!

http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect
--------------------------------------------------------------------------------------------------------------------------

1602液晶它也可以被叫做1602字符型液晶,这个是一种只用来显示字母、数字、符号等的点阵型液晶模块。1602里面存储器有三种:CGROM、CGRAM、DDRAM。

DDRAM(Display Data RAM)就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下,如图1:

图1  数据地址和屏幕对应的关系

DDRAM其实就是我们平时说的PC机的显存,如果说我们想要在屏幕上显示我们想要显示的,直接把需要的字符代码送入现实就可以了,很简单就能够在屏幕上显示我们想要显示的。相同的LCD1602总共存在80个字节的显存,就是DDRAM。遗憾的是LCD1602显示不出来这么多的字符,正是因为这样,不是每一个写在DDRAM上的字符

都能够在显示器上显示出来,只有在上图提及到的才能够正常的显示,而上图未提到的则不能够显示出来。正是因为这样,我们在程序中可以利用下面的“光标或显示移动指令”使字符慢慢移动到可见的显示范围内,看到字符的移动效果。

那么如何在液晶上显示字符呢,就是把要写入的字符给DDRAM。举个例子,我现在想在屏幕上显示“A”,我就把我要的字符“A”的字符代码41H写入DDRAM的00H地址处然后得到。那我们应该怎么去写入呢,我们在后面经行及一步的阐述。我们下面将要介绍的是A的字模,如图2。

图2  A的字模

上面的图左侧显示的就是“A”的字模数据,上面的图右侧显示“○”代表0,用“■”代表 1。这样我们就能够显示出“A”这个字形。

在LCD1602模块上固化了字模存储器,就是CGROM和CGRAM,HD44780内置了192个常用字符的字模,存于字符产生器CGROM(Character Generator ROM)中,另外还有8个允许用户自定义的字符产生RAM,称为CGRAM(Character Generator RAM)。下图(字模表)说明了CGROM和CGRAM与字符的对应关系。从ROM和RAM的名称我们也可以知道,ROM是早已固化在LCD1602模块中的,只能读取;但是RAM即可以读又可以写。那么就是说,若是指要求在屏幕上显示CGROM中已经拥有的字符,那就仅仅需要在DDRAM中写入它的字符代码就可以了;若是说我想显示的是CGROM中不存在的字符,例如美元的符号,那就只能先在CGRAM中规定了,下一步再在DDRAM中写入我们之前自己定义的字符就可以了。但是相比于CGROM中固化的字符不一样,

CGRAM内自身没有任何字符,那就必须在DDRAM中写入一些CGROM没有的字符,一定要在CGRAM中首先把符号定义然后再去使用。程序退出后,CGRAM内之前定义的字符也会随着程序的退出而不再存在,若要是在使用的时候,就一定要重新定义。

那么如何在CGRAM中自定义字符呢?在上面的介绍中,我们知道如何设置CGRAM地址指令,同写DDRAM指令相似,只须设置好某个自定义字符的字模数据,然后按照上面介绍的方法,设置好CGRAM地址,依次写入这个字模数据即可。我们在后面的例子中再进行说明。如图3。

图3  设置CGRAM地址指令

1602使用三条控制线:EN、RW、RS。

他们当中EN的作用其实就是中线的功能,RW和RS指示了读、它写的是写的方向和内容。在读数据(或者Busy标志)期间,EN线必须保持高电平;而在写指令(或者数

据)过程中,EN线上必须送出一个正脉冲。RW、RS的组合一共有四种情况,分别对应四种操作:

RS=0、RW=0——表示向LCD写入指令。

RS=0、RW=1——表示读取Busy标志。

RS=1、RW=0——表示向LCD写入数据。

RS=1、RW=1——表示从LCD读取数据。LCD1602引脚定义如表3.2。

表3.2 LCD1602引脚定义

引脚号

符号

引脚说明

引脚号

符号

引脚说明

1

VSS

电源地

9

D2

数据端口

2

VDD

电源正极

10

D3

数据端口

3

V0

偏压信号

11

D4

数据端口

4

RS

命令/数据

12

D5

数据端口

5

RW

读/写

13

D6

数据端口

6

E

脉冲使能

14

D7

数据端口

7

D0

数据端口

15

A

背光正极

8

D1

数据端口

16

K

背光负极

说明:

(1) 各部分功能:

①VSS接电源地

②VDD接+5V

③V0代表的是液晶上的偏压信号,它是能够接收10K的精准电位器。也可以说相同的阻值的RM065,RM063数据的蓝白是可以调节的。

④RS是命令/数据选择引脚,接单片机的其中一个I/O口。当RS=0,选择指令模式;RS=1,选择数据模式。

⑤RW为读/写模式选择引脚,接单片机的一个I/O口,

RW=0——写,向1602写数据或是指令。

RW=1——读,我们可以说是从1602读取信息也可以是说是状态,是没有必要进行读取操作,它能够直接接Vss。

⑥LCD1602执行命令的使能信号,接单片机的一个I/O口。

⑦D0~D7:LCD1602的并行数据输入/输出端口,能够接单片机上的所有的8位的I/O端口(P0~P3),要是说是接P0口的话一定要接一个8位的上拉电阻。当应用4线并行驱动模式的时候,只需接4个并行的I/O端口。

⑧A:背光正极,可以接一个10~47Ω的限流电阻接到VDD。

⑨K:背光负极,接VSS。

(2) LCD1602的基本操作

①读状态:RS=0,RW=1,E=高脉冲。输出:D0~D7为状态字。

②读数据:RS=1,RW=1,E=高脉冲。输出:D0~D7为数据。

③写指令:RS=0,RW=0,E=高脉冲。输出:无

④写数据:RS=1,RW=0,E=高脉冲。输出:无。

读操作时序如图4。

图4  读写做时序

写操作时序如图5。

图5  写操作时序

    

LCD1602液晶显示屏指令:

(1)工作方式设置指令,如图6。

Code

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

1

DL

N

F

X

X

X:忽略,也就是说这个位是0或1都可以,一般取0。

DL:设置数据接口位数。

DL=1:8位数据接口(D7—D0)。

DL=0:4位数据接口(D7—D4)。

N=0:一行显示。

N=1:两行显示。

F=0:5×8点阵字符。

F=1:5×10点阵字符。

说明:正是由于是写指令字,那就是说RS与RW全是0。LCD1602仅仅能用并行方式驱动,并不允许使用串行方式驱动。而并行方式又可以选择8位数据接口或4位数据接口。这里我们选择8位数据接口(D7—D0)。我们的设置是8位数据接口,两行显示,5×8点阵,即0b00111000也就是0x38。

(2) 显示开关控制指令,如图7。

Code

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

0

1

D

C

B

D=1:显示开,D=0:显示关。

C=1:光标显示,C=0:光标不显示。

B=1:光标闪烁,B=0:光标不闪烁。

(3) 进入模式设置指令,如图8。

Code

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

0

0

1

I/D

S

(4) I/D=1:写入新数据后光标右移。

I/D=0:写入新数据后光标左移。

S=1:显示移动。

S=0:显示不移动。如图9,光标控制指令。

                           

S=1

I/D=1

It shift the display to the left

S=0

I/D=0

It shift the display to the right

说明:这里的设置是0x06。

(5) 显示移动指令,如图10。

Code

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

1

S/C

R/L

X

X

(6) 清屏指令,如图11。

Code

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

0

0

0

0

1

(7) 光标归位指令,如图12。

Code

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

0

0

0

1

X

说明:光标返回屏幕左上角,它不改变屏幕显示内容。

(8) 设置CGRAM地址指令,如图13。

Code

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

1

a

a

a

a

a

a

(9) 设置DDRAM地址指令,如图14。

Code

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

1

a

a

a

a

a

a

a

(10) 读忙信号和地址计数器AC,如图15。

Code

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

1

BF

a

a

a

a

a

a

a

有很多人都会有这样的问题,就是执行一条指令的时候,从来都没有成功过。好在我们有另外的办法,也就是延时。通过查看每条指令的执行时间,再经过一些试验,可以确定指令的延时。这样就可以在上一条指令执行完毕后再执行下一条指令了。

(11) 写数据到CGRAM或DDRAM指令,如图16。

Code

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

1

D

d

d

d

d

d

d

d

d

(12) 从CGRAM或DDRAM读数据指令,如图17。

Code

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

1

1

d

d

d

d

d

d

d

d

1602LCD的一般初始化(复位)过程

延时15mS

写指令38H(不检测忙信号)

延时5mS

写指令38H(不检测忙信号)

延时5mS

写指令38H(不检测忙信号)

以后每次写指令、读/写数据操作均需要检测忙信号

写指令38H:显示模式设置

写指令08H:显示关闭

写指令01H:显示清屏

写指令06H:显示光标移动设置

写指令0CH:显示开及光标设置

它的特性有:

(1)3.3V或5V工作电压,对比度可调;

(2)内含复位电路;

(3)提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;

(4)有80字节显示数据存储器DDRAM;

(5)内建有192个5X7点阵的字型的字符发生器CGROM;

(6)8个可由用户自定义的5X7的字符发生器CGRAM。

LCD1602液晶 - 开发技术详解相关推荐

  1. 9、Windows驱动开发技术详解笔记(5) 基本语法回顾

    5.在驱动中获取系统时间 1)获取启动毫秒数 在ring3 我们可以通过一个GetTickCount 函数来获得自系统启动开始的毫秒数,在ring0也有一个与之对应的KeQueryTickCount ...

  2. 《Unity 3D 游戏开发技术详解与典型案例》——1.3节第一个Unity 3D程序

    本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.3节第一个Unity 3D程序,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...

  3. iOS 7 iPhone iPad应用开发技术详解

    2019独角兽企业重金招聘Python工程师标准>>> iOS 7 iPhone iPad应用开发技术详解 本书内容全面,从 Objective-C语法知识.iOS功能特 性,到高级 ...

  4. 15、Windows驱动开发技术详解笔记(11) 基本概念

    9.Windows驱动程序的入口函数规定为_DriverEntry@8,所以用C++编写时要用extern. 驱动程序中,不能使用编译器运行时函数,甚至C语言中的malloc,C++的new函数都不能 ...

  5. Python开发技术详解PDF

    Python开发技术详解(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1F5J9mFfHKgwhkC5KuPd0Pw 提取码:xxy3 复制这段内容后打开百度网盘手 ...

  6. Android 3D游戏开发技术详解与典型案例

    下载地址 <Android3D游戏开发技术详解与典型案例>主要以Android平台下3D游戏的开发为主题,并结合真实的案例向读者详细介绍了OpenGL ES的基础 知识及3D游戏程序开发的 ...

  7. 《Windows驱动开发技术详解》学习笔记

    Abstract   如果推荐 Windows 驱动开发的入门书,我强烈推荐<Windows驱动开发技术详解>.但是由于成书的时间较早,该书中提到的很多工具和环境都已不可用或找不到,而本文 ...

  8. c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]

    Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...

  9. 《Unity 3D 游戏开发技术详解与典型案例》——1.1节Unity 3D基础知识概览

    本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.1节Unity 3D基础知识概览,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...

最新文章

  1. 【7.19 graphshortestpath graphallshortestpaths函数】matlab 求最短路径函数总结
  2. next_permutation 与 prev_permutation(全排列算法)
  3. 白居易--《祭李侍郎文》
  4. sizeof(数组名)和sizeof(指针)
  5. 框架学习与探究之AOP--Castle DynamicProxy
  6. 【转】数学与编程——求余、取模运算及其性质
  7. _RecordsetPtr
  8. 计算机网络规划与设计
  9. 启明云端分享|IDO-SOM3022-V1.0:可适用于物联网等多个领域
  10. 阿里云文本反垃圾检测接口调用
  11. 除了Google,还有哪些公司能做出AlphaGo?
  12. 高通8953平台usb转以太网芯片ax88772驱动
  13. IEEE 802.3av 10Gbits EPON 中文翻译(一)
  14. USB调试】和【未知来源】开关
  15. 两种方法编写圆的周长和面积
  16. Vue+Django REST framework打造生鲜电商项目
  17. [机缘参悟-86]:清心寡欲,世外修行 ?负剑下山,闯荡江湖?
  18. Acala 全球征文精选
  19. 软件测试人员面试指南(一)-测试简历如何编写
  20. ❤️软件设计师之程序设计语言与语言处理程序基础“小总结”(莽起来)❤️

热门文章

  1. 如何下载IEEE论文
  2. IEEE论文免费下载
  3. CODING 敏捷实战系列加餐课:CODING 做敏捷这一年 - 理解一站式 DevOps 产品思想
  4. Graphite的安装与部署
  5. python如何设置rgb颜色_Python 转换RGB颜色值的示例代码
  6. Excel常用公式和技巧
  7. 任意多边形面积的计算
  8. Python pandas库|任凭弱水三千,我只取一瓢饮(7)
  9. 线性表长度(线性表实训)
  10. 【数据结构】理解二叉树的三种遍历--前序、中序、后序 +层序(简明易懂)