原创 【基础教程】液晶1602的使用

2010-4-10 11:26 5529 8 8 分类: 通信

本文章来自www.zyxmcu.com(张彦欣单片机),更多内容,敬请登录。


 


 


点击看大图


    液晶屏幕1602是电子上常用的液晶显示器。这种显示器的优点是带有英文字符字库;价格低廉;接口方便。这种液晶显示器如此广泛的使用,我们很有必要来学习使用。你也看到了上面的图片,LCD1602的引脚常规情况下有15个插针引脚。从左往右分别是 GND(液晶) VCC(液晶) VO(对比度调整端)  RS  RW  EN  D0  D1  D2  D3  D4  D5  D6  D7  VCC(背光)  GND(背光)。



  引脚  

引脚功能

 GND 液晶GND。这是给液晶工作供电的,不正常会不能正常的显示。
 VCC 液晶VCC。这是给液晶工作供电的,不正常会不能正常的显示。
 VO 液晶对比度调整端。需要输入一个电压信号控制液晶的灰度。不连接或是连接不正常会不显示。
 RS 寄存器选择位。1--数据寄存器;0--指令寄存器。
 RW 读写信号位。1--读信号;0--写信号。
 EN 液晶使能位。1--使能液晶;0--禁止液晶操作。
 D0 数据传输位0。
 D1  数据传输位1。
 D2  数据传输位2。
 D3  数据传输位3。
 D4  数据传输位4。
 D5  数据传输位5。
 D6  数据传输位6。

 D7

  数据传输位7。
 VCC 背光VCC。如果连接不正常会导致液晶背光不亮,但是不影响液晶显示。可以不连接。
 GND  背光GND。如果连接不正常会导致液晶背光不亮,但是不影响液晶显示。可以不连接。

    液晶1602的使用非常的方便,数据线8条,控制线3条,其实总共需要11根IO口线(8线制使用使这样的,4线制可以节省IO口,这里先不讨论)。液晶显示模块的VCC和GND(第一和第二个引脚)是需要接的,但是背光的VCC和GND可以不连接。


    液晶1602的使用需要注意的一点就是VO这个端口。这个VO端口接高电平时候,液晶的对比度最小;接低电平时,液晶的对比度最高(会出现“鬼影”)。最好采用一个电位器,可以调节这个端口的电压。


201049231054524.jpg

    正如上图这样,一个电位器,方便调节LCD的对比度。
    还有一点,如果你想增加整个系统的稳定性,你应该在这11条IO口线上加一个上拉电阻。当然,你如果不这样做,这个液晶模块往往也可以工作。
    现在,我们将VO端口连接正确,安装正确电源,然后将11根IO口线接到单片机的任何一个接口上(只要你自己知道你接到了哪个端口上就好)。硬件电路就这样连接完毕了。接下来就是程序了:


    我们查看LCD1602的技术手册,可以看到LCD1602的数据传输方式属于并行传输,时序极其简单。我们编写驱动程序也极其的简单。在这里,我将1602的驱动已经编写好了,大家可以直接拿来使用。现在,我们就来验证一下吧~~


【点击这里下载‘张彦欣单片机’提供的LCD1602驱动程序文件‘LCD1602.H’】rar.gifLCD1602.rar

接下来,我们就开始使用这个头文件吧。首先,我们预览一下这个头文件里面的函数:
void LCD1602_delay();  //这是个内部函数,供其他函数调用。可以设置计数值,来分频CPU。
void LCDInit(void);//这个函数是用来初始化LCD屏幕的。这个函数会清空当前的屏幕。
void msgbox(unsigned char MODE,unsigned char DATA);//这个函数是内部函数,用于和液晶通信。
void LCDChar(unsigned char ADD,unsigned char CH);//输出一个字符CH到特定地址ADD。
void LCDString(unsigned int Address,char *Str);//从地址Address开始,输出一个字符串。
void LCDNum(unsigned char Adress,unsigned int Num);//从地址Address开始输出一个数字。

LCD1602总共有32个单元,每个都可以显示一个字符或是字母:



 0x800x81 0x82 0x83 0x84  0x850x86 0x87 0x88 0x89 0x8A 0x8B 0x8C 0x8D 0x8E 0x8F 
 0xC00xC1 0xC2 0xC3 0xC4 0xC5 0xC6 0xC7 0xC8 0xC9 0xCA 0xCB 0xCC 0xCD 0xCE 0xCF 


    看起来是不是很简单,是的,就是这么简单。我们下面绝一个例子:
我们的硬件链接是这样的:
LCD_RS                         P2.0
LCD_RW                        P2.1
LCD_EN                         P2.2
LCD_D0 ~ LCD_D7        P3

我们首先打开我们的头文件,我们可以看到如下的信息:
点击看大图

    我们看到了,一下的语句:
sbit   LCD_RS  =  P0^0;   //LCD1602 RS引脚定义。
sbit   LCD_RW  =  P0^1;   //LCD1602 RW引脚定义。
sbit   LCD_E   =  P0^2;   //LCD1602 EN引脚定义。
#define LCD_Data   P2    //LCD1602 数据端定义。8位端口,也可以每位定义。

    这里,我们就是定义了硬件连接,这也是我们需要修改的地方。在本例子中,我们硬件连接有变化,我们需要修改这里的代码(其他的一概不需要改动)。我们对应着我们的硬件连接,将这里的代码改成:
sbit   LCD_RS  =  P2^0;   //LCD1602 RS引脚定义。
sbit   LCD_RW  =  P2^1;   //LCD1602 RW引脚定义。
sbit   LCD_E   =  P2^2;   //LCD1602 EN引脚定义。
#define LCD_Data   P3    //LCD1602 数据端定义。8位端口,也可以每位定义。

    OKay,所有的修改已经完成。接下来,我们就调用头文件的函数就可以了。接下来,打开KEIL,建立一个工程,然后写下下面的程序:

#include <REG51.H>
#include "LCD1602.H"    //将我们的驱动文件包含到工程中。事先需要将此文件拷贝到工程目录下。
void main()
{
     LCDInit();  //初始化LCD1602.
     LCDChar(0x80,'A');  //往地址0x80处写入一个字符A。
     LCDNum(0x84,12345);  //从地址0x84开始显示数字12345。
     LCDString(0xC0,“www.zyxmcu.com”);//从地址0xC0开始显示字符串“www.zyxmcu.com”
}


我们看到了,整个过程只要调动我们的头文件中的函数即可。下面我们来看看这个程序运行的结果:
201041002154890.jpg
注意:
1.LCD1602的使用,需要注意的是一定要使用VO这个端口。否则会显示不正常。
2.如果在显示中遇到显示有部分不正常的情况,在初始化函数的时候,可以执行多次LCDInit()函数。


文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条