LCD1602液晶显示

news/2024/11/16 19:33:03/

文章目录

  • 一、LCD1602简介
    • 1. 显示原理
    • 2. 外形尺寸
    • 3. 技术参数
    • 4. 引脚功能
    • 5. 指令集
    • 6. 连接方式
  • 二、时序图
    • 1. 写时序
    • 2.读时序
  • 三、程序设计
    • 1. 写数据、指令
    • 2. 初始化、设光标
    • 3. 读数据(读忙信号)
    • 4. 显示函数
    • 5. 示例


一、LCD1602简介

LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。为了降低成本,绝大多数制造商都直接将裸片做到板子上。

1. 显示原理

点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成。显示屏上64×16个显示单元与显示RAM区的1024字节相对应,每一字节的内容与显示屏上相应位置的亮暗对应。例如显示屏第一行的亮暗由RAM区的000H~00FH的16字节的内容决定,当(000H)=FFH时,屏幕左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,屏幕右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H…,(00EH)=00H,(00FH)=00H时,在屏幕的顶部显示一条由8条亮线和8条暗线组成的虚线。

字符型液晶显示模块是一种专门用于显示字母、数字和符号等的点阵式LCD,常用16×1,16×2,20×2和40×2等的模块。一般的LCD1602字符型液晶显示器的内部控制器大部分为HD44780,能够显示英文字母、阿拉伯数字、日文片假名和一般性符号。

2. 外形尺寸

LCD1602字符型液晶显示器实物外形如图1所示。
在这里插入图片描述
LCD1602分为带背光和不带背光两种,其控制器大部分为HD44780。带背光的比不带背光的厚,是否带背光在实际应用中并无差别,具体的鉴别办法可参考图2所示的器件尺寸示意图。
在这里插入图片描述
原理图:
在这里插入图片描述

3. 技术参数

(1)显示容量:16×2个字符。
(2)芯片工作电压:4.5~5.5V。
(3)工作电流:2.0mA(5.0V)。
(4)模块最佳的工作电压:5.0V。
(5)字符尺寸:2.95mm×4.35mm(宽×高)。

4. 引脚功能

LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明见表1。
在这里插入图片描述
各引脚的功能介绍如下:
·引脚1:VSS为地电源。
·引脚2:VDD接5V正电源。
·引脚3:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”现象,使用时可以通过一个10kQ的电位器调整其对比度。
·引脚4:RS为寄存器选择脚,高电平时选择数据寄存器、低电平时选择指令寄存器。
·引脚5:R/W为读/写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或显示地址;当RS为低电平,R/W为高电平时,可以读忙信号;当RS为高电平,R/W为低电平时,可以写入数据。
·引脚6:E端为使能端,当E端由高电平跳变为低电平时,液晶模块执行命令。
·引脚7~ 14:D0~D7为8位双向数据线。
·引脚15:背光源正极。
·引脚16:背光源负极。

5. 指令集

LCD1602液晶模块内部的控制器共有11条控制指令,见表2。
在这里插入图片描述
LCD1602液晶模块的读/写操作、显示屏和光标的操作都是通过指令编程来实现的(其中,1为高电平,0为低电平),分别介绍如下:
(1)指令1:清屏。指令码01H,光标复位到地址00H。
(2)指令2:光标复位。光标复位到地址00H。
(3)指令3:输入方式设置。其中,I/D表示光标的移动方向,高电平右移,低电平左移;S表示显示屏上所有文字是否左移或右移,高电平表示有效,低电平表示无效。
(4)指令4:显示开关控制。其中,D用于控制整体显示的开与关,高电平表示开显示,低电平表示关显示;C用于控制光标的开与关,高电平表示有光标,低电平表示无光标;B用于控制光标是否闪烁,高电平闪烁,低电平不闪烁。
(5)指令5:光标或字符移位控制。其中,S/C表示在高电平时移动显示的文字,低电平时移动光标。
(6)指令6:功能设置命令。其中,DL表示在高电平时为8位总线,低电平时为4位总线;N表示在低电平时为单行显示,高电平时双行显示;F表示在低电平时显示5×7的点阵字符,高电平时显示5×10的点阵字符。
(7)指令7:字符发生器RAM地址设置。
(8)指令8:DDRAM地址设置。
(9)指令9:读忙信号和光标地址。其中,BF为忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平则表示不忙。
(10)指令10:写数据。
(11)指令11:读数据。

6. 连接方式

LCD1602与单片机的连接有两种方式,一种是直接控制方式,另一种是所谓的间接控制方式。它们的区别只是所用的数据线的数量不同,其他都一样。

1.直接控制方式
LCD1602的8根数据线和3根控制线E,RS和R/W与单片机相连后即可正常工作。一般应用中只须往LCD1602中写入命令和数据,因此,可将LCD1602的R/W读/写选择控制端直接接地,这样可节省1根数据线。VO引脚是液晶对比度调试端,通常连接一个10kΩ的电位器即可实现对比度的调整;也可采用将一个适当大小的电阻从该引脚接地的方法进行调整,不过电阻的大小应通过调试决定。

2.间接控制方式
间接控制方式也称为四线制工作方式,是利用HD44780所具有的4位数据总线的功能,将电路接口简化的一种方式。为了减少接线数量,只采用引脚DB4~DB7与单片机进行通信,先传数据或命令的高4位,再传低4位。采用四线并口通信,可以减少对微控制器I/O的需求,当设计产品过程中单片机的I/O资源紧张时,可以考虑使用此方法。

二、时序图

1. 写时序

在这里插入图片描述

2.读时序

在这里插入图片描述

综上:
在这里插入图片描述

三、程序设计

1. 写数据、指令

/*** @brief  LCD1602写数据* @param  Data 要写入的数据* @retval 无*/
void LCD_WriteData(unsigned char Data)
{LCD_RS=1;LCD_RW=0;LCD_DataPort=Data;LCD_E=1;LCD_Delay();LCD_E=0;LCD_Delay();
}/*** @brief  LCD1602写指令* @param  Command 要写入的指令* @retval 无*/
void LCD_WriteCommand(unsigned char Command)
{LCD_RS=0;LCD_RW=0;LCD_DataPort=Command;LCD_E=1;LCD_Delay();LCD_E=0;LCD_Delay();
}

2. 初始化、设光标

/*** @brief  LCD1602初始化函数* @param  无* @retval 无*/
void LCD_Init(void)
{LCD_WriteCommand(0x38);LCD_WriteCommand(0x0C);LCD_WriteCommand(0x06);LCD_WriteCommand(0x01);
}/*** @brief  LCD1602设置光标位置* @param  Line 行位置,范围:1~2* @param  Column 列位置,范围:1~16* @retval 无*/
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{if(Line==1){LCD_WriteCommand(0x80|(Column-1));}else{LCD_WriteCommand(0x80|(Column-1)+0x40);}
}

3. 读数据(读忙信号)

	read_busy_flag(){unsigned char flag; // flag为LCD状态标志//Px为LCD上8位数据总线所连接的单片机IO端口Px = 0xFF;          // 给8位数据总线赋值11111111    LCD_RS = 0;             // 选择指令寄存器,读取LCD状态字LCD_RW = 1;             // 读操作do{LCD_E = 1;   // 使能端拉高flag = Px; // 读取LCD状态LCD_E = 0; // 使能端拉低} while(flag & 0x80); // 如果DB7依然为1,表示忙,直到DB7为0时跳出}

4. 显示函数

/*** @brief  在LCD1602指定位置上显示一个字符* @param  Line 行位置,范围:1~2* @param  Column 列位置,范围:1~16* @param  Char 要显示的字符* @retval 无*/
void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char)
{LCD_SetCursor(Line,Column);LCD_WriteData(Char);
}/*** @brief  在LCD1602指定位置开始显示所给字符串* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  String 要显示的字符串* @retval 无*/
void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char *String)
{unsigned char i;LCD_SetCursor(Line,Column);for(i=0;String[i]!='\0';i++){LCD_WriteData(String[i]);}
}/*** @brief  返回值=X的Y次方*/
int LCD_Pow(int X,int Y)
{unsigned char i;int Result=1;for(i=0;i<Y;i++){Result*=X;}return Result;
}/*** @brief  在LCD1602指定位置开始显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:0~65535* @param  Length 要显示数字的长度,范围:1~5* @retval 无*/
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){LCD_WriteData('0'+Number/LCD_Pow(10,i-1)%10);}
}/*** @brief  在LCD1602指定位置开始以有符号十进制显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:-32768~32767* @param  Length 要显示数字的长度,范围:1~5* @retval 无*/
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)
{unsigned char i;unsigned int Number1;LCD_SetCursor(Line,Column);if(Number>=0){LCD_WriteData('+');Number1=Number;}else{LCD_WriteData('-');Number1=-Number;}for(i=Length;i>0;i--){LCD_WriteData('0'+Number1/LCD_Pow(10,i-1)%10);}
}/*** @brief  在LCD1602指定位置开始以十六进制显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:0~0xFFFF* @param  Length 要显示数字的长度,范围:1~4* @retval 无*/
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;unsigned char SingleNumber;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){SingleNumber=Number/LCD_Pow(16,i-1)%16;if(SingleNumber<10){LCD_WriteData('0'+SingleNumber);}else{LCD_WriteData('A'+SingleNumber-10);}}
}/*** @brief  在LCD1602指定位置开始以二进制显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:0~1111 1111 1111 1111* @param  Length 要显示数字的长度,范围:1~16* @retval 无*/
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){LCD_WriteData('0'+Number/LCD_Pow(2,i-1)%2);}
}

5. 示例

void main()
{LCD_Init();						//LCD初始化LCD_ShowChar(1,1,'A');			//在1行1列显示字符ALCD_ShowString(1,3,"Hello");	//在1行3列显示字符串HelloLCD_ShowNum(1,9,66,2);			//在1行9列显示数字66,长度为2LCD_ShowSignedNum(1,12,-88,2);	//在1行12列显示有符号数字-88,长度为2LCD_ShowHexNum(2,1,0xA5,2);		//在2行1列显示十六进制数字0xA5,长度为2LCD_ShowBinNum(2,4,0xA5,8);		//在2行4列显示二进制数字0xA5,长度为8LCD_ShowChar(2,13,0xDF);		//在2行13列显示编码为0xDF的字符LCD_ShowChar(2,14,'C');			//在2行14列显示字符Cwhile(1){}
}

http://www.ppmy.cn/news/155410.html

相关文章

液晶显示器DCLK/HS/VS/DE信号介绍

只要是数字信号处理电路&#xff0c;就必须有时钟信号。在液晶面板中&#xff0c;像素时钟是一个非常重要的时钟信号。像素时钟信号的频率与液晶面板的工作模式有关&#xff0c;液晶面板分辨率越高&#xff0c;像素时钟信号的频率也越高。在一行内&#xff0c;像素时钟的个数与…

lcd1602液晶显示器

一、lcd1602概念 &#xff08;1&#xff09;lcd1602指显示内容为16*2&#xff08;可显示两行&#xff09;&#xff0c;每行可6个字节的液晶显示模块。 &#xff08;2&#xff09;CGRAM是用户自定义的字符图形存储区&#xff0c;可以定义8个自定义字符。 &#xff08;3&#x…

评测 | HDR领航者,飞利浦HDR1000显示器评测

转自&#xff1a;https://www.sohu.com/a/287275624_686791 在18年的4月23日&#xff0c;飞利浦发布了一款超大屏旗舰全能显示器——飞利浦猛腾系列436M6VBPAB&#xff0c;其屏幕尺寸达到惊人的43英寸&#xff0c;通过VESA—DisplayHDR 1000以及UHDA—Ultra HD Premium双重认证…

C++基础(1) —— 面向对象

文章目录 概念一、类和对象、this指针二、构造函数和析构函数2.1 拷贝构造函数&#xff08;深拷贝浅拷贝&#xff09;2.1.1 顺序栈2.1.2 循环队列2.1.3 实现string 2.2 移动构造函数 概念 面向对象四大特性&#xff1a; 抽象&#xff1a;抽象是一种将对象的共同特征提取出来并…

TP-LINK wn822n USB型无线网卡win10环境下驱动程序

TP-LINK wn822n USB型无线网卡win10环境下驱动程序 驱动程序的安装方法一般是到官方网站下载对应的驱动程序&#xff0c;但TP-LINK官方网站上没有提供TP-LINK wn822n在WIN 10环境下的驱动程序。只好安装驱动精灵&#xff0c;系统会自动查找&#xff0c;选择安装查找到的对应的…

ubuntu20 安装TP Link TL-WDN5200无线网卡驱动

sudo apt update sudo apt install build-essential git dkms git clone https://github.com/brektrou/rtl8821CU.git cd rtl8821CU chmod x dkms-install.sh sudo ./dkms-install.sh sudo modprobe 8821cu reboot

ubuntu18.04 台式机无线网卡TPLink WDN5200H2.0驱动安装

驱动下载 https://github.com/whitebatman2/rtl8821CU.git 安装参见 https://blog.csdn.net/cjgfkd/article/details/90299831 在无网络状态下&#xff0c;在ubuntu镜像文件里的pool文件夹中有一些必要的deb安装包&#xff0c;需要安装make&#xff0c;gcc-7 后来用这个成功ht…

TP-LINK 5200H无线USB网卡ubuntu驱动

TP-LINK 5200H无线USB网卡ubuntu驱动 在ubuntu中设备ID 0bda&#xff1a;1a2b 驱动环境准备;git安装器 具体步骤&#xff1a; 1、下载驱动 git clone https://github.com/whitebatman2/rtl8821CU.git 2、安装驱动 cd ./rtl8821CU make sudo make install 3、查看网卡 …