LCD1602屏幕简介(全网最详细教程)

2023-05-16

目录

1.接线说明

2.LCD1602显示原理

3.LCD1602时序分析

4.LCD1602显示一个字符

 5.LCD1602显示一行


1.接线说明

第1引脚:GND为电源地

第2引脚:VCC接5V电源正极

第3引脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4引脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5引脚:RW为读写信号线,高电平(1)时进行读操作,以51为例的简单原理图低电平(0)时进行写操作。

第6引脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。

第7~14引脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。第15引脚背光正极,第16引脚背光负极。

开发板接线图:

2.LCD1602显示原理

要想搞懂1602如何显示,就只需搞懂两个问题(在哪显示,如何显示)。

首先来说一下在哪显示这个问题:

LCD1602可以显示16*2个字符且通过D0-D7八个引脚传输数据八位数据,每一个显示的位置都对应上图的一个地址。例如我想在第一行的第三个位置显示,那么就可以锁定上表中的“02”,换算成二进制就是0000 0010。听上去很简单,但是LCD1602有个特点就是写入显示地址时要求最高位 D7 恒定为高电平。所以我们想显示真实的地址应该为1000 0010。

在哪显示说清楚了,现在来搞怎么显示这个问题:

 在LCD1602的手册中给出了这样一个表格,我们想显示表格中的字符只需获取某个字符的高位和低位即可。例如我想显示“B”这个字符,就是0100 0010转换成16进制就是0x42,刚好对应‘B’的ASCLL码66。当然我们在编程的时候无需这样操作,只需输入字符即可,编译器会自动编译成对应的ASCLL码。

说到这里会发现无论是传输地址的指令还是传输字符的指令都是通过D0-D7这八根线进行传输,那么我们什么时候传输的数据,说明时候传输的是地址呢。我们靠的是在1602上的RS引脚,RS为高电平1时选择数据寄存器(写数据)、低电平0时选择指令寄存器(写地址)。

3.LCD1602时序分析

LCD1602的时序分为读操作时序和写操作时序,我们先分析一下最重要的写操作时序。我们无论是写入数据还是写入地址都必须要执行写操作,因此我们在编程是最好封装两个函数(写地址函数,写数据函数)。

写时序分析

 首先看RS,RS的时序分析非常简单就正如上文所说我们只需搞清楚到底是是写地址还是写数据 ,写地址为0,写数据为1即可,没有太多好分析的。

R/W:可以从途中看出来R/W的时序低电平贯穿了整个时序,因此我们将R/W置0即可。

E:初始状态为0,然后延时至少tR之后置1(tR的值参考上表,25ns执行一个_nop_();函数即可),置1后要延时至少tPW(上图给出的tPW值为150ns,建议执行两个_nop_();函数),接着再至少延时tF(执行一个_nop_();函数)后置0。

代码如下(基于51单片机),其它单片机此原理都可适用。

#include "reg52.h"
#include "intrins.h"
#include "delay.h"

#define databuffer P0  //定义D0-D7引脚
sbit EN = P2^7;
sbit RS = P2^6;
sbit RW = P2^5;

void Write_cmd_Func(char cmd)  //写命令函数
{
	check_busy();   //检测忙信号函数
	RS = 0;    //RS为低电平:写指令
	RW = 0; 
	
	EN = 0;
	_nop_(); //执行一个空函数,延时约1us
	databuffer = cmd;
	_nop_();
	EN = 1;
	_nop_();
	_nop_();
	EN = 0;  
	_nop_();	
}

void Write_data_Func(char datashow) //写命令函数
{
	check_busy();  //检测忙信号函数
	RS = 1; //RS为高电平:写内容
	RW = 0;	
	
	EN = 0;
	_nop_();
	databuffer = datashow;
	_nop_();
	EN = 1;
	_nop_();
	_nop_();
	EN = 0;  
	_nop_();	
}

读操作时序:

读操作时序主要应用在检测忙信号,忙信号也在手册初始化中使用到,下文会提到。所以我们分析读操作时序的目的也就是为了写检测忙信号函数。 

RS:置0,写命令

RW:高电平贯穿整个时序,因此置1。

E:初始状态为0,延时tR后拉高,之后再延时tPW后拉低。

读操作时序与写操作时序的区别在于:写操作时序在E=0的时候就开始传输数据,而读操作时序要等E=1之后才开始传输数据。

代码如下:

void check_busy()//检测忙信号函数
{
	char tmp = 0x80; //创建一个变量,存放数据

	databuffer=0x80; //初始值为忙,只要当单片机发数据后高位变低后才为不忙
	while(tmp & 0x80){  //检测tmp的高位bf的值是否为高电平,如果为忙程序卡住不往下执行         
                        //高电平:忙   低电平:不忙
	RS = 0;
	RW = 1;
	EN = 0;
	_nop_();
	EN = 1;
	_nop_();	
	_nop_();
	tmp=databuffer;
  EN = 0;
	_nop_();	
	}
}

LCD1602初始化:

当然这里还需注意LCD1602的手册给出了使用前还需将LCD1602初始化,具体初始化内容如下,我们只需调用我们刚刚封装好的写命令函数一步一步执行手册所给的内容即可。

(1)延时 15ms

(2)写指令 38H(不检测忙信号)

(3)延时 5ms

(4)以后每次写指令,读/写数据操作均需要检测忙信号

(5)写指令 38H:显示模式设置

(6)写指令 08H:显示关闭

(7)写指令 01H:显示清屏

(8)写指令 06H:显示光标移动设置

(9)写指令 0CH:显示开及光标设置

void LCD1602_Init() //LCD1602初始化
{

	Delay15ms();
	Write_cmd_Func(0x38);
	Delay5ms();
	Write_cmd_Func(0x38);
	Write_cmd_Func(0x08);
	Write_cmd_Func(0x01);
	Write_cmd_Func(0x06);
	Write_cmd_Func(0x0c);
}

4.LCD1602显示一个字符

我们上面已经把写命令函数,写数据函数,初始化函数等都已经写完了,现在就可以在main函数里面操作让我们的LCD1602显示一个字符了。

代码如下:

void main()
{
	char position = 0x80 + 0x08;  //定义显示的位置
	char datashow = 'E'           //定义显示的字符
	
	LCD1602_Init();
	Write_cmd_Func(position);
	Write_data_Func(datashow);
}

效果如下:

 5.LCD1602显示一行

想要显示一行我们只需基于上面的内容封装一个函数即可。

代码如下:

void LCD1602_ShowLine(char row,char col,char *string) //row:行 col:列 *string:显示内容
{
	switch(row){
		case 1:
		Write_cmd_Func(0x80+col);
		while(*string){
		Write_data_Func(*string);
		string++;
		}
		break;
			
	  case 2:
		Write_cmd_Func(0x80+0x40+col);
		while(*string){
		Write_data_Func(*string);
		string++;
		}
		break;
	}
}

效果如下:

有关LCD1602的内容就分享完了,欢迎广大嵌入式爱好者交流!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LCD1602屏幕简介(全网最详细教程) 的相关文章

  • 普元信息 服务器,普元配置服务器

    普元配置服务器 内容精选 换一换 服务编排实现多个对象的可视化流程编排 xff0c 以API的形式对外提供服务 简单来说可以将Script脚本 Action等封装成对外提供的服务接口 服务编排可以对服务编排再封装 Script脚本 Acti
  • win下搭建小程序服务器,win下搭建小程序服务器

    win下搭建小程序服务器 内容精选 换一换 云硬盘挂载至云服务器后 xff0c 需要登录云服务器初始化云硬盘 xff0c 即格式化云硬盘 xff0c 之后云硬盘才可以正常使用 云耀云服务器磁盘初始化的操作方法与ECS相同 xff0c 本节操
  • 新服务器如何安装操作系统,新服务器如何安装操作系统

    新服务器如何安装操作系统 内容精选 换一换 常见的CPU频率调节模式有performance powersave ondemand等 xff0c 用户可以根据裸金属服务器的使用场景选择合适的CPU频率调节模式 可以通过以下操作将CPU频率调
  • ++项目 cmake头文件路径_基于VSCode和CMake进行C/C++开发第六讲CMake

    6 0 xff1a 本讲目录 本系列视频 xff0c B站首发 xff0c up主 xiaobing1016 前言 xff1a CMake是一个跨平台的安装编译工具 xff0c 可以用简单的语句来描述所有平台的安装 编译过程 CMake可以
  • CMake 添加头文件目录,链接动态、静态库(添加子文件夹)

    CMake支持大写 小写 混合大小写的命令 当编译一个需要第三方库的项目时 xff0c 需要知道 xff1a 去哪找头文件 xff08 h xff09 xff0c I xff08 GCC xff09 INCLUDE DIRECTORIES
  • 将Linux下python默认版本切换成替代版本

    本文链接自http www myhack58 com Article 48 66 2016 71806 htm 当你安装 Debian Linux 时 xff0c 安装过程有可能同时为你提供多个可用的 Python 版本 xff0c 因此系
  • nodejs的Cannot find module 'body-parser'

    http blog csdn net u014345860 article details 77769253 转载于 https www cnblogs com Baronboy p 7787737 html
  • 一致哈希算法详解以及实现

    consistent hashing 是一种 hash 算法 xff0c 简单的说 xff0c 在移除 添加一个 cache 时 xff0c 它能够尽可能小的改变已存在 key 映射关系 xff0c 尽可能的满足单调性的要求 1 环形结构
  • 串行通讯 起始、数据、奇偶和停止位等

    串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去 xff0c 同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件 一般完成这种功能的电路 xff0c 我们称为串行接口电路 数据转换是指数据的串并行转换
  • Flask 中的 特殊装饰器before_request/after_request

    before request 在请求收到之前绑定一个函数做一些事情 after request 每一个请求之后绑定一个函数 xff0c 如果请求没有异常 teardown request 每一个请求之后绑定一个函数 xff0c 即使遇到了异
  • php curl 采集 类库,PHP采集相关教程之一:CURL函数库

    CURLOPT SSL VERIFYPEER xff1a FALSE to stop cURL from verifying the peer 39 s certificate Alternate certificates to verif
  • git分支/标签操作

    git分支类似于某一个模块 xff0c 等到所有模块开发完毕时 xff0c 最后聚合在一起形成一个项目 而分支之间一般是不会受影响的 git 分支的基本操作 xff1a git branch branchname 表示创建分支 xff0c
  • Ascii码 、16进制与 char

    对于一个非计算机专业出身的人 xff0c 以前只知道计算机中所有的数据都是以二进制形式进行存储 xff0c 计算 xff0c 通信的 但是人类文明中 xff0c 主要的信息展现以文本的形式展现的 如果使用内存中的0和1来表示文本一直都是一个
  • 国内外知名PT站点最全汇总,含各站内截图及站点链接【转载】

    转自百度空间 xff0c 转载请注明出处 xff0c 谢谢 原帖地址 xff1a http hi baidu com aa23604303 blog item ed2b8d655a7012f9f636546b html xff08 国内 x
  • 第十一周作业

    这个作业属于哪个课程c语言程序设计 II这个作业要求在哪里c语言作业评价标准我在这个课程的目标是学习递归这个作业在那个具体方面帮助我实现目标递归的调用参考文献教材 lt font size 61 39 39 6 34 gt 选择题 2 1
  • 字节序转换与结构体位域(bit field)值的读取 Part 2 - 深入理解字节序和结构体位域存储方式...

    上一篇文章讲解了带位域的结构体 xff0c 在从大端机 xff08 Big Endian xff09 传输到小端机 Little Endian 后如何解析位域值 下面继续深入详解字节序 xff0c 以及位域存储的方式 1 我们知道 xff0
  • 串口扩展方案总结

    转载于 xff1a http bource blog 163 com blog static 684392642006102695700 在这里给大家介绍一下串口扩展的常用方法 xff0c 希望会对有需要的朋友提供一点有价值的参考信息 串行
  • sql注入

    sql注入分类 xff1a 基于联合查询 基于错误回显 基于盲注 xff0c 分时间盲注和布尔型的盲注 基于user agent 基于feferer 基于cookie 二次注入 宽字节注入 通过执行等同于将一个表追加到另一个表的操作来组合两
  • Basic Auth(HTTP Auth)

    Basic Auth xff08 HTTP Auth xff09 Basic Auth简单点说明就是每次请求API时都提供用户的username和password 这种方式优点和缺点都很明显 优点 xff1a u 使用非常简单 xff0c
  • 什么是CPU缓存

    一 什么是CPU缓存 1 CPU缓存的来历 众所周知 CPU是计算机的大脑 xff0c 它负责执行程序的指令 xff0c 而内存负责存数据 包括程序自身的数据 在很多年前 xff0c CPU的频率与内存总线的频率在同一层面上 内存的访问速度

随机推荐