LCD1602显示屏如何使用

描述

1.芯片简介

LCD1602显示屏为字符显示屏,显示字符为16*2。采用 LCD 显示一个字符时比较复杂,因为一个字符由 6×8 或 8×8 点阵组成,既要找到和显示屏幕上某几个位置对应的显示 RAM 区的 8 字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在 LCD1602上开始显示的行列号及每行的列数找出显示 RAM 对应的地址,设立光标,在此送上该字符对应的代码即可。

控制器

主要特点如下

  • 显示容量为16×2个字符;
  • 芯片工作电压为4.5~5.5V,最佳工作电压为5.0V;
  • 工作电流为2.0mA(5.0V);
  • 字符尺寸为2.95×4.35(W×H)mm。

2. 24C02引脚定义

  1. VSS(1) :显示屏电源地;
  2. VDD(2) :显示屏电源;
  3. V0(3) :V0为液晶显示器对比度调整端;
  4. RS(4) :寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器;
  5. RW(5) :读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据;
  6. EN(6) :使能端,当E端由高电平跳变成低电平时,液晶模块执行命令;
  7. D0-D7(7-14) :8位双向数据线;
  8. A(15) :背光正极;
  9. K(16) :背光负极;

控制器

3.LCD1602控制时序

(1)读操作时序如图:

控制器

(2)写操作时序如图

控制器

4.LCD1602驱动程序

(1)LCD1602.h

#ifndef __LCD1602_H__
#define __LCD1602_H__


#include< reg52.h >


sbit LCD1602_RS = P2^6;
sbit LCD1602_RW = P2^5;
sbit LCD1602_E  = P2^7;
#define  LCD1602_Data  P0


void delay_50us_1602(unsigned int t);
void LCD1602_write_com(unsigned char com);
void LCD1602_write_data(unsigned int dat);
void LCD1602_init(void);
/*******************************************
函数名称:Disp_ZF
功    能:控制液晶显示字符
参    数:addr--显示位置的首地址
          pt--指向显示数据的指针
          num--显示字符个数
返回值  :无
********************************************/
void LCD1602_Disp_ZF(unsigned char addr,const unsigned char * pt,unsigned char num); 
#endif

(2)LCD1602.c

#include "LCD1602.h"
//延时函数
void delay_50us_1602(unsigned int t)
{
  unsigned char j;
  for(;t >0;t--)
    for(j=19;j >0;j--);
}
//LCD1602写指令
void LCD1602_write_com(unsigned char com) 
{
  LCD1602_E = 0;
  LCD1602_RS = 0;
  LCD1602_RW = 0;
  LCD1602_Data= com;
  delay_50us_1602(10);
  LCD1602_E = 1;
  delay_50us_1602(20);
  LCD1602_E = 0;
}
//LCD1602写数据
void LCD1602_write_data(unsigned int dat)
{
  LCD1602_E = 0;
  LCD1602_RS = 1;
  LCD1602_RW = 0;
  LCD1602_Data = dat;
  delay_50us_1602(10);
  LCD1602_E = 1;
  delay_50us_1602(20);
  LCD1602_E = 0;
}
//LCD1602初始化
void LCD1602_init(void)
{
   delay_50us_1602(300);
   LCD1602_write_com(0X38);
   delay_50us_1602(100);
   LCD1602_write_com(0X38);
   delay_50us_1602(100);
   LCD1602_write_com(0X38);
   LCD1602_write_com(0X38);
   LCD1602_write_com(0X08);
   LCD1602_write_com(0X01);
   LCD1602_write_com(0X06);
   LCD1602_write_com(0X0C);

}


void LCD1602_Disp_ZF(unsigned char addr,const unsigned char * pt,unsigned char num)
{
  unsigned char i;
  LCD1602_write_com(addr); 
  for(i = 0;i < (num*1);i++) 
    LCD1602_write_data(*(pt++)); 
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分