第九章LCD显示器原理及应用_第1页
第九章LCD显示器原理及应用_第2页
第九章LCD显示器原理及应用_第3页
第九章LCD显示器原理及应用_第4页
第九章LCD显示器原理及应用_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 液晶显示器液晶显示器(LCDLCD)具有体积小、重量轻、功耗低、)具有体积小、重量轻、功耗低、可以显示图形图像、便于用集成电路直接驱动、易于可以显示图形图像、便于用集成电路直接驱动、易于实现全彩色等特点,因此在仪器仪表、便携工具、监实现全彩色等特点,因此在仪器仪表、便携工具、监控系统及消费电子等领域有着广泛的应用。控系统及消费电子等领域有着广泛的应用。 液晶显示器分为液晶显示器分为段式、字符式、点阵式段式、字符式、点阵式等。段式只能等。段式只能显示固定的一些符号或字符,价格低廉;显示固定的一些符号或字符,价格低廉;字符式字符式可以可以显示数字和字符,驱动方便,但无法显示汉字。显示数字和字符,

2、驱动方便,但无法显示汉字。点阵点阵式式可以显示汉字,但价格较高。汉字液晶显示器又分可以显示汉字,但价格较高。汉字液晶显示器又分为为带字库和不带字库带字库和不带字库的两种。的两种。9.1 液晶显示模块的原理液晶显示模块的原理图图9-19-1是字符型液晶显示器(不能显示汉字)原理,字框中显示是字符型液晶显示器(不能显示汉字)原理,字框中显示了字码了字码ABCABC;我们现在看到的图形和实际见到的有些相似,但;我们现在看到的图形和实际见到的有些相似,但是有很大的差别,这些字码的显示是通过在方格中依次连接所是有很大的差别,这些字码的显示是通过在方格中依次连接所得,拼凑成一个个字符;液晶显示屏的原理和数

3、码管的相同,得,拼凑成一个个字符;液晶显示屏的原理和数码管的相同,即即这些方格在这里的作用相当于一个个这些方格在这里的作用相当于一个个LEDLED灯相互拥簇在一起灯相互拥簇在一起;在这里可以称方格为在这里可以称方格为“数码管数码管”;通过控制;通过控制“数码管数码管”的通断的通断就可以显示出不同的字符或数字。每个字符占据就可以显示出不同的字符或数字。每个字符占据8 8个方格的宽个方格的宽度度,1111个方格的高度,即个方格的高度,即1111行行8 8列列,但并不是显示一个字符一定,但并不是显示一个字符一定要用要用1111行行8 8列,也可以是列,也可以是7 7行行5 5列等。当然,数字液晶屏不

4、能够显列等。当然,数字液晶屏不能够显示汉字,因为所占据的位数不同。示汉字,因为所占据的位数不同。图图9-1 字符液晶显示器原理字符液晶显示器原理 汉字液晶屏的显示原理也是如此,如图汉字液晶屏的显示原理也是如此,如图9-29-2的的“大大”字所示。大部分汉字液晶屏的驱动芯片是与液晶屏集字所示。大部分汉字液晶屏的驱动芯片是与液晶屏集成在一起的,统称为液晶模块,无须外加驱动,但不成在一起的,统称为液晶模块,无须外加驱动,但不同的驱动芯片,其驱动方式和程序也不同,所以在使同的驱动芯片,其驱动方式和程序也不同,所以在使用液晶模块之前首先要了解其驱动模式。用液晶模块之前首先要了解其驱动模式。 通常汉字显示

5、屏要比数字显示屏占据的空间大,每个通常汉字显示屏要比数字显示屏占据的空间大,每个汉字的显示由汉字的显示由1616行行1616列组成列组成。以汉字液晶显示器为例,。以汉字液晶显示器为例,描述一个汉字的点阵数据需要描述一个汉字的点阵数据需要3232个字节,因为一个字个字节,因为一个字节占节占8 8个位,所以一个位正好描述液晶屏上一个点是个位,所以一个位正好描述液晶屏上一个点是否点亮。例如,否点亮。例如,假设假设“1 1”表示某个点是亮的,表示某个点是亮的,“0 0”表示某个点是不亮的,表示某个点是不亮的,那么下图中那么下图中“大大”字的第一行字的第一行可以用二进制表示为:可以用二进制表示为:000

6、00000,00010001,00000000,00000000,即,即0 x010 x01和和0 x000 x00两个字节。同理,可以推出两个字节。同理,可以推出“大大”字其他字其他行的二进制表示。明显,如果显示一个汉字,则需要行的二进制表示。明显,如果显示一个汉字,则需要用用3232个字节的数据来描述。个字节的数据来描述。汉字液晶又分为汉字液晶又分为点阵型和字库型点阵型和字库型,点阵型既可以显示汉字、又,点阵型既可以显示汉字、又可以显示图形,而字库型只能显示汉字及字符,无法显示图形,可以显示图形,而字库型只能显示汉字及字符,无法显示图形,但驱动方便。液晶屏的大小也有很大差异,典型的汉字液晶

7、一但驱动方便。液晶屏的大小也有很大差异,典型的汉字液晶一般有般有1223212232、1286412864、1926419264和和240128240128等。在实际应用中,要根据等。在实际应用中,要根据所要显示的内容、成本及信息的多少来选择液晶显示器。所要显示的内容、成本及信息的多少来选择液晶显示器。图图9-2 汉字液晶屏显示原理汉字液晶屏显示原理9.2 字符型液晶显示器字符型液晶显示器RT1602C 字符型液晶显示器是一种用字符型液晶显示器是一种用5 57 7点阵图形点阵图形来显示字符的液晶显示器,根据显示的容来显示字符的液晶显示器,根据显示的容量可以分为量可以分为1 1行行1616个字、

8、个字、2 2行行1616个字、个字、2 2行行2020个字等,最常用的为个字等,最常用的为2 2行行1616个字个字,RT1602CRT1602C液晶模块就属于此类型。液晶模块就属于此类型。一字符型液晶显示模块RT-1602C的外观与引脚显示容量:162个字符字符;工作电流2.0mA(5.0V);字符尺寸:2.954.35mm。RT-1602C采用标准的16脚接口,各引脚情况如下:第1脚:VSS为电源地第2脚:VDD为+5V电源第3脚:VL为液晶显示偏压信号第4脚:RS为数据/命令选择端,高电平高电平时选择数据寄存数据寄存器器、低电平低电平时选择指令寄存器指令寄存器。第5脚: 为读/写选择端,

9、高电平高电平时进行读操作读操作,低低电平电平时进行写操作写操作。当RS和和 共同为低电平共同为低电平时可以写入指令写入指令【或者显示地址或者显示地址】,当RS为低电平, 为高电平时可以读忙信号,当RS为高电平, 为低电平时可以写入数据。/R W/R W/R W/R W 第第6脚:脚:E端为使能端端为使能端,当,当E端由高电平跳变成低电平时端由高电平跳变成低电平时(负跳变),液晶模块执行命令。(负跳变),液晶模块执行命令。 第第714脚:脚:D0D7,为,为8位双向数据总线,与单片机位双向数据总线,与单片机的数据总线相连,三态。的数据总线相连,三态。 第第15脚:脚:BLA,背光电源,通常为,背

10、光电源,通常为5V,并联一个电,并联一个电位器,调节背光亮度。位器,调节背光亮度。 第第16脚:脚:BLK,背光电源地。,背光电源地。/R WRS寄存器及操作寄存器及操作00指令寄存器指令寄存器写入写入01忙信号和地址计数器忙信号和地址计数器读出读出10数据寄存器数据寄存器写入写入11数据寄存器数据寄存器读出读出二字符型液晶显示模块二字符型液晶显示模块RT-1602C的内部结构的内部结构 液晶显示模块液晶显示模块RT-C1602C的内部结构可以分成三部分:的内部结构可以分成三部分:一为一为LCD控制器,二为控制器,二为LCD驱动器,三为驱动器,三为LCD显示装显示装置,如图所示:置,如图所示:

11、 控制器采用控制器采用HD44780,驱动器采用,驱动器采用HD44100。HD44780是是集控制器,驱动器于一体集控制器,驱动器于一体,专用于字符显示控,专用于字符显示控制驱动集成电路。制驱动集成电路。HD44100是作是作扩展显示字符位扩展显示字符位的。的。HD44780是字符型液晶显示控制器是字符型液晶显示控制器的代表电路。的代表电路。 HD44780集成电路的特点:集成电路的特点: 1、可选择、可选择57或或510点字符。点字符。 2、HD44780不仅作为控制器而且还具有驱动不仅作为控制器而且还具有驱动4016点阵点阵液晶像素的能力,并且液晶像素的能力,并且HD44780的驱动能力

12、可通过外接驱的驱动能力可通过外接驱动器扩展动器扩展360列驱动。列驱动。 HD44780可控制的字符高达每行可控制的字符高达每行80个字,也就是个字,也就是5X80=400点,点,HD44780内藏有内藏有16路行驱动器和路行驱动器和40路列驱路列驱动器,所以动器,所以HD44780本身就具驱动有本身就具驱动有1640点阵点阵LCD的能的能力(力(即单行即单行16个字符或两行个字符或两行8个字符个字符)。如果在外部加一)。如果在外部加一HD44100外扩展多外扩展多40路路/列驱动,则可驱动列驱动,则可驱动162LCD 3、HD44780的显示缓冲区的显示缓冲区DDRAM、字符发生存储、字符发

13、生存储器(器(ROM)及用户自定义的字符发生器)及用户自定义的字符发生器CGRAM全部内藏在芯片内。全部内藏在芯片内。 HD44780有有80个字节的显示缓冲区,分两行,地个字节的显示缓冲区,分两行,地址分别为址分别为00H27H,40H67H,它下实际显示位,它下实际显示位置的排列顺序跟置的排列顺序跟LCD的型号有关,液晶显示模块的型号有关,液晶显示模块RT-1602C的显示地址与实际显示位置的关系如图的显示地址与实际显示位置的关系如图所示。所示。4、HD44780具有具有8位数据和位数据和4位数据位数据传输两种方式,传输两种方式,可与可与4/8位位CPU相连。相连。5、HD44780具有简

14、单而功能较强的指令集,可实现具有简单而功能较强的指令集,可实现字符移动,闪烁等显示功能。字符移动,闪烁等显示功能。 HD44780内部的字符发生存储器(内部的字符发生存储器(ROM)已经存储了)已经存储了160个个不同的点阵字符图形,如图所示:不同的点阵字符图形,如图所示: 这些这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等和日文假名等,每一个字符都有一个固定的代码。比如数字,每一个字符都有一个固定的代码。比如数字“1”的代码是的代码是00110001B(31H),又如大写的英文字母),又如大写的英文字母“A”的代码是的代码

15、是01000001B(41H),可以看出英文字母的代码与),可以看出英文字母的代码与ASCII编码相同。要显示编码相同。要显示“1”时,只需将时,只需将ASCII码码31H存入存入DDRAM指定位置,显示模块将在相应的位置把数字指定位置,显示模块将在相应的位置把数字“1”的的点阵字符图形显示出来,点阵字符图形显示出来,就可以看到数字就可以看到数字“1”。三指令格式与指令功能三指令格式与指令功能LCD控制器控制器HD44780内有多个寄存器,通过内有多个寄存器,通过RS和和R/W引脚共同决定选择哪一个寄存器,选择情况引脚共同决定选择哪一个寄存器,选择情况如表:如表:/R WRS寄存器及操作寄存器

16、及操作00指令寄存器写指令寄存器写入入01忙标志和地址忙标志和地址计数器读出计数器读出10数据寄存器写数据寄存器写入入11数据寄存器读数据寄存器读出出总共有总共有11条指令,它们的格式和功能如下:条指令,它们的格式和功能如下:RS和和 引脚上的电平决定对寄存器的选择和读引脚上的电平决定对寄存器的选择和读/写,写,DB7DB0决定命令功能。决定命令功能。/R W9.2.3 RT1602C与单片机接口及程序与单片机接口及程序图9-3是RT1602C与单片机接口的具体连接方式,RT1602C液晶连接插槽位JP4。在使用液晶时,在第三引脚连接了一个10K的电位器用来调整对比度,若程序运行后液晶无显示,

17、则可调整此电位器。图图9-3 16029-3 1602与单片机接口与单片机接口 1602液晶模块的驱动程序编制如下:(功能为:用定时器实现一个时钟,并用1602液晶模块显示时间及提示信息,从中读者可以体会液晶驱动程序的编制方法).#include#define uchar unsigned char#define uint unsigned int sbit rs = P36 ; /定义寄存器选择位sbit rw = P37 ; /定义读写控制线sbit ep = P27 ; /定义使能端code uchar mayuan =0,1,2,3,4,5,6,7,8,9;code uchar aa

18、=The total times is: ;uchar i,hour,minute,second,k=0;void putchar(uchar weizhi,uchar da);/显示一个字符的函数void delay(uchar) ; /延时函数void lcd_wcmd(uchar) ; / 写入指令数据到LCDbit lcd_bz(void) ; / 测试LCD忙碌状态void lcd_pos(uchar) ; /设定显示位置void lcd_wdat(uchar) ; /写入字符显示数据到LCDvoid display(uchar,uchar *) ; /显示一个字符串的函数void

19、lcd_init(void); /液晶初始化函数void showtime(uchar,uchar,uchar);/显示时间函数void time_init(void); /定时时间初始化函数main() delay(10) ; lcd_init() ; / 初始化LCD time_init(); /定时器初始化display(0 x00,aa); /第一行显示The total times is: while(1) if(k!=second) /控制每一秒显示一次 k=second;showtime(hour,minute,second); void delay(uchar ms) / 延时

20、子程序 uchar i ; while(ms-) for(i = 0 ; i250;i+) ; bit lcd_bz() / 测试LCD忙碌状态 bit result ; rs = 0 ; rw = 1 ; ep = 1 ; result = (bit)(P0 & 0 x80) ;ep = 0 ; return result ; void lcd_wcmd(uchar cmd) / 写入指令数据到LCD while(lcd_bz() ; /等待液晶空闲rs = 0 ;rw = 0 ;ep = 0 ;P0 = cmd ;ep = 1 ;ep = 0 ; void lcd_pos(ucha

21、r pos) /设定显示位置 lcd_wcmd(pos | 0 x80) ;void lcd_wdat(uchar dat) /写入字符显示数据到LCD while(lcd_bz() ; /等待液晶空闲rs = 1 ; rw = 0 ; ep = 0 ; P0 = dat ; ep = 1 ; ep = 0 ; void lcd_init() /LCD初始化设定 lcd_wcmd(0 x38) ; /功能设置:4位总线,双行显示,5x7的点阵字符(参指令6) delay(1) ; lcd_wcmd(0 x01) ; /清除LCD的显示内容(参指令1) delay(1) ; lcd_wcmd(0

22、 x06) ; /入口模式设置:光标右移,文字不移(参指令3) delay(1) ; lcd_wcmd(0 x0c) ; /入口模式设置:开显示,无光标,光标不闪烁(参指令4) delay(1) ;/*以下是在LCD上显示数组数据的函数。先写显示地址,后写显示数据。其中pos 为写入的位置,q指向要写入的数据所在的数组*/void display(uchar pos, uchar *q) uchar i ; lcd_pos(pos) ; for(i=0 ;i16;i+) lcd_wdat(*q) ; q+ ; void putchar(uchar weizhi,uchar da) /在weiz

23、hi处显示字符dadelay(1);lcd_pos(weizhi);lcd_wdat(da);void showtime(uchar h,uchar m,uchar s)/显示时间(h:小时,m:分,s:秒) putchar(0 x40,mayuanh/10); /在位置0 x40显示小时的高位 putchar(0 x41,mayuanh%10); /在位置0 x41显示小时的低位 putchar(0 x42,:); /在位置0 x42显示“:” putchar(0 x43,mayuanm/10); /在位置0 x43显示分的高位 putchar(0 x44,mayuanm%10); /在位置

24、0 x44显示分的低位 putchar(0 x45,:); /在位置0 x45显示“:” putchar(0 x46,mayuans/10); /在位置0 x46显示秒的高位 putchar(0 x47,mayuans%10); /在位置0 x47显示秒的低位void time_init(void) /定时器初始化函数 i=0;hour=12;minute=34;second=56; /时间初值为12时34分56秒TMOD=0 x01;TL0=0 xb0; /赋初值,定时50msTH0=0 x3c;TR0=1; /启动定时器EA=1; ET0=1; /相关开中断 void time0() in

25、terrupt 1 using 2 /定时器0中断函数,实现定时1秒及时间的计算 TL0=0 xb0; /重新赋初值 TH0=0 x3c; i+; if(i=20) /1秒钟到 second+;i=0; if(second=60) second=0; minute+; if(minute=60) minute=0; hour+; if(hour=24) hour=0;9.1.2 LCD显示器与单片机的接口与应用显示器与单片机的接口与应用 下图是下图是LCD显示器与显示器与8051单片机的接口图,图中单片机的接口图,图中RT-1602C的数据线与的数据线与8051的的P1口相连,口相连,RS与与

26、8051的的P2.0相连,相连,与与8051的的P2.1相连,相连,E端与端与8051的的P2.2相连。编程在相连。编程在LCD显示器的第一行、第一列开始显示显示器的第一行、第一列开始显示“GOOD”,第二行、,第二行、第第6列开始显示列开始显示“BYE”。 #include sbit RS=P20; sbit RW=P21; sbit E=P22; void delay(void); void init(void); void wcmd(unsigned char); void wdat(unsigned char); void fbusy(void); void main( ) /主函数主

27、函数 SP=0 x50; init( ); wcmd(0 x80); /写入显示缓冲区起始地址为第写入显示缓冲区起始地址为第1行第行第1列列 wdta(0 x44); /第第1行第行第1列显示字母列显示字母“G” wdat(0 x4f); /第第1行第行第2列显示字母列显示字母“O” wdat(0 x4f); /第第1行第行第3列显示字母列显示字母“O” wdat(0 x47); /第第1行第行第4列显示字母列显示字母“D” 【80H45HC5H】 wcmd(0 xc5); /写入显示缓冲区起始地址为第写入显示缓冲区起始地址为第2行第行第6列列 wdat (0 x42); /第第2行第行第6列

28、显示字母列显示字母“B” wdat (0 x59); /第第2行第行第7列显示字母列显示字母“Y” wdat (0 x45); /第第2行第行第8列显示字母列显示字母“E” while(1); void init() / 初始化函数,主要写命令初始化函数,主要写命令wcmd(0 x01); /01H=0000 0001,清屏,清屏wcmd(0 x38); /38H=0011 1000,使用,使用8位,显示两行,用位,显示两行,用5*7的字型的字型wcmd(0 x0e); /0eH0000 1110,显示器开,光标开,字符不闪烁,显示器开,光标开,字符不闪烁wcmd(0 x06); /06H00

29、00 0110,字符不动,光标自动右移一格,字符不动,光标自动右移一格/R WRS寄存器及操作00指令寄存器写入写入01忙信号和地址计数器读读出出10数据寄存器写入写入void fbusy( ) /检查忙函数检查忙函数RS=0;RW=1; /RS=0,RW=1,读忙信号,读忙信号E=1;E=0; / E端由高电平到低电平跳变,液晶模块执行命令端由高电平到低电平跳变,液晶模块执行命令while (P1&0 x80); /如果忙,则等待。参见忙指令格式如果忙,则等待。参见忙指令格式delay( ); / 延时大约延时大约2ms由于由于LCD是一慢速显示器件,所以在执行每条指令之前一定要确认

30、是一慢速显示器件,所以在执行每条指令之前一定要确认LCD的忙标的忙标志为志为0,即非忙状态,否则该命令将失效。,即非忙状态,否则该命令将失效。void wcmd(unsigned char cmd) /写命令函数写命令函数, RS=0;RW=0fbusy( ); / 写命令前,先检查设备是否忙?写命令前,先检查设备是否忙?E=0;RS=0;RW=0; / 指令寄存器写入指令寄存器写入E=1; / E由高电平到低电平跳变,液晶模块执行命令由高电平到低电平跳变,液晶模块执行命令P1=cmd; / 命令由命令由P1口送入口送入LCDE=0;delay( );void wdat(unsigned ch

31、ar dat) /写数据函数写数据函数, RS=1;RW=0 fbusy( ); / 写数据前,先检查设备是否忙? E=0;RS=1;RW=0; E=1; / E由高电平到低电平跳变,液晶模块执行命令 P1=dat; / 数据由P1口送入LCD E=0; delay( ); / 延时大约2msvoid delay( ) /延时函数延时函数 unsigned char y; for (y=0;y255;y+); / 【大约2ms多一点】 #include #include #define uchar unsigned char #define uint unsigned int sbit RS

32、= P20; sbit RW = P21; sbit EN = P22; void Delayms(uint ms) / 延时延时“ms”毫秒毫秒 unsigned char i;while(ms-)for(i=0;i120;i+); uchar Busy_Check()unsigned char LCD_Status;RS = 0;RW = 1; / 读忙状态读忙状态, RS=0;RW=1EN = 1;Delayms(1); / 延时1msLCD_Status = P0;EN = 0; / EN由高电平到低电平跳变,液晶模块执行命令return LCD_Status;void Write_L

33、CD_Command(uchar cmd) while(Busy_Check()&0 x80)= =0 x80);RS = 0; RW = 0; /写命令写命令, RS=0;RW=0EN = 0;P0 = cmd;EN = 1;Delayms(1);EN = 0;void Write_LCD_Data(uchar dat) while(Busy_Check()&0 x80)=0 x80);RS = 1;RW = 0; /写数据写数据, RS=1;RW=0EN = 0;P0 = dat;EN = 1;Delayms(1);EN = 0;void Initialize_LCD()

34、Write_LCD_Command(0 x38); / 0011 1000,8位,显示两行,用5*7的字型Delayms(1);Write_LCD_Command(0 x01); /00000001,清屏Delayms(1);Write_LCD_Command(0 x06); /0000 0110,字符不动,光标自动右移一格Delayms(1);Write_LCD_Command(0 x0c); / 0000 1100,开显示,无光标,字符不闪烁Delayms(1);void ShowString(uchar x,uchar y,uchar *str) uchar i = 0;if(y = 0

35、)Write_LCD_Command(0 x80 | x);if(y = 1)Write_LCD_Command(0 xc0 | x);for(i=0;i16;i+) Write_LCD_Data(stri); /* writer:shopping.w */ #include #include #define uchar unsigned char #define uint unsigned int void Initialize_LCD(); void ShowString(uchar,uchar,uchar *); sbit K1 = P30; sbit K2 = P31; sbit K3

36、 = P32; uchar code Prompt=PRESS K1-K4 TO START DEMO PROG; uchar const Line_Count = 6; uchar code Msg80= Many CAD users dismiss,process of creating PCB,of view.with PCB layout,placement and track routing,can often be the most time,And if you use circuit simulation,you are going to spend even more ; uchar Disp_Buffer3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论