第11章单片机与液晶显示器的接口电路.pptx
《第11章单片机与液晶显示器的接口电路.pptx》由会员分享,可在线阅读,更多相关《第11章单片机与液晶显示器的接口电路.pptx(129页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第11章章 单片机与液晶显示器的接口电路单片机与液晶显示器的接口电路11.1 液晶显示器LCD1602在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。 在单片机系统中应用晶液显示器作为输出器件有以下几个优点:1. 显示质量高由于液晶显示器每一个点在收到信号后就一直保
2、持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。2. 数字式接口液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。4. 功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。11.1.1 液晶显示简介液晶显示简介1. 液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用
3、在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。2. 液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。3. 液晶显示器各种图形的显示原理1) 线段的显示点阵图形式液晶由MN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节相对应
4、,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。2) 字符的显示用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为
5、“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。3) 汉字的显示汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5右边为2、4、6根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐
6、,送第三个字节直到32B显示完就可以LCD上得到一个完整汉字。11.1.2 字符型液晶字符型液晶LCD1602简介简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以XX电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如下图11-1所示。 图图11-1 LCD1602字符型液晶显示器实物图字符型液晶显示器实物图1. LCD1602的基本参数及引脚功能LCD1602分为带背光和不带背光两种,其控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,
7、两者尺寸差别如下图11-2所示。LCD1602主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm2. 引脚功能说明LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表11-1所示。第1脚:VSS为地电源。 第2脚:VDD接5V正电源。 第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器
8、。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,来判断是否可以刷新液晶,当RS为高电平R/W为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第714脚:D0D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。3. LCD1602的指令说明及时序LCD1602液晶模块内部的控制器共有11条控制指令,如表11-2所示。 LCD1602里面是有CGARM和CGROM的。LCD1602液晶模块的读写操作、屏幕和光标的
9、操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)。 指令1:清显示,指令码01H,光标复位到地址00H位置。 指令2:光标复位,光标返回到地址00H。 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。 指令6:功能设置命令
10、DL:高电平时为8位总线,低电平时为4位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。 指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据。 指令11:读数据。4. 与HD44780相兼容的芯片时序表如下所表11-3示。表表11-3 LCD1602基本操作时序表基本操作时序表图图11-3 读操作时序读操作时序图图11-4 写操作时序写操作时序5 . LCD1602的RAM地址映射及
11、标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图11-5是1602的内部显示地址。例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前
12、都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图11-6所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。 图图11-6 字符代码与图形对应图字符代码与图形对应图6. LCD1602的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指
13、令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置11.1.3 LCD1602的软硬件设计实例的软硬件设计实例1. 硬件原理图1602液晶显示模块可以和单片机AT89C51直接接口,电路如图11-7所示。图图11-7 硬件原理图硬件原理图例例11-1 如图11-8所示,在LCD1602的第一行显示happy every day!,第二行显示gugu1979candy448。图图11-8 单片机和单片机和LCD1602的连线图的连线图程序如下:#include #include sb
14、it LCD_RS=P10; /RS寄存器选择;高电平选数据;低电平选指令;sbit LCD_RW=P11; /读写信号线;高电平读操作;低电平写操作;sbit LCD_E=P12; /E使能端#define LCD_Data P2 /液晶数据D7-D0#define Busy 0 x80 /用于检测LCD状态字中的Busy标识void WriteDataLCD(unsigned char WDLCD);/写数据void WriteCommandLCD(unsigned char WCLCD,BuysC);/写指令unsigned char ReadDataLCD(void);/读数据unsi
15、gned char ReadStatusLCD(void);/读状态void LCDInit(void);/LCD初始化void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);/显示一个字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);/显示一串字符void Delay5Ms(void);void Delay400Ms(void);unsigned char code uctech =
16、 happy every day!;unsigned char code net = gugu1979candy448;void main(void) Delay400Ms(); /启动等待,等LCD进入工作状态 LCDInit(); /LCD初始化Delay5Ms(); /延时片刻(可不要) DisplayListChar(0, 0, uctech);/显示第0行 DisplayListChar(0, 1, net); /显示第1行 ReadDataLCD(); /测试用句无意义 while(1);/写数据void WriteDataLCD(unsigned char WDLCD) Read
17、StatusLCD(); /检测忙 LCD_Data = WDLCD; LCD_RS = 1; LCD_RW = 0; LCD_E = 0; /若晶振速度太高可以在这后加小的延时 LCD_E = 0; /延时 Delay5Ms(); /不加延时通不过PROTEUS仿真LCD_E = 1;/写指令void WriteCommandLCD(unsigned char WCLCD,BuysC) /BuysC为0时忽略忙检测 if (BuysC) ReadStatusLCD(); /根据需要检测忙 LCD_Data = WCLCD; LCD_RS = 0; LCD_RW = 0; LCD_E = 0;
18、 LCD_E = 0; Delay5Ms(); LCD_E = 1; /读数据unsigned char ReadDataLCD(void) LCD_RS = 1; LCD_RW = 1; LCD_E = 0; LCD_E = 0; Delay5Ms(); LCD_E = 1; return(LCD_Data);/读状态unsigned char ReadStatusLCD(void) LCD_Data = 0 xFF; LCD_RS = 0; LCD_RW = 1; LCD_E = 0; LCD_E = 0; Delay5Ms(); LCD_E = 1; while (LCD_Data &
19、Busy); /检测忙信号 return(LCD_Data);void LCDInit(void) /LCD初始化 LCD_Data = 0; WriteCommandLCD(0 x38,0); /三次显示模式设置,不检测忙信号 Delay5Ms(); WriteCommandLCD(0 x38,0);Delay5Ms(); WriteCommandLCD(0 x38,0); Delay5Ms(); WriteCommandLCD(0 x38,1); /显示模式设置,开始要求每次检测忙信号 WriteCommandLCD(0 x08,1); /关闭显示 WriteCommandLCD(0 x0
20、1,1); /显示清屏 WriteCommandLCD(0 x06,1); / 显示光标移动设置 WriteCommandLCD(0 x0C,1); / 显示开及光标设置/按指定位置显示一个字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) Y &= 0 x01;X &= 0 x0F; /限制X不能大于15,Y不能大于1 if (Y) X |= 0 x40; /当要显示第二行时地址码+0 x40; X |= 0 x80; / 算出指令码 WriteCommandLCD(X, 0); /这里不检
21、测忙信号,发送地址码 WriteDataLCD(DData);/按指定位置显示一串字符/指向数组的指针:int a10; int *p; p=&a0,p指向a0,是因为将a0的地址赋给了pvoid DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) unsigned char ListLength; ListLength = 0; Y=Y&0 x01; /行标志符号,第0行,或者第1行; X=X&0 x0F; /限制X不能大于15,0-15显示16个字符 while (ListLength=0
22、 x0F) /若到达字串尾则退出 if (X=0 x0F) /X坐标应小于0 xF DisplayOneChar(X, Y, DDataListLength); /显示单个字符 ListLength+; X+; /5ms延时void Delay5Ms(void) unsigned int TempCyc = 5552; while(TempCyc-);/400ms延时void Delay400Ms(void) unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA-) TempCycB=7269; while(Temp
23、CycB-); ;例例11-2 如图11-9所示,在LCD1602的显示I Will Always Love You!。图图11-9 单片机和单片机和LCD1602的连线图的连线图程序如下:#include #include sbit LCD_RS = P1 0; sbit LCD_RW = P1 1; sbit LCD_E = P1 2;#define LCD_DATA P2 /LCD DATA/函数声明void lcd_init(void);void display_string(unsigned char x,unsigned char y,unsigned char *s);/功能描述
24、: 短暂延时,使用12MHZ晶体,约0.01MSvoid dellay(unsigned int h) while(h-); /0.01MS/功能描述: 写数据到LCDvoid WriteDataLcd(unsigned char wdata) LCD_DATA=wdata; LCD_RS=1; LCD_RW=0; LCD_E=0; dellay(200); /短暂延时,代替检测忙状态 LCD_E=1;/功能描述: 写命令到LCDvoid WriteCommandLcd(unsigned char wdata)LCD_DATA=wdata; LCD_RS=0; LCD_RW=0; LCD_E=
25、0; dellay(200); /短暂延时,代替检测忙状态 LCD_E=1;/LCD初始化void lcd_init(void) LCD_DATA=0; WriteCommandLcd(0 x38); dellay(1000); WriteCommandLcd(0 x38); /显示模式设置 WriteCommandLcd(0 x08); /关闭显示 WriteCommandLcd(0 x01); /显示清屏 WriteCommandLcd(0 x06); /显示光标移动设置 WriteCommandLcd(0 x0c); /显示开及光标移动设置/功能描述: 设置光标位置, x是列号,y是行号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 单片机 液晶显示器 接口 电路
限制150内