LCD1602设计(3)-读写时序

 本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步!

> 发布人:@日月同辉,与我共生_单片机-CSDN博客

> 欢迎你为独创博主日月同辉,与我共生点赞❤❤❤+关注+收藏+评论☺

系列专栏: CSDN-单片机串口通信学习系列

> 我的格言是:“尽最大努力,做最好的自己!

要转载,请提前告知!!!

版权声明:本文为CSDN博主「日月同辉,与我共生」的原创文章,CSDN独一份。

LCD1602设计(3)-读写时序_第1张图片

目录

一、回顾上文

二、读时序

2.1时序图

2.2读忙检测

三、写时序

3.1时序图

3.2写命令

3.3写数据

四、LCD1602指令表

一、回顾上文

上文整理了LCD1602指令的宏定义,让我们一起回顾一下吧!

LCD1602设计(2)-指令宏定义完整版

LCD1602设计(3)-读写时序_第2张图片

二、读时序

2.1时序图

读指令,主机(单片机)读取从机(LCD1602)的指令(如读忙指令等)。

如何读指令呢?要看懂时序图。

要知道读指令,RS=0,RW=1。由时序图可知,先将RS端口拉到低电平,RW端拉到高电平,接着使能端E拉到高电平并持续一段时间,在此期间主机(单片机)读取LCD1602指令后,使能端E拉到低电平。

一般情况下,读指令读的是忙指令,即LCD1602忙不忙,不忙可以让LCD1602工作(如写数据等),忙则无法让LCD1602不工作。

忙时,BF=1;不忙,BF=0。(BF是最高位DB7)。

LCD1602设计(3)-读写时序_第3张图片

2.2读忙检测

state&0x80,就是DB0-DB6清0,DB7(BF)保留state的最高位,用与判断数据忙不忙。

如果LCD1602要写指令/数据,要等LCD1602不忙,即检测到LCD1602不忙。

如果LCD1602忙,就要不断执行do-while循环语句,直至LCD1602不忙为止。

void LCDReadBF() //读忙检测(读命令)
{
	unsigned char i;
	unsigned char state;
	LCD1602_DB=0XFF;
	LCD1602_RS=0;
	LCD1602_RW=1;
	do
	{
	  LCD1602_E=1;
	  state=LCD1602_DB;//将LCD1602
	  LCD1602_E=0;
		i++;
		if(i>200)
			break;
	}
	while(state&0x80); //判断忙不忙,BF=1忙;BF=0不忙
}

三、写时序

3.1时序图

写指令,RS=0,RW=0。由时序图可知,将RS端拉成低电平,RW端拉成低电平,接着在LCD1602不忙的情况下,写命令(命令表可以看上一文章:),接着将使能端E拉成高电平一段时间后,再拉成低电平。

LCD1602设计(3)-读写时序_第4张图片

3.2写命令

要写命令,就要先检测LCD1602忙不忙。

void LCDWriteCmd(unsigned char cmd) //写命令
{
	LCDReadBF();//先检测LCD1602忙不忙
	LCD1602_RS=0;
	LCD1602_RW=0;
	LCD1602_DB=cmd;//写命令给LCD1602
	LCD1602_E=1;
	LCD1602_E=0;
}

3.3写数据

要写数据,就要先检测LCD1602忙不忙。

void LCDWritedata(unsigned char dat) //写数据
{
	LCDReadBF();//检测LCD1602忙不忙
	LCD1602_RS=1;
	LCD1602_RW=0;
	LCD1602_DB=dat;//将数据dat发给LCD1602
	LCD1602_E=1;
	LCD1602_E=0;
}

四、LCD1602指令表

大家可以保留此文章,以便需要时找不到。

亲爱的读者敬请期待,下一文更精彩!!!

一日不读书,胸臆无佳想。我叫不白吃,喜欢我的,可以支持我,博主名叫@日月同辉,与我共生

@日月同辉,与我共生_单片机基础,单片机串口通信-CSDN博客@日月同辉,与我共生擅长单片机基础,单片机串口通信,等方面的知识,@日月同辉,与我共生关注stm32,c语言,51单片机,proteus,单片机领域.https://blog.csdn.net/LIN___IT?spm=1000.2115.3001.5343

你可能感兴趣的:(单片机基础,单片机LCD1602,单片机,LCD1602,时序图,读写数据/指令)