草庐IT

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

LJX 2023-04-21 原文

目录

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的内容就分享完了,欢迎广大嵌入式爱好者交流!

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

  1. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  2. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  3. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  4. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  5. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  6. ruby - 在 RUBY 上的 PADRINO 框架上使用 RSPEC 进行测试的教程 - 2

    我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa

  7. 100个python算法超详细讲解:画直线 - 2

    1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva

  8. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  9. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  10. ruby-on-rails - rails 教程 : Putting flash messages in partial yields error "undefined method ` each' for nil:NilClass"? - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:FlashMessagesinPartials(Rails3)我正在做MichaelHartl的Railstutorial和listing7.26将flash消息添加到应用程序布局:...">...这很好用。但是,我试图通过在我的部分文件夹中创建一个_flash.html.erb来清理这段代码...">-->...并且比使用......在我的应用程序布局中,我的所有Rspec测试开始失败,每个测试都显示以下消息:Failure/Error:before{visitsignup_path}ActionView:

随机推荐