初步认识51单片机-2.2单片机控制LCD1602液晶显示模块

发布者:温柔之风最新更新时间:2016-03-29 来源: eefocus关键字:51单片机  单片机控制  LCD1602  液晶显示模块 手机看文章 扫描二维码
随时随地手机看文章
上面学的两招,控制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: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。

指令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;

}

关键字:51单片机  单片机控制  LCD1602  液晶显示模块 引用地址:初步认识51单片机-2.2单片机控制LCD1602液晶显示模块

上一篇:初步认识51单片机-2.3单片机控制DS18B20温度传感器模块
下一篇:初步认识51单片机

推荐阅读最新更新时间:2024-03-16 14:48

8051单片机C语言数据采集程序
/8051单片机TLC1549数据采集程序源代码 //单片机:At89S52 //连接类型:232 |485 接口 //校验方式:checksum //开发环境:keil C #i nclude stdio.h #i nclude REGX51.H #i nclude iic.h #define uchar unsigned char #define uint unsigned int uint Timer_Pro_Flag=0;//0为显示处理,1为时序采集处理 sbit TEST_CAP_VOL_CRLT=P1^0;//用于控制外部继电器 sbit PWM_Pin=P3^7;//PWM输出 sbit I
[单片机]
解读51单片机LED系统电路
LED 旋转显示器时基于视觉暂留原理,开发的一种旋转式LED 显示屏。其在具有一定转速地载体上安装16 个LED 发光器件,各LED 发光管等间距排位一条直线,随着旋转速度的加快,在计算机软件精确的时序控制下,不断扫描出预设的文字,图案等。使用一个光耦(U 型槽的红外对管)作为定位传感器,当旋转一周时,挡光板遮挡光源,光敏三极管的集电极输出高电平,当离开挡光板时,集电极再次输出低电平,从而给单片机一个下降沿的跳变型号,产生一个中断,从而更新显示。供电部分,因为整个装置是在不停的高速旋转当中,所以我们做了一个简单的电刷装置,把220V 的交流电通过变压器变成12V 的交流电,再由桥式整流电路,和滤波电路,变为平滑的直流电,最后通过7
[电源管理]
解读<font color='red'>51单片机</font>LED系统电路
STC C51单片机EEPROM
1. STC系列单片机中都内置了EEPROM单元,而且EEPROM操作单元的操作方式是类似于NOR FLASH操作方式,以Secter单元进行擦除和写操作,同时,在重新写Flash数据的时候,内部EEPROM的数据不受影响。不同于AVR单片机中的EEPROM操作。 2. AVR单片机也都内置了EEPROM单元,但是它的EEPROM单元的操作是以字节为单元来操作,读、写以字节为最小单位。同时,在重新写Flash数据的时候,内部EEPROM的数据也被擦除。 3. Silicon Labs---C8051F单片机内部没有内置的EEPROM单元。 4. ARM芯片内部也没有内置的EEPROM单元。 5.
[单片机]
单片机控制步进电机驱动器工作原理
步进电机在控制系统中具有广泛的应用。它可以把脉冲信号转换成角位移,并且可用作电磁制动轮、电磁差分器、或角位移发生器等。 有时从一些旧设备上拆下的步进电机(这种电机一般没有损坏)要改作它用,一般需自己设计驱动器。本文介绍的就是为从一日本产旧式打印机上拆下的步进电机而设计的驱动器。 本文先介绍该步进电机的工作原理,然后介绍了其驱动器的软、硬件设计。 1. 步进电机的工作原理 该步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图1是该四相反应式步进电机工作原理示意图。 图1 四相步进电机步进示意图 开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和
[工业控制]
51单片机的蜂鸣器写歌的音阶
直接上代码! #include reg51.h sbit LS1=P3^7; //该蜂鸣器为无源蜂鸣器;这是当以它的接口 sbit K0=P1^0; int code L ={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248}; //音阶 int code S ={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3}; int i=0; void DelayMs(int x) //延时 { int i; while(x--) for(i=0;i 120;i++); } void init() //初始化 { // TMOD=
[单片机]
51单片机串口理论概念解析
理论概念 不同型号的单片机使用的串口不同,根据需求选择相应的单片机,在有些场合如果单片机如果没有需要的串行通信接口,则可以通过单片机的I/O口进行模拟。 全双工UART(异步串行通信接口) UART有两种工作状态: 同步串行通信状态:速率高,硬件电路复杂,需要同时使用两条信号线,所以只能使用单工方式或半双工方式工作。 异步串行通信状态:方式简单,传输速率不高,应用广泛,方便与其他通信标准进行衔接。 异步传输工作方式: 传输效率较低,起始位,校验位,停止位占用的位较多 数据格式: 同步传输工作方式: 双方同时使用两条通信线: 一条用于产生时钟并要求发送和接受的双方必须保持完全同步(一般情况下,时钟信号由发送端提供)。另一条
[单片机]
<font color='red'>51单片机</font>串口理论概念解析
LCD1602芯片的使用——简单易懂
题目: 想在LCD1602上显示两行如下字样 ++++++++++++++++++++ + huaianxinxi + + wantin + ++++++++++++++++++++ 想完成上面的显示必须掌握LCD1602芯片的基本知识,将在程序下面附上LCD1602芯片的基本知识,供大家参考,我实现的比较简单,没有什么花哨的显示,大家首先要学会操作该硬件,其他的功能完全可以根据其功能说明进行逐项实现。 代码如下: /* 想在LCD1602上显示两行如下字样 ++++++++++++++++++++ + huaianxinxi + + wantin + +++++++++++++++
[单片机]
<font color='red'>LCD1602</font>芯片的使用——简单易懂
一文详解80C51单片机的中断系统
中断系统是计算机或者单片机的主要功能部件。 有了中断系统,便可以使微处理器具备对外部的异步事件进行处理的能力。 当微处理器的CPU正在执行程序的过程中,如果外部硬件或者内部组件有紧急的请求(如通信,断点,发生重大故障等),中断系统就可以将当前的程序暂停,优先处理这些中断请求。 这种处理方式,对整个系统的稳定性,健壮性至关重要,同时也能大大提高处理器的效率,使得系统的应用更加灵活多变。 中断的概念 中断是指单片机在执行程序的过程中,当出现异常情况或特殊请求时,单片机停止当前程序的运行,转向对这些异常情况或特殊请求进行处理,当处理结束后再返回原程序的间断处,继续执行原程序,这一现象称为中断。 中断是单片机实时处理内部或外部事件的一
[单片机]
一文详解80C<font color='red'>51单片机</font>的中断系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved