51单片机的驱动LCD屏

描述

液晶显示器(LiquidCrystal Display,简称LCD)可以显示数字、字母、汉字、以及图形图像等丰富的内容,应用非常广泛。液晶显示器由液晶显示部分和控制器两部分组成,控制器通过控制液晶显示区的电压,实现字符的显示。LCD可分为段型、字符型和点阵型三种。其中1602字符型液晶是应用最广泛的液晶显示器之一。

一、LCD简介

1602液晶的控制器是采用日立公司的HD44780集成电路,只需将待显字符的ASCII码放入其数据存储器,字符就会自动在液晶显示器上显示。该显示器每屏最多可显示2行,每行16个字符,共32个字符。

1602型LCD分有背光(16个引脚)和无背光(14个引脚)两种。14脚1602型LCD引脚共分成三类:

1、电源引脚: 引脚1和引脚2 分别是电源正极(VDD)和负极(VSS)。

2、数据引脚: 引脚7到引脚14共8个引脚是双向数据总线的第0位到第8位。由于P0口无上拉电阻,因此如果需要接到P0口,则必须接上拉电阻。而接到其他并口,可不接上拉电阻。

lcd

二、控制介绍

控制引脚:

引脚3(VL)是反视度调整引脚,通常接地。

引脚4(RS)是寄存器选择引脚,当RS=1时选择数据寄存器,当RS=0时,选择指令寄存器。

引脚5(R/W)是读写选择引脚,当R/W=1时读,当R/W=0时写。

引脚6(E)是模块使能信号,当E上为高电平时,可以读出数据或指令;当E上电平正跳变时,开始写入数据或指令;当E上电平负跳变时,开始执行指令。

lcd

三、LCD初始化

关于这一点,LCD1602说明手册上已经明确告诉我们了,想都不要去想,管你这些什么意思,照做即可。

延时15ms


写指令38H


延时5ms


写指令38H


写指令08H


写指令01H


写指令06H


写指令0CH

以上为初始化过程,延时部分好解决,前面讲过了。这里就看如何“写指令”了。问题来了,液晶模块怎么知道单片机给我的是命令还是数据。(叁议电子www.ppptalk.com)LCD1602看到RS为高时,就明白了,哦,你要给我传送数据了;看到RS为低时,就知道你要给我指令了。这个只是选择“命令”还是“数据”,还有一个问题,我们的目的是“写指令”,那么液晶模块怎么知道是“写”还是“读”呢?

再来看RW信号,当RW为低的时候,液晶模块就知道了,单片机要给我“写”了;当RW为高的时候,液晶模块也知道了,单片机要“读”了。很明显,我们这里要把RW设置为低。“写/读”和“指令/数据”都知道如何告诉液晶模块了,那么这个指令从怎么传过去呢?

通过D0-D7这8根线(也就是P2端口)来传输,比如我要传送的指令为x033,那么就把这个数据0x33放到P2端口,当LCD1602看到“写”和“指令”的时候,就知道把P2端口上的0x33这个指令拿过来了。这样就达到了“写”“指令”“0x33”的目的。

但是不是这样就能让LCD1602正常执行了。不是的。回到我们前面讲的那个例子,这里加个条件,屋内人听到敲门三下后,判断暗号正确了,但是没有直接开门,而是通知了他的上级,得到上级的授权后,才开门。也就是两个条件,暗号正确和上级授权。

LCD1602也一样,收到指令没有立即执行,还要等另外一个信号,就是EN使能信号。此时EN给个一定宽度的脉冲,LCD1602才开始执行。

四、驱动代码

void Lcd_Write_Cmd(unsigned char Cmd) {  


    delayMs(5);//注意这里需要延时5ms比较保险 代替判断忙信号  


    RW = 0; 


    P2 = Cmd;        //准备好指令  


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


    EN=1;  


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


    EN=0;           //使指令有效,开始执行


}

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

voidLcd_Write_Data(unsignedcharmData) {


    RW = 0;


    delayMs(5);//注意这里需要延时5ms比较保险代替判断忙信号


    P2=mData;//准备好指令


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


    EN=1;


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


    EN=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(unsigned char Cmd)函数中的Cmd参数就行了。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分