本文介绍液晶的工作原理以及如何编写代码显示字符。
一、液晶显示屏简介
LCD ( 的简称)液晶显示器。能够同时显示16x2,32个字符,是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路及其扩展驱动电路,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。该显示屏的优点是耗电量低、体积小、辐射低。
主要用来显示数字、字母、图形以及少量自定义字符。可以显示2行16个字符,拥有16个引脚,其中8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节V0和背光源AK。
LCD屏的命名,基本都是按照其分辨率来进行命名的 比如 就是分辨率为16×2, 就是分辨率为128×64。
二、主要参数三、显示原理
点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成。显示屏上64×16个显示单元与显示RAM区的1024字节相对应,每一字节的内容与显示屏上相应位置的亮暗对应。例如显示屏第一行的亮暗由RAM区的000H~00FH的16字节的内容决定,当(000H)=FFH时,屏幕左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,屏幕右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H…,(00EH)=00H,(00FH)=00H时,在屏幕的顶部显示一条由8条亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。
字符型液晶显示模块是一种专门用于显示字母、数字和符号等的点阵式LCD,常用16×1,16×2,20×2和40×2等的模块。一般的字符型液晶显示器的内部控制器大部分为,能够显示英文字母、阿拉伯数字、日文片假名和一般性符号。
四、引脚功能
采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明见下表。
各引脚的功能介绍如下。
引脚1:VSS为地电源。
引脚2:VDD接5V正电源。
引脚3:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”现象,使用时可以通过一个10kQ的电位器调整其对比度。
引脚4:RS为寄存器选择脚,高电平时选择数据寄存器、低电平时选择指令寄存器。
引脚5:R/W为读/写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或显示地址;当RS为低电平,R/W为高电平时,可以读忙信号;当RS为高电平,R/W为低电平时,可以写入数据。
引脚6:E端为使能端,当E端由高电平跳变为低电平时,液晶模块执行命令。
引脚7~14:D0~D7为8位双向数据线。
引脚15:背光源正极。
引脚16:背光源负极。
五、连接方式
与单片机的连接有两种方式,一种是直接控制方式,另一种是所谓的间接控制方式。它们的区别只是所用的数据线的数量不同,其他都一样。
1.直接控制方式
的8根数据线和3根控制线E,RS和R/W与单片机相连后即可正常工作。一般应用中只须往中写入命令和数据,因此,可将的R/W读/写选择控制端直接接地,这样可节省1根数据线。VO引脚是液晶对比度调试端,通常连接一个10kΩ的电位器即可实现对比度的调整;也可采用将一个适当大小的电阻从该引脚接地的方法进行调整,不过电阻的大小应通过调试决定。
2.间接控制方式
间接控制方式也称为四线制工作方式,是利用所具有的4位数据总线的功能,将电路接口简化的一种方式。为了减少接线数量,只采用引脚DB4~DB7与单片机进行通信,先传数据或命令的高4位,再传低4位。采用四线并口通信,可以减少对微控制器I/O的需求,当设计产品过程中单片机的I/O资源紧张时lcd1602资料,可以考虑使用此方法。
六、的RAM地址映射及标准字库表
,总共显示为16行2列,对应着32个RAM地址,在使用的时候,需要在哪个位置显示,就写入对应的RAM地址,然后再写入需要的字符,对应就会显示该字符。
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示LCD此时不忙,这时才能写指令和数据,否则此指令失效。要显示字符时要先输入显示字符地址(写指令),也就是告诉模块在,哪里显示字符,然后再写入需要显示的字符(写数据),才能够正常显示字符。
下图是1602的内部显示地址:
这个ROM中固化了一些我们常用的ASCII字符以及部分日文字符的点阵数据,需要写入那个字符,就直接设置对应进制码就可以,比如大写的字母A,代码是0100 0001(41H)与ASCII码一致,也就是表中的ASCII码字符的地址和实际的ASCII码字符是一样的。
七、读写操作
分为读操作和写操作
其中读操作可以分为读状态和读数据,写操作可以分为写指令和写数据。
读状态:读取LCD引脚状态,返回为状态字,D0-D6为当前LCD数据指针的地址 D7为是否允许读写操作(即检查LCD是否处于忙状态)。
读数据:读取D0-07内的数据
写指令:写入LCD的控制指令,比如清屏,显示开关等
写数据:写入需要显示的数据,比方说要显示字符A,就写入0100 0001(41H)
以51单片机为例,D0-D7接到P0口 RW RW EN接到任意两个口
读写操作的时序图如下:
读操作时序:
写操作时序:
写指令时,RS置为低电平,RW置为低电平,EN置为低电平,然后将指令数据送到数据口D0~D7,延时tsp1,让1602准备接收数据,这时候将EN拉高,产生一个上升沿,这时候指令就开始写入LCD,延时一段时间,将EN置低电平。
写数据时,RS置为高电平,RW置为低电平,EN置为低电平,然后将指令数据送到数据口D0~D7,延时tsp1,让1602准备接收数据lcd1602资料,这时候将EN拉高,产生一个上升沿,这时候数据就开始写入LCD,延时一段时间,将EN置低电平。
以51单片机为例,D0-D7接到P0口上,RS、RW、EN任意三个引脚,则写指令和写数据代码如下:
/*--------写命令函数-------*/
void LcdWriteCmd(unsigned char cmd)
{
LCD_RS = 0; //输入命令
LCD_RW = 0; //写
LCD_EN = 0; //使能拉低
LCD_PIN=cmd; //给端口数据
DelayMs(1);
LCD_EN = 1; //使能拉高
DelayMs(1);
LCD_EN = 0; //1→0,下降沿执行命令
}
/*--------写数据函数-------*/
void LcdWriteData(unsigned char dat)
{
LCD_RS = 1; //输入数据
LCD_RW = 0; //写
LCD_EN = 0; //使能拉低
LCD_PIN=dat; //给端口数据
DelayMs(1);
LCD_EN = 1; //使能拉高
DelayMs(1);
LCD_EN = 0; //1→0,下降沿执行命令
}
八、的指令操作
液晶模块的读写操作,屏幕和光标的操作都是通过指令来实现的。(1为高电平,0为低电平)分别介绍如下。
(1)指令1:清屏。指令码01H,光标复位到地址00H。
(2)指令2:光标复位。光标复位到地址00H。
(3)指令3:输入方式设置。其中,I/D表示光标的移动方向,高电平右移,低电平左移;S表示显示屏上所有文字是否左移或右移,高电平表示有效,低电平表示无效。
(4)指令4:显示开关控制。其中,D用于控制整体显示的开与关,高电平表示开显示,低电平表示关显示;C用于控制光标的开与关,高电平表示有光标,低电平表示无光标;B用于控制光标是否闪烁,高电平闪烁,低电平不闪烁。
(5)指令5:光标或字符移位控制。其中,S/C表示在高电平时移动显示的文字,低电平时移动光标。
(6)指令6:功能设置命令。其中,DL表示在高电平时为8位总线,低电平时为4位总线;N表示在低电平时为单行显示,高电平时双行显示;F表示在低电平时显示5×7的点阵字符,高电平时显示5×10的点阵字符。
(7)指令7:字符发生器RAM地址设置。
(8)指令8:DDRAM地址设置。
(9)指令9:读忙信号和光标地址。其中,BF为忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平则表示不忙。
(10)指令10:写数据。
(11)指令11:读数据。
九、LCD初始化
LCD初始化的过程,也就是对LCD进行写指令的过程,具体的指令如下:
写指令0x38:162显示,57点阵,8位数据口 (指令6)。
写指令0x0c:开启显示屏,关光标,光标不闪烁 (指令4)。
写指令0x06:显示地址地址加1,即写一个数据后,显示位置右移一位 (指令3)。
写指令0x01:显示清屏。
/*--------LCD初始化函数-------*/
void LcdInit()
{
LcdWriteCmd(0x38); // 16*2显示,5*7点阵,8位数据口
LcdWriteCmd(0x0C); // 开显示,不显示光标
LcdWriteCmd(0x06); // 地址加1,当写入数据后光标右移
LcdWriteCmd(0x01); // 清屏
}
十、LCD显示字符
在显示字符之前要设置光标的位置,第一行起始地址就是(1000 0000)80H,第二行起始地址是(1100 0000)C0H(40H+80H)。具体代码如下
/*--------显示字符串函数-------*/
void LcdPrintStr(unsigned char x,unsigned char y,unsigned char *str)
{
LcdWriteCmd(0x80+0x40*(y%2)+x%16);// 设置坐标
while(*str!='')
LcdWriteData(*str++); //发送要显示的数据
}
十一、仿真代码示例
主函数代码:
/*--------主函数-------*/
void main()
{
LcdInit(); // LCD液晶初始化
LcdPrintStr(0,0," LCD1602 Test ");
LcdPrintStr(0,1,"ABCDEFGHIJKLMNOP");
while(1);
}
仿真效果:
示例资料获取方法
1、轻戳下方小卡片,进入后点击关注。
2、关注后在对话框内发送:即可获取下载链接。
限时特惠:本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情
站长微信:Jiucxh