第九讲LCD控制显示字符一、LCD简介二、1602字符型液晶显示屏三、1602控制程序编写四、实训一、LCD简介LCD液晶显示器是LiquidCrystalDisplay的简称,LCD的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。1对比度对比度是屏幕上同一点最亮时(白色)与最暗时(黑色)的亮度的比值,高的对比度意味着相对较高的亮度和呈现颜色的艳丽程度。2亮度LCD是一种介于固态与液态之间的物质,本身是不能发光的,需借助要额外的光源才行。因此,灯管数目关系着液晶显示器亮度。最早的液晶显示器只有上下两个灯管,发展到现在,普及型的最低也是四灯,高端的是六灯。3信号响应时间响应时间指的是液晶显示器对于输入信号的反应速度,也就是液晶由暗转亮或由亮转暗的反应时间,通常是以毫秒(ms)为单位。4可视角度大多数光都是从屏幕中垂直射出来的,所以从某一个较大的角度观看液晶显示器时,便不能看到原本的颜色,甚至只能看到全白或全黑。为了解决这个问题,到目前为止有三种比较流行的技术,分别是:TN+FILM、IPS(IN-PLANE-SWITCHING)和MVA(MULTI-DOMAINVERTICALalignMENT)。LED(LightEmittingDiode),发光二极管是一种固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。二、1602字符型液晶显示屏字符型LCD是由若干个5×7或5×11等点阵符位组成。每一个点阵字符位都可以显示一个字符。点阵字符位之间有一空点距的间隔起到了字符间距和行距的作用。目前市面上常用的有16字×1行,16字×2行(简称1602),20字×2行和40字×2行等的字符模块组,其中1602液晶显示屏应用比较广泛。引脚符号功能说明1VSS一般接地2VDD接电源(+5V)3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/WR/W为读写信号线,高电平时进行读操作,低电平时进行写操作。6EE(或EN)端为使能(enable)端,下降沿使能。1、1602引脚引脚符号功能说明7DB0低4位三态、双向数据总线0位(最低位)8DB1低4位三态、双向数据总线1位9DB2低4位三态、双向数据总线2位10DB3低4位三态、双向数据总线3位11DB4高4位三态、双向数据总线4位12DB5高4位三态、双向数据总线5位13DB6高4位三态、双向数据总线6位14DB7高4位三态、双向数据总线7位(最高位)(也是busyflag)15BLA背光电源正极16BLK背光电源负极1602与8051单片机的参考连接图2、LCD1602状态字说明注意:每次对控制器读写操作之前,都要进行读写检测(忙闲),确保STA7==03、LCD1602片内RAM控制器内部带有80×8(80字节)位的数据缓冲区,如下图所示:控制器内部设有一个数据指针,可以通过设置数据指针访问片内80个字节的数据。4、LCD1602指令说明(1)显示模式设置:(2)显示开/关及光标模式设置:(3)其它设置5、基本操作时序(1)读状态输入:RS=L;RW=H;E=H输出:D0~D7=状态字(2)写指令:输入:RS=L;RW=L;D0~D7=指令码;E=高脉冲输出:无(3)读数据输入:RS=H;RW=H;E=H输出:D0~D7=数据(4)写数据输入:RS=H;RW=L;D0~D7=数据;E=高脉冲输出:无(1)读状态输入:RS=L;RW=H;E=H输出:D0~D7=状态字ucharBusy_Check(){ucharlcd_status;RS=0;RW=1;E=1;Delay_Ms(1);lcd_status=P0;E=0;returnlcd_status;}(2)写指令:输入:RS=L;RW=L;D0~D7=指令码;E=高脉冲输出:无voidWrite_LCD_Command(ucharcmd){while((Busy_Check()&0x80)==0x80);//busy!wait!!!RS=0;RW=0;E=0;P0=cmd;E=1;Delay_Ms(1);E=0;}voidWrite_LCD_Data(uchardat){while((Busy_Check()&0x80)==0x80);//busy!wait!RS=1;RW=0;E=0;P0=dat;E=1;Delay_Ms(1);E=0;}(4)写数据输入:RS=H;RW=L;D0~D7=数据;E=高脉冲输出:无6、LCD1602初始化过程(1)延时15ms;(2)写指令38H(不检测忙信号);(3)延时5ms;(4)写指令38H(不检测忙信号);(5)延时5ms;(6)写指令38H(不检测忙信号);(7)以后每次写指令、读写数据操作之前均需检测忙信号;(8)写指令38H:显示模式设置;(9)写指令08H:显示关闭;(10)写指令01H:显示清屏;(11)写指令06H:显示光标移动设置;(12)写指令0CH:显示开及光标设置;LCD1602初始化函数实例voidInitialize_LCD(){Write_LCD_Command(0x38);Delay_Ms(1);Write_LCD_Command(0x01);Delay_Ms(1);Write_LCD_Command(0x06);Delay_Ms(1);Write_LCD_Command(0x0c);Delay_Ms(1);}字符函数实例voidDisplay_String(ucharx,uchary,uchar*str){uchari=0;//settingdisplaycharstartif(y==0)Write_LCD_Command(0x80|x);if(y==1)Write_LCD_Command(0xc0|x);for(i=0;i16;i++){Write_LCD_Data(str[i]);}}三、1602控制程序编写三、实训1、设计显示不同的字符;2、水平滚动和垂直滚动显示。