首页 > 编程知识 正文

(LCD1602液晶显示模块学习笔记)

时间:2023-05-05 19:15:37 阅读:121077 作者:94

LCD1602液晶显示模块一、初识LCD6021.1、实物图1.2、管脚图1.3、管脚功能说明二、显示位置三、显示内容四、指令集五、动作序列5.1、写入动作序列5.2、读出动作序列6.1、程序

一、第一次知道LCD602

LCD1602 ) liquidcrystaldisplay )每行可以显示16个字符,共两行。

1.1 .实物图

1.2 .导线图

1.3 .端子功能说明Vss :电源接地。

VDD :电源正极。

(VL )液晶显示偏压。 0~5V可以调节屏幕对比度,电压越高对比度越低,对比度越高显示效果越鲜艳。声明:本文仅供学习交流,部分资料来源于网络,如有侵权联系删除!:数据/指令选择端子。 http://www.Sina.com/http://www.Sina.com/:读写选择引脚。 http://www.Sina.com/http://www.Sina.com/:使能信号。RS

D0~D7:8位双向数据总线。

)背光正极

k :背光负极

另一方面,在显示位置LCD1602中内置80字节的DDRAM,登记要显示的内容。 CGROM中存储了160个不同的字符图形。 后面会详细叙述。

DDRAM中可以存储80个显示地址,而LCD1602的每一行只能显示前16个地址的字符。RS=1时选择数据寄存器,RS=0时选择指令寄存器

如果想在第一行第二列显示字符’a’,该怎么选择这个地址?RW,第一行第二列的地址为01H,a的代码为41H。 此时,如果将41H的数据写入DDRAM的0到1h,则不能获得期望的效果。 选择显示位置时,必须在01H上加80H。 因为在向DDRAM写入数据时,数据总线的最高有效位DB7始终保持为1。 这里是RW=1时读操作(读取LCD内数据),RW=0时写操作(向LCD写入数据),显示内容LCD1602内置字符存储器CGROM,存储了192个点阵字符图案。

这些字符的二进制代码与计算机中的大多数一致,我们在用c语言编程时可以直接在P0=‘a’. 4、指令集LCD1602内部的控制器上共写11条控制命令,读写操作、stace

1、清除指令。

功能:清除DDRAM (清除显示)和交流值(光标复位)

2、光标复位指令。

功能:即使将AC值设定为00H (光标复位),DDRAM的内容也不会改变。

3、输入模式设定命令。

功能: I/D用于控制DDRAM地址1或-1,SH用于控制显示屏的左移或右移。

如果I/D=1,则光标向右移动,DDRAM地址为1。

I/D=0时,光标向左移动,变为DDRAM地址-1。

读取操作时或SH=0时,显示不移动。

在写入操作且SH=1情况下,如果I/D=1则显示左移,如果I/D=0则显示右移

4、显示开关控制指令。

功能: d控制显示开关,c控制光标开关,b控制光标闪烁。

D=1显示开D=0显示关

C=1光标打开C=0光标关闭

B=1光标闪烁B=0光标静止

5、光标、画面移动指令。

功能: S/C=1选择画面、S/C=0选择光标。

R/L=1向右移动,R/L=0向左移动。

两者分别是

00 :光标左移、AC值-1

01 :光标右移、AC值1

10 )屏幕向左移动,光标不动

11 )屏幕向右移动,光标不动

6、功能设定指令。

功能:选择数据总线的位数、显示行数、点大小。

DL控制数据线的位数,n控制显示行数,f控制点尺寸。

DL=1选择8位数据线,N=1选择两行显示,F=1选择511点。

DL=0选择4位数据线,N=0选择1行显示,F=0选择58点。

7、CGRAM地址设定命令。

功能:用户定义的字符。

8、DDRAM地址设定命令。

功能:告诉您在DDRAM的哪个位置显示字符。

请注意,DB7始终为1。 无论要显示的字符如何,DB7位都应保留为1。

即,开头地址=00h10000000(80h )

9、阅读繁忙信号及交流值。

功能: BF=1时,无法接收数据或命令。

BF=0,可以接收数据或命令

10、写数据。

功能: RS=0 RW=0 E=下降沿DB7~DB0=指令。

RS=1 RW=0 E=下降沿DB7~DB0=数据。

11、阅读数据。

功能: RS=0 RW=1 E=1读取状态,RS=1 RW=1 E=1读取数据

在RS和RW都为1的情况下,能够读取忙信号。

> 五、工作时序 5.1.写操作时序

5.2.读操作时序

六、编程思路 6.1.写数据 write_data(unsigned char show_data){read_busy_flag() // 判忙RS = 1; // RS为高电平,选择数据寄存器RW = 0; // RW为低电平,写操作E = 0; // E使能端拉低Px = show_data; // 将数据赋给8位数据总线DB0-DB7,这里的Px为LCD上8位数据总线所连接的单片机IO端口delay(); // 延时E = 1; // 使能端拉高delay(); // 延时E = 0; // 使能端拉低,下降沿有效,数据写入DDRAM} 6.2.写指令 write_cmd(unsigned char cmd){read_busy_flag(); // 判忙RS = 0; // RS为高电平,选择指令寄存器RW = 0; // RW为低电平,写操作Px = cmd; // 将指令赋给8位数据总线DB0-DB7delay(); // 延时E = 1; // 使能端拉高delay(); // 延时E = 0; // 使能端拉低,下降沿有效。} 6.3.初始化 lcd_init(){write_cmd(0x06) // 指令5,屏幕不动,地址+1write_cmd(0x38); // 指令6,16*2,5*8点阵8位数据write_cmd(0x0c); // 指令4,显示开光标关write_cmd(0x01); // 指令1,清屏} 6.4.读数据(读忙信号) read_busy_flag(){unsigned char flag; // flag为LCD状态标志Px = 0xFF; // 给8位数据总线赋值11111111RS = 0; // 选择指令寄存器,读取LCD状态字RW = 1; // 读操作do{E = 1; // 使能端拉高flag = Px; // 读取LCD状态E = 0; // 使能端拉低} while(flag & 0x80); // 如果DB7依然为1,表示忙,直到DB7为0时跳出}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。