单片机交流
直播中

王芳

7年用户 1394经验值
私信 关注
[问答]

有关LCD1602的基本知识都总结在这里了

什么是LCD1602?
字符型液晶显示原理是什么?
LCD1602有哪些引脚?分别有哪些功能?
如何去解读LCD1602的部分配置代码?

回帖(1)

刘明

2021-7-19 14:20:29
(一)什么是LCD1602
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主威廉希尔官方网站 HD44780及其扩展驱动威廉希尔官方网站 HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。
注意:LCD1602仅能显示字母、符号或数字,无法显示汉字。
(二)字符型液晶显示原理
点阵图形式液晶由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显示的基本原理。
字符型液晶显示模块是一种专门用于显示字母、数字和符号等的点阵式LCD,常用16×1,16×2,20×2和40×2等的模块。一般的LCD1602字符型液晶显示器的内部控制器大部分为HD44780,能够显示英文字母、阿拉伯数字、日文片假名和一般性符号。
(三)LCD1602引脚表

引脚功能介绍:
·引脚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端由高电平跳变为低电平时,液晶模块执行命令。
·引脚714:D0D7为8位双向数据线。
·引脚15:背光源正极。
·引脚16:背光源负极。
(四)控制器接口时序图
1:读操作时序图

2:写操作时序图

首先要对寄存器的选择和读、写操作选择进行配置。RS是寄存器选择,RS = 1对数据进行操作;RS = 0对指令进行操作。
接着对读写操作选择进行配置,RW = 0 写操作。
打开使能端,输入使能信号 E = 1。
数据总线,对DB0~DB7赋值,进行数据的传输
【注】如果先打开使能,再进行其他配置的话,有可能传输的数据不是自己想要的。
(五)1602的原理图

此部分是谱中科技单片机的1602原理图(大多数老师教学51单片机都是这块板子,如需要原理图请直接找我就好)
(六)1602的配置代码部分解读
1:端口的定义
#define LCD1602_PORT P0 //对数据传输口进行定义***it LCD1602_RS = P2^6; //命令端口***it LCD1602_RW = P2^5; //读写端口***it LCD1602_EN = P2^7; //使能端口 特别注意:端口一定别写错了!!!写错了无法显示。
2:写指令
void LCD1602_write_com(unsigned char com){ LCD1602_RS = 0;//写入命令 LCD1602_PORT = com; LCD1602_delay_ms(1); LCD1602_EN = 1;//使能端口高电平 LCD1602_delay_ms(1); LCD1602_EN = 0;} 3:写数据
void LCD1602_write_data(unsigned char dat){ LCD1602_RS = 1; LCD1602_PORT = dat; LCD1602_delay_ms(1); LCD1602_EN = 1; LCD1602_delay_ms(1); LCD1602_EN = 0;} 4:初始化
void Init_LCD1602(){ LCD1602_EN = 0; LCD1602_RW = 0; //设置为写状态 LCD1602_write_com(0x38);//显示模式设定 LCD1602_write_com(0x0c);//开关显示,光标有无设置、光标闪烁设置 LCD1602_write_com(0x06);//写一个字符后指针加一 LCD1602_write_com(0x01);//清屏指令 LCD1602_write_com(0x80);//设置数据指针起点} (七)LCD1602代码
1:lcd1602.c
#include “LCD1602.h”//****************************************************//MS延时函数(12M晶振下测试)//****************************************************void LCD1602_delay_ms(unsigned int n){ unsigned int i,j; for(i=0;i《n;i++) for(j=0;j《110;j++);}//****************************************************//写指令//****************************************************void LCD1602_write_com(unsigned char com){ LCD1602_RS = 0; LCD1602_PORT = com; LCD1602_delay_ms(1); LCD1602_EN = 1; LCD1602_delay_ms(1); LCD1602_EN = 0;}//****************************************************//写数据//****************************************************void LCD1602_write_data(unsigned char dat){ LCD1602_RS = 1; LCD1602_PORT = dat; LCD1602_delay_ms(1); LCD1602_EN = 1; LCD1602_delay_ms(1); LCD1602_EN = 0;}//****************************************************//连续写字符//****************************************************void LCD1602_write_word(unsigned char *s){ while(*s》0) { LCD1602_write_data(*s); s++; }}void Init_LCD1602(){ LCD1602_EN = 0; LCD1602_RW = 0; LCD1602_write_com(0x38); LCD1602_write_com(0x0c); LCD1602_write_com(0x06); LCD1602_write_com(0x01); LCD1602_write_com(0x80);} 2:LCD1602.h
#ifndef __LCD1602_H__#define __LCD1602_H__#include 《reg52.h》//LCD1602 IO设置#define LCD1602_PORT P0***it LCD1602_RS = P2^6;***it LCD1602_RW = P2^5;***it LCD1602_EN = P2^7;//函数或者变量申明extern void LCD1602_delay_ms(unsigned int n);extern void LCD1602_write_com(unsigned char com);extern void LCD1602_write_data(unsigned char dat);extern void LCD1602_write_word(unsigned char *s);extern void Init_LCD1602();#endif 如有错误的地方,还请前辈们指出来!感激不尽!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分