液晶LCD1602简介
LCD1602液晶也叫1602字符型液晶模块,LCD1602液晶是一种专门用来显示字母、数字、符号的点阵型液晶模块。LCD1602液晶是由若干个5x7点阵字符位组成,每个点阵字符位都可以显示一个字符(包括字母、数字、符号),一共可以显示16x2个字符。LCD1602液晶的每位之间都有一个点距的间隔,每行之间也都有间隔,起到字符间距和行间距的作用。LCD1602液晶只能显示字符(包括字母、数字、符号),不能显示图片。
LCD1602液晶模块具有体积小,功耗低等优点。在各种工业设备、家用电子产品、仪器仪表、嵌入式系统等场合都有非常广泛的应用。
液晶LCD1602技术参数
液晶LCD1602管脚说明
LCD1602液晶模块各管脚的功能介绍如下:
1、LCD1602液晶的管脚1:VSS接5V电源负极,即GND。
2、LCD1602液晶的管脚2:VDD接5V电源正极。
3、LCD1602液晶的管脚3:VL为液晶的显示偏压信号,用于对液晶显示对比度调整,接电源正极时对比度最弱,接地时对比度最高。对比度过高时会产生“鬼影”现象,导致液晶显示的字符不清晰。我们可以通过使用一个10kΩ的电位器来调整对比度。
4、LCD1602液晶的管脚4:RS为液晶的寄存器选择脚,该管脚为高电平时选择数据寄存器,该管脚为低电平时选择指令寄存器。
5、LCD1602液晶的管脚5:R/W为读/写选择管脚,当该管脚为高电平时进行读操作,当该管脚为低电平时进行写操作。
a 当RS和R/W管脚都为低电平时可以写入指令或显示地址。
b 当RS管脚为低电平,R/W管脚为高电平时,可以读忙信号。
c 当RS管脚为高电平,R/W管脚为低电平时,可以写入数据。
6、LCD1602液晶的管脚6:E管脚为使能端,当E管脚由高电平跳变为低电平时,液晶模块执行命令。
7、LCD1602液晶的管脚7~14:D0~D7为液晶8位双向数据线。
8、LCD1602液晶的管脚15:液晶模块背光源正极。
9、LCD1602液晶的管脚16:液晶模块背光源负极。
液晶LCD1602指令
液晶LCD1602时序
读操作时序
写操作时序
时序参数
液晶LCD1602初始化过程
1、延时15ms。
2、写指令38H(不检测忙信号)。
3、延时5ms。
4、写指令38H(不检测忙信号)。
5、延时5ms。
6、写指令38H(不检测忙信号)。
(以后每次写指令、读写数据操作之间均需检测忙信号)。
7、写指令38H:显示模式设置。
8、写指令08H:显示关闭。
9、写指令01H:显示清屏。
10、写指令06H:显示光标移动设置。
11、写指令0CH:显示开及光标设置。
液晶LCD1602例程
/****************LCD驱动基本代码*****************
*单片机型号:STC89C52RC,晶振频率:11.0592M
*开发环境:KEIL
*说明:LCD1602显示字母、数字、符号。
******************************************************/
#include<reg52.h>
#include<intrins.h>
#define LCD_Data P0
#define Busy 0x80
sbit LCD_RS = P1^0;
sbit LCD_RW = P1^1;
sbit LCD_E = P2^5;
unsigned char code welcome[] = {"YOU ARE WELCOME"};
unsigned char code mcu[] = {"SL-51A"};
void Delay5Ms(void);
void WriteDataLCD(unsigned char WDLCD);
void WriteCommandLCD(unsigned char WCLCD,BuysC);
unsigned char ReadDataLCD(void);
unsigned char ReadStatusLCD(void);
void LCDInit(void);
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
void Info_display(void);
void Delay5Ms(void)
{
unsigned int TempCyc=3552;
while(TempCyc--);
}
void WriteDataLCD(unsigned char WDLCD)
{
ReadStatusLCD();
LCD_Data=WDLCD;
LCD_RS=1;
LCD_RW=0;
LCD_E=0;
LCD_E=0;
LCD_E=1;
}
void WriteCommandLCD(unsigned char WCLCD,BuysC)
{
if(BuysC)ReadStatusLCD();
LCD_Data=WCLCD;
LCD_RS=0;
LCD_RW=0;
LCD_E=0;
LCD_E=0;
LCD_E=1;
}
unsigned char ReadStatusLCD(void)
{
LCD_Data=0xFF;
LCD_RS=0;
LCD_RW=1;
LCD_E=0;
LCD_E=0;
LCD_E=1;
while(LCD_Data&Busy);
return(LCD_Data);
}
void LCDInit(void)
{
LCD_Data = 0;
WriteCommandLCD(0x38,0);Delay5Ms();
WriteCommandLCD(0x38,0);Delay5Ms();
WriteCommandLCD(0x38,0);Delay5Ms();
WriteCommandLCD(0x38,1);
WriteCommandLCD(0x08,1);
WriteCommandLCD(0x01,1);
WriteCommandLCD(0x06,1);
WriteCommandLCD(0x0C,1);
}
void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData)
{
Y&=0x1;X&=0xF;
if(Y)X|=0x40;
X|=0x80;
WriteCommandLCD(X,0);
WriteDataLCD(DData);
}
void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData)
{
unsigned char ListLength;
ListLength=0;
Y&=0x1;X&=0xF;
while(DData[ListLength]>=0x20)
{
if(X<=0xF)
{
DisplayOneChar(X,Y,DData[ListLength]);
ListLength++;
X++;
}
}
}
void main(void)
{
LCDInit();
DisplayListChar(5,0,mcu);
DisplayListChar(0,5,welcome);
while(1){;}
}
液晶LCD1602应用电路图