您的位置 首页 基础

开始知道51单片机-2.2单片机操控LCD1602液晶显示模块

上面学的两招,控制IO和延时,在这里要举的第一个例子就是LCD1602。LCD1602什么意思,表示一行可以显示16个字符,一共有两行。先来个LCD160

上面学的两招,操控IO和延时,在这儿要举的榜首个比方便是LCD1602。LCD1602什么意思,总共一行能够显现16个字符,总共有两行。先来个LCD1602的简略介绍,1602LCD首要技术参数:

显现容量:16×2个字符

芯片作业电压:4.5—5.5V

作业电流:2.0mA(5.0V)

模块最佳作业电压:5.0V

字符尺度:2.95×4.35(W×H)mm

引脚功用阐明

1602LCD选用规范的14脚(无背光)或16脚(带背光)接口,各引脚接口阐明如表1所示:

第1脚:VSS为地电源

第2脚:VDD接5V正电源。

第3脚:VL为液晶显现器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会发生“鬼影”,运用时能够经过一个10K的电位器调整对比度。

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

第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时能够写入指令或许显现地址,当RS为低电平R/W为高电平时能够读忙信号,当RS为高电平R/W为低电平时能够写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块碑文指令。

第7~14脚:D0~D7为8位双向数据线。

第15脚:背光源正极。

第16脚:背光源负极。

咱们来看看怎样运用这两招操控LCD1602液晶模块。既然是用单片机操控LCD1602,那么依据前面的剖析思维,首先要搞清楚谁是操控目标,谁是被操控目标。很显然,LCD1602是被操控目标,那么咱们就先从LCD1602开端剖析。所谓操控也能够了解为交流,那么怎样与LCD1602交流呢?能够想一想,平时人与人是怎样交流的?交流之前先要打个招待吧,比方“你好”之类的,电话晒干要先讲个“喂?”,之后才进入交流正题了。其实单片机与LCD1602的交流办法也相同,“喂?”在这个比方晒干就叫初始化。后边也会常常碰到这个“初始化”的概念。其实器材也是人规划的,所以他的作业办法从某种程度上讲,也是人的交流办法。打完招待后,就开端进入真实主题了。什么主题呢?LCD1602是显现模块,首要效果当然是显现了。那么显现什么呢?很明显,显现内容当然来自于单片机了,单片机让它显现什么它就显现什么。这个‘显现什么’便是传送的数据。那么怎样往1602传送数据呢?1602什么意思,总共2行16个字符,也便是有不同的显现地址,那么怎样确认显现地址呢?因而前面的剖析能够总结为三个问题,怎样初始化,怎样传送显现的内容(显现什么),在哪里显现。这三个问题怎样回答呢?当然要去看芯片手册了。

为了处理这三个问题,咱们先来看看人与人之间是怎样交流的,假如当面交流,你的信号(声响)能够直接传到对方,并且能让对方听懂。假如相距比较远,那么就运用电话等通讯东西。前者信号传递载体是空气,后者是电话线。那么咱们来看看MCU与LCD1602的信号传递载体是什么样的。检查原理图。由所以MCU与1602之间的交流,当然这儿咱们只检查与单片机相衔接的部分。

从图中咱们看到,单片机经过P2.7,P2.6别离与RS,EN衔接,P0端口与D0到D7衔接,总共10根线。那么也便是说,单片机的一切指令,数据等都是经过这10根线来完结的。怎样样去操控LCD呢,当然是阅览LCD的阐明手册。这儿来个比方,房间内一个人规矩,敲三下门,屋内的人才把门翻开。假如你要进入屋内,就有必要敲三下,假如你不知道这个规矩,敲了四下,或许大喊大叫,门也开不了。这个规矩可所以多样化,比方总共敲两下,榜首下要敲重一点,第二下要敲轻一点。或许重敲三下,轻敲一下,等等。并且这儿你不需求问为什么,照着做就行了。其实LCD1602包含后边会讲到的其他模块相同如此,你要与它交流,当然有必要依照它的规矩来。下面咱们就来解读它的规矩,来处理前面说到的三个问题,

LCD1602初始化;在哪里显现;显现什么。

(1)LCD1602初始化

关于这一点,阐明手册上现已告知咱们了,这儿全盘仿制过来。

延时15ms

写指令38H

延时5ms

写指令38H

写指令08H

写指令01H

写指令06H

写指令0CH

以上为初始化进程,延时部分好处理,前面讲过了。这儿就看怎样写指令了。写指令这个进程肯定是经过上图中10根线来完结的。D0-D7总共八根线应该是用来寄存指令的内容。问题来了,1602怎样知道单片机给我的是指令仍是数据。(指令是什么,在哪里显现,屏幕清零;数据是什么,显现什么内容,显现A仍是B)。LCD1602看到RS为高时,就了解了,哦,你要经过P0端口给我数据了,所以LCD1602就把这些数据拿过来了。看到RS为低时,就知道你要给我指令了。经过这种办法,单片机能精确的传递指令或许数据信息,完成与LCD1602的交流。是不是这样就能让LCD1602正常碑文了。不是的。回到咱们前面讲的那个比方,这儿加个条件,屋内助听到敲门三下后,判别暗号正确了,可是没有直接开门,而是通知了他的上级,得到上级的授权后,才开门。也便是两个条件,暗号正确和上级授权。LCD1602也相同,收到指令没有当即碑文,还要等别的一个信号,便是EN使能信号。此刻EN给个必定宽度的脉冲,LCD1602开端碑文。

时序图如上图所示,这儿少了R/W信号,用于操控从LCD1602读取仍是写入的,为了简化进程,在硬件上把R/W接地了,也便是只能写不能读。一起,读忙信号也不能操作,这儿选用延时的办法替代。依据前面的剖析很简单的写出写指令的代码:

​void write_com(unsigned char mycmd)

{

delayMs(5);//留意这儿需求延时5ms比较稳妥 替代判别忙信号

P0=mycmd; //准备好指令

RS=0; //告知LCD1602,P0中放的是指令不是数据

EN=1;

delayUs(5); //依据时序图,脉冲要有必定宽度

EN=0; //使指令有用,开端碑文

}

相同的道理,以上代码中,只需改一下RS信号为1,便是写数据的代码了

void write_com(unsigned char mydata)

{

delayMs(5);//留意这儿需求延时5ms比较稳妥 替代判别忙信号

P0=mycmd; //准备好指令

RS=1; //告知LCD1602,P0中放的是数据不是指令

EN=1;

delayUs(5); //依据时序图,脉冲要有必定宽度

EN=0; //使指令有用,开端碑文

}

讲到这儿,LCD1602初始化代码应该能写出了。一起咱们也现已写出了传递指令的代码,那么现在咱们只需知道指令内容就能够了。

1602LCD的指令阐明及时序

1602液晶模块内部的操控器共有11条操控指令,如表2所示:

1602液晶模块的读写操作、屏幕和光标的操作都是经过指令编程来完成的。(阐明:1为高电平、0为低电平)

指令1:清显现,指令码01H,光标复位到地址00H方位。

指令2:光标复位,光标返回到地址00H。

指令3:光标和显现形式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上一切文字是否左移或许右移。高电平总共有用,低电平则无效。

指令4:显现开关操控。 D:操控全体显现的开与关,高电平总共开显现,低电平总共关显现 C:操控光标的开与关,高电平总共有光标,低电平总共无光标 B:操控光标是否业绩,高电平业绩,低电平不业绩。

指令5:光标或显现移位 S/C:高电平时移动显现的文字,低电平时移动光标。

指令6:功用设置指令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显现,高电平时双行显现 F: 低电平时显现5×7的点阵字符,高电平时显现5×10的点阵字符。

指令7:字符发生器RAM地址设置。

指令8:DDRAM地址设置。

指令9:读忙信号和光标地址 BF:为忙标志位,高电平总共忙,此刻模块不能接纳指令或许数据,假如为低电平总共不忙。

指令10:写数据。

指令11:读数据。

你需求给LCD1602什么指令,只需求传递给void write_com(unsignedchar mycmd)函数中的mycmd参数就行了。

(2)在哪里显现

知道了这个,现在咱们就能处理前面说到的第二个问题,在哪里显现,

例如第二行榜首个字符的地址是40H,那么是不是它的地址便是40H了。留意表2中第8条数据存储地址,D7现已被写死了。终究的显现地址是40H+10000000B,因而咱们只需把这个值传给mycom,LCD1602就知道在第二行榜首个方位显现了。

(3)显现什么

前面讲了,假如传送数据便是要显现的内容。比方我要显现字母A,怎样操作呢。

以上图中能够知道,假如你要显现A,那么数据的高位为0100,低位为0001,因而为01000001。把这个数据传送给LCD1602,它就知道要显现A了。

现在回过头来看看,咱们在运用单片机操控LCD1602这个进程顶用到了单片机的哪些常识。回去看看图1,10根衔接线,P2.6和P2.7引脚,再加上P0端口,首要是经过P2.6和P2.7凹凸改变来宣布指令或数据,P0的改变反映指令或数据的内容。可见,这个进程中咱们只用到了IO口操控和延时。其他很长的部分咱们用在了解1602的运用规矩了。留意这儿是运用规矩,谈不上原理。比方你给LCD1602发送清屏指令时,你了解LCD1602收到这个指令是怎样操作清屏的吗?不知道,也没有必要知道。液晶模块阐明书也不告知你。比方你运用手机时,你点击一下某个应用程序就翻开了,然后依照它的规矩去运用就行了,比方听歌,上网等等,你不必关怀它们是怎样完成的。其实手机也是个模块,咱们只需学会操作就行了,不管它晒干发生了什么事情。

附参阅代码如下:

#include

void LCD_init(void);

void delayUs(unsigned char t);

void delayMs(unsigned char t);

void write_com(unsigned char mycmd);

void write_data(unsigned char mydata);

sbit RS=P2^7;

sbit EN=P2^6;

void main (void)

{

LCD_init();

write_com(0x0f);

write_data(0x41);

while(1);

}

void LCD_init(void)

{

delayMs(15);

write_com(0x38);

delayMs(5);

write_com(0x38);

write_com(0x08);

write_com(0x01);

write_com(0x06);

write_com(0x0c);

}

void delayUs(unsigned char t)

{

while(–t);

}

void delayMs(unsigned char t)

{

while(–t)

{

delayUs(245);

delayUs(245);

}

}

void write_com(unsigned char mycmd)

{

delayMs(5);//留意这儿需求延时5ms比较稳妥替代判别忙信号

P0=mycmd; //准备好指令

RS=0; //告知LCD1602,P0中放的是指令不是数据

EN=1;

delayUs(5); //依据时序图,脉冲要有必定宽度

EN=0; //使指令有用,开端碑文

}

void write_data(unsigned char mydata)

{

delayMs(5);//留意这儿需求延时5ms比较稳妥

P0=mydata;

RS=1;

EN=1;

delayUs(5);

EN=0;

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/263495.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部