LCD1602液晶显示模块学习笔记

LCD1602液晶显示模块

    • 一、初识LCD602
      • 1.1.实物图
      • 1.2.引脚图
      • 1.3.引脚功能说明
    • 二、显示位置
    • 三、显示内容
    • 四、指令集
    • 五、工作时序
      • 5.1.写操作时序
      • 5.2.读操作时序
    • 六、编程思路
      • 6.1.写数据
      • 6.2.写指令
      • 6.3.初始化
      • 6.4.读数据(读忙信号)

声明:本文仅供学习交流,部分资料来源于网络,如有侵权联系删除!

一、初识LCD602

LCD1602(Liquid Crystal Display), 每行可显示16个字符共2行。

1.1.实物图

LCD1602液晶显示模块学习笔记_第1张图片

1.2.引脚图

LCD1602液晶显示模块学习笔记_第2张图片

1.3.引脚功能说明

Vss:电源接地。
VDD:电源正极。
VL:液晶显示偏压。可以接0~5V调节屏幕的对比度,电压越高对比度越低,对比度越高显示效果越鲜艳。
RS:数据/命令选择端。RS=1时选择数据寄存器,RS=0时选择指令寄存器
RW:读写选择端。RW=1时读操作(读取LCD内数据),RW=0时写操作(向LCD写入数据)
E:使能信号。当E为下降沿(从高电平到低电平)时LCD执行写入的指令
D0~D7:8位双向数据总线。
A:背光源正极
K:背光源负极

二、显示位置

  • LCD1602内置了一个80字节的DDRAM,用来寄存需要显示的内容。CGROM存放了160个不同的字符图形,下面会有详细介绍。
    在这里插入图片描述
    LCD1602液晶显示模块学习笔记_第3张图片
  • DDRAM虽然可以存放80个显示地址,但是LCD1602每行只能显示前16个地址上的字符,一般只会用到每行的前16个地址。
    LCD1602液晶显示模块学习笔记_第4张图片
  • 如果想要在第一行第二列显示字符’A’,该怎么选择这个地址呢?
    这里有一个容易出错的点,第一行第二列的地址是01H,A的代码为41H。这时我们向DDRAM的01H写入数据41H时,并不能得到想要的效果。选择显示位置时需要在01H的基础上加上80H,因为向DDRAM写入数据时,数据总线最高位DB7始终保持为1。这里可以参考指令集中的指令8

三、显示内容

  • LCD1602内置一个字符存储器CGROM,存放了192个点阵字符图形。
    LCD1602液晶显示模块学习笔记_第5张图片
  • 这些字符的二进制代码与计算机中的大多一致,我们在用C语言编程时也可以直接写P0=‘A’.

四、指令集

  • LCD1602内部控制器共有11条控制指令,读/写操作、屏幕、光标操作都是通过指令编程来实现的,通过DB7~DB0的8位数据传输数据和指令。
    1、清屏指令。
    功能:清除DDRAM(清显示)和AC值(光标复位)
    LCD1602液晶显示模块学习笔记_第6张图片
    2、光标复位指令。
    功能:AC值设为00H(光标复位),DDRAM内容不变。
    LCD1602液晶显示模块学习笔记_第7张图片
    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,显示右移
    LCD1602液晶显示模块学习笔记_第8张图片
    4、显示开关控制指令。
    功能:D控制显示开关,C控制光标开关,B控制光标闪烁。
    D=1 显示开 D=0 显示关
    C=1 光标开 C=0 光标关
    B=1 光标闪烁 B=0 光标静止LCD1602液晶显示模块学习笔记_第9张图片
    5、光标、画面位移指令。
    功能:S/C=1选择屏幕,S/C=0选择光标。
    R/L=1右移,R/L=0左移。
    二者分别为
    00:光标左移,AC值-1
    01:光标右移,AC值+1
    10:屏幕左移,光标不动
    11:屏幕右移,光标不动
    LCD1602液晶显示模块学习笔记_第10张图片
    6、功能设置指令。
    功能:选择数据总线位数、显示行数以及点阵大小。
    DL控制数据线位数,N控制显示行数,F控制点阵大小。
    DL=1选择8位数据线,N=1选择2行显示,F=1选择511点阵。
    DL=0选择4位数据线,N=0选择1行显示,F=0选择5
    8点阵。
    LCD1602液晶显示模块学习笔记_第11张图片在这里插入图片描述
    7、CGRAM地址设置指令。
    功能:用户自定义字符。
    在这里插入图片描述
    8、DDRAM地址设置指令。
    功能:告诉DDRAM在哪个位置显示字符。
    注意DB7始终为1,无论要显示什么字符DB7位都要保持为1。
    即起始地址 = 00H+1000 0000(80H)
    LCD1602液晶显示模块学习笔记_第12张图片
    9、读忙信号及AC值。
    功能:当BF=1,不能接收数据或指令。
    BF=0,可以接收数据或指令
    LCD1602液晶显示模块学习笔记_第13张图片
    10、写数据。
    功能:RS=0 RW=0 E=下降沿 DB7~DB0=指令。
    RS=1 RW=0 E=下降沿 DB7~DB0=数据。
    LCD1602液晶显示模块学习笔记_第14张图片
    11、读数据。
    功能:RS=0 RW=1 E=1 读状态,RS=1 RW=1 E=1 读数据
    当RS和RW都为1时可以读忙信号。
    LCD1602液晶显示模块学习笔记_第15张图片

五、工作时序

5.1.写操作时序

LCD1602液晶显示模块学习笔记_第16张图片

5.2.读操作时序

LCD1602液晶显示模块学习笔记_第17张图片

六、编程思路

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-DB7
		delay(); // 延时
		E = 1;  // 使能端拉高
		delay(); // 延时
		E = 0;  // 使能端拉低,下降沿有效。
	}

6.3.初始化

	lcd_init()
	{
		write_cmd(0x06)	  // 指令5,屏幕不动,地址+1
		write_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位数据总线赋值11111111
		RS = 0;             // 选择指令寄存器,读取LCD状态字
		RW = 1;             // 读操作
		do
		{
			E = 1;   // 使能端拉高
			flag = Px; // 读取LCD状态
			E = 0; // 使能端拉低
		} while(flag & 0x80); // 如果DB7依然为1,表示忙,直到DB7为0时跳出
	}

你可能感兴趣的:(单片机,单片机)