使用LCD1602液晶显示屏的入门指南

液晶LCD1602简介

      LCD1602液晶也叫1602字符型液晶模块,LCD1602液晶是一种专门用来显示字母、数字、符号的点阵型液晶模块。LCD1602液晶是由若干个5×7点阵字符位组成,每个点阵字符位都可以显示一个字符(包括字母、数字、符号),一共可以显示16×2个字符。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应用电路图

 

物联沃分享整理
物联沃-IOTWORD物联网 » 使用LCD1602液晶显示屏的入门指南

发表评论