本文章来自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端口接高电平时候,液晶的对比度最小;接低电平时,液晶的对比度最高(会出现“鬼影”)。最好采用一个电位器,可以调节这个端口的电压。
正如上图这样,一个电位器,方便调节LCD的对比度。 还有一点,如果你想增加整个系统的稳定性,你应该在这11条IO口线上加一个上拉电阻。当然,你如果不这样做,这个液晶模块往往也可以工作。 现在,我们将VO端口连接正确,安装正确电源,然后将11根IO口线接到单片机的任何一个接口上(只要你自己知道你接到了哪个端口上就好)。硬件电路就这样连接完毕了。接下来就是程序了:
我们查看LCD1602的技术手册,可以看到LCD1602的数据传输方式属于并行传输,时序极其简单。我们编写驱动程序也极其的简单。在这里,我将1602的驱动已经编写好了,大家可以直接拿来使用。现在,我们就来验证一下吧~~
【点击这里下载‘张彦欣单片机’提供的LCD1602驱动程序文件‘LCD1602.H’】LCD1602.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个单元,每个都可以显示一个字符或是字母:
0x80 | 0x81 | 0x82 | 0x83 | 0x84 | 0x85 | 0x86 | 0x87 | 0x88 | 0x89 | 0x8A | 0x8B | 0x8C | 0x8D | 0x8E | 0x8F | 0xC0 | 0xC1 | 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” }
我们看到了,整个过程只要调动我们的头文件中的函数即可。下面我们来看看这个程序运行的结果:
注意: 1.LCD1602的使用,需要注意的是一定要使用VO这个端口。否则会显示不正常。 2.如果在显示中遇到显示有部分不正常的情况,在初始化函数的时候,可以执行多次LCDInit()函数。 |
文章评论(0条评论)
登录后参与讨论