




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 &a
19、mp; 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(
20、0 x01,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(
21、X, 0); /这里不检测忙信号,发送地址码 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显示1
22、6个字符 while (ListLength=0 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-) T
23、empCycB=7269; while(TempCycB-); ;例例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
24、,unsigned char *s);/功能描述: 短暂延时,使用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; LC
25、D_RS=0; LCD_RW=0; LCD_E=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); /显示开及光标移动设置
26、/功能描述: 设置光标位置, x是列号,y是行号void display_xy(unsigned char x,unsigned char y) if(y=1) x=x+0 x40; x=x+0 x80; WriteCommandLcd(x);/功能描述: 在具体位置显示单个字符,x是列号,y是行号 void display_char(unsigned char x,unsigned char y,unsigned char dat) display_xy(x,y); WriteDataLcd(dat);/功能描述: 在具体位置显示字符串,字符串是以/0代表结束的,x是列号,y是行号void
27、display_string(unsigned char x,unsigned char y,unsigned char *s) char n=0; if(y1) y=1; display_xy(x,y); while(*(s+n) /若到达字符串尾则推出 if(x=16) /第一行超出则在第二行继续写 display_xy(x-16,1); if(x=32) /写满两行则退出return; WriteDataLcd(*(s+n); n+; x+; void main() lcd_init();/液初始化 display_string(0,0,I Will Always Love You!);
28、/显示 while(1);/停止11.2 液晶液晶LCD12232 HS12232-9内置ST7920A驱动控制器,点阵为 12232点,每行7个半汉字,共2行。内部字型ROM 包括8192个1616点阵的中文字型和126个168点阵的字母符号字型,另外还提供一个64256点的绘图区域(GDRAM)及240点的 ICON RAM,可以和文字画面混合显示。内含的CGRAM有4组可编程的16X16点阵的造字功能。与单片机的接口有8位并行、4位并行、2/3线串行。它采用低功率电源消耗,电压范围2.75.5V,功能齐全,汉字、点阵图形、ASCII码、曲线同屏显示;上下左右移动当前显示屏幕、清屏、光标显
29、示、闪烁、睡眠、唤醒、关闭显示功能齐备,适合许多场合应用。它内置8192个16*16点汉字库和128个16*8点ASCII字符集图形点阵液晶显示器,它主要由行驱动器/ 列驱动器及12832全点阵液晶显示器组成。可完成图形显示,也可以显示7.52个(1616点阵)汉字.与外部CPU接口采用并行或串行方式控制。本文介绍点阵式液晶显示器HS12232-9和它与单片机的接口及编程的方法,同时给出显示器常用的字符显示和汉字显示程序。11.2.1 液晶驱动液晶驱动IC基本特性基本特性 1.具有低功耗、供应电压范围宽等特点。2.具有串行和并行输出,并可外接驱动IC扩展驱动。3.具有2560位显示RAM(DD
30、 RAM),即8084位 4.具有与68系列或80系列相适配的MPU接口功能,并有专用的指令集,可完成文本显示或图形显示的功能设置5.视域尺寸:,60.518.0mm(12232-1/-2),54.818.3mm(12232-3)6.显示类型:黄底黑字7.LCD显示角度:6点钟直观8.驱动方式:1/32 duty(功率比),1/6 bias(偏压比)9.连接方式:导电胶条,铁框10.补充说明:模块外观尺寸可根据用户的要求进行适度调整。11.2.2 工作参数电气特性工作参数电气特性(测试条件测试条件 Ta=25,Vdd=5.00.25V)1、逻辑工作电压(VDD-VSS):2.46.0V2、LC
31、D驱动电压(Vdd-Vlcd):3.013.5V3、工作温度(Ta):055(常温) / -2070(宽温)4、保存温度(Tstg):-10701、输入高电平(Vih):3.5Vmin 2、输入低电平(Vil):0.55Vmax 3、输出高电平(Voh):3.75Vmin 4、输出低电平(Vol):1.0Vmax5、工作电流:2.0mAmax11.2.3 接口说明接口说明 11.2.4 LCD12232管脚说明管脚说明1.VDD:逻辑电源正2.GND(VSS): 逻辑电源地3.VLCD(VEE,V0):LCD驱动电源4.RET:复位端,对于68系列MPU:上升沿(L-H)复位,且复位后电平须保
32、持为高电平(H);对于80系列MPU:下降沿(H-L)复位,且复位后电平须保持为低电平(L)。5.CS1:读写使能。对于68系列MPU,连接使能信号引脚,高电平有效;对于80系列MPU,连接/RD引脚,低电平有效。6.CS2:使能端。7./RD:读允许,低电平有效。 8./WR:写允许,低电平有效。9.R/W:读写选择,对于68系列MPU,高电平时读数据,低电平时写数据;对于80系列MPU,低电平时允许数据传输,上升沿时锁定数据。10.A0:数据/指令选择。高电平:数据D0-D7将送入显示RAM;低电平:数据D0-D7将送入指令执行器执行。11.D0-D7:数据输入输出引脚。11.2.5 指令
33、描述指令描述 1. 显示模式设置R/WA0 /RD/WRD7D6D6D4D3D2D1D00101010111D功能:开/关屏幕显示,不改变显示RAM(DD RAM)中的内容,也不影响内部状态。D=0,开显示;D=1,关显示。如果在显示关闭的状态下选择静态驱动模式,那么内部电路将处于安全模式。 2. 设置显示起始行 R/WA0 /RD/WRD7D6D6D4D3D2D1D0010110A4A3A2A1A0功能:执行该命令后,所设置的行将显示在屏幕的第一行。起始地址可以是0-31范围内任意一行。行地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。 3. 页地址设置 R/WA0
34、/RD/WRD7D6D6D4D3D2D1D0010HLHHHLA1A0功能:设置页地址。 当“读-修改-写模式”关闭时,每执行一次读指令,列地址自动加1,所以可以连续从DD RAM读出数据而不用设置列地址。 注意:再设置完列地址后,首次读显示数据前必须执行一次空的“读显示数据”。这是因为设置完列地址后,第一次读数据时,出现在数据总线上的数据是列地址而不是所要读出的数据。 8. 设置显示方向设置显示方向 功能:使模块内部初始化。 初始化内容:设置显示初始行为第一行; 页地址设置为第三页。复位指令对显示RAM没有影响。 14 设置安全模式通过关闭显示并打开静态显示的方法,可以设置安全模式,以减小功
35、耗。安全模式下的内部状态:停止LCD驱动。Segment和Common输出VDD电平。停止晶体震荡并禁止外部时钟输入,晶振输入OSC2引脚处于不确定状态。显示数据和内部模式不变。可通过打开显示或关闭静态显示的方法关闭安全模式。11.2.6 LCD12232指令码功能表指令码功能表LCD12232指令码功能表如表11-4所示。表表11-4 LCD12232指令码功能表指令码功能表 11.2.7 LCD12232应用举例应用举例例11.3 用C51编程,实现在12232液晶的第一行显示“Big Big World!”第二行显示“世界无限大!”。#include#define uint unsign
36、ed int #define uchar unsigned charsbit CS=P12;sbit SID=P11;sbit SCLK=P10;uchar code disps=Big Big World!;uchar code dispx=世界无限大!;void delay(uint xms)uint i,j;for(j=0;jxms;j+)for(i=0;i110;i+);void send_command(uchar command_data) /命令发送uchar i;uchar i_data;i_data=0 xf8; /写指令CS=1;SCLK=0;for(i=0;i8;i+)
37、/第1字节SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_data1;i_data=command_data;i_data&=0 xf0;for(i=0;i8;i+) /第2字节SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_data1;i_data=command_data;i_data=4;for(i=0;i8;i+) /第3字节SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_data1;CS=0;delay(10);vo
38、id send_data(uchar command_data) /数据发送uchar i;uchar i_data;i_data=0 xfa; /写数据CS=1;for(i=0;i8;i+) /第1字节SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_data1;i_data=command_data;i_data&=0 xf0;for(i=0;i8;i+) /第2字节SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_data1;i_data=command_data;i_data
39、=4;for(i=0;i8;i+) /第3字节SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_data1;CS=0;delay(10);void init()delay(100);send_command(0 x06);/游标及显示右移一位send_command(0 x0c);/整体显示开,游标关,反白关send_command(0 x01);/写入空格清屏幕send_command(0 x80);/设定首次显示位置void display_s()uchar a;send_command(0 x80);for(a=0;a11;a+)sen
40、d_data(dispsa);void display_x()uchar a;send_command(0 x92);for(a=0;a11;a+)send_data(dispxa);void main()init();display_s();display_x();while(1);程序说明:1、发送命令和发送数据分别用send_command( )和send_data( )函数实现,由前面的描述可知,无论是发送一条命令还是发送一条数据都是由三个字节组成,若发送指令则第一个字节为0 xf8,若发送数据则第一个字为0 xfa,从上面两个函数可看出,它们的不同之处。2、“SID=(bit)(i_
41、data&0 x80)”中(bit)表示将后面括号里的数强制转换成位,当把一个字节强制转换成一位时,使用(bit),这里只取这个字节的最高位。整条语句的意思是,将i_data的最高位取出来赋给SID,从而发送给液晶。3、“i_data=command_data;”和“i_data&=0 xf0;”这两句的意思是,将所发送字节的高4位取出,低4位补0。“i_data=command_data;”和“i_data4;”这两句的意思是,将所发送的低4位移到高4位的位置上,原来的低4位自动补0。 4、“lcd_init();”是对12232液晶的初始化设置,只有对液晶进行了正确的初始化
42、设置,液晶才能正常运行。例例11.4 用C51编程,实现第一行从右侧移入“You are not alone!”,同时第二行从右侧移入“你并不孤独!”,移入速度自定,最后停留在屏幕上。#include#define uint unsigned int #define uchar unsigned charsbit CS=P12;sbit SID=P11;sbit SCLK=P10;uchar code disps=You are not alone!;uchar code dispx=你并不孤独!;void delay(uint xms)uint i,j;for(i=xms;i0;i-)for
43、(j=110;j0;j-);void send_command(uchar command_data)uchar i;uchar i_data;i_data=0 xf8;CS=1;SCLK=0;for(i=0;i8;i+)SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_data1;i_data=command_data;i_data&=0 xf0;for(i=0;i8;i+)SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_data1;i_data=for(i=0;i8;i+)SI
44、D=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_data1;CS=0;delay(1);void send_data(uchar command_data)uchar i;uchar i_data;i_data=0 xfa;CS=1;for(i=0;i8;i+)SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_data1;i_data=command_data;i_data&=0 xf0;for(i=0;i8;i+)SID=(bit)(i_data&0 x80);SCLK=0;
45、SCLK=1;i_data=i_data1;i_data=command_data;i_data=4;for(i=0;i8;i+)SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_data1;CS=0;delay(1);void lcd_init()delay(100);send_command(0 x30); /设置8位数据口,基本指令模式send_command(0 x02); /清DDRAMsend_command(0 x06); /游标及显示右移一位send_command(0 x0c); /整体显示开,游标关,反白关send_com
46、mand(0 x01); /写入空格清屏幕 send_command(0 x80); /设定首次显示位置void display_s(uchar num)uchar a;send_command(0 x88-num);for(a=0;a15;a+)send_data(dispxa);void display_x(uchar num)uchar a;send_command(0 x98-num);for(a=0;a15;a+)send_data(dispxa);void main()uchar aa;lcd_init();for(aa=0;aa9;aa+)display_s(aa);displa
47、y_x(aa);delay(300);while(1);程序说明: 1. 由于12232液晶没有专门的移屏指令,因此我们使用for循环来实现移屏效果,实际上这种效果是重复向不同的地方写入显示字符而实现的。用这种方法看上去是从右往左移动,也可以从左向右移动。2. Delay(300)延时函数决定屏幕移动的速度,自行调节。11.3 液晶显示器LCD1286411.3.1 液晶LCD12864显示模块概述JM12864M-2汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。 主要技术参数和显示
48、特性: 1.电源:VDD 3.3V+5V(内置升压电路,无需负压); 2.显示内容:128列 64行 3.显示颜色:黄绿4.显示角度:6:00钟直视 5.LCD类型:STN 6.与MCU接口:8位或4位并行/3位串行 7.配置LED背光 8.多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等 9.外观尺寸:937012.5mm 视域尺寸:7339mm 如图11-10和图11-11所示。 11.3.2 LCD1286411.3.2 LCD12864模块引脚说明模块引脚说明 LCD LCD128X64HZHZ引脚说明表如表引脚说明表如表11-5所示。所示。表表11-5 LCD128X64HZ
49、引脚说明表引脚说明表 逻辑工作电压(VDD):4.55.5V电源地(GND):0V工作温度(Ta):-10 60(常温) / -2070(宽温)11.3.3 LCD12864接口时序 模块有并行和串行两种连接方法(时序如下)。1. 并行连接时序图1)MPU写资料到模块如图11-12所示。 图11-14 串行连接时序图串行数据传送共分三个字节完成:第一字节:串口控制格式 11111ABC A为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCD B为数据类型选择:H表示数据是显示数据,L表示数据是控制指令 C固定为0第二字节:(并行)8位数据的高4位格式 DDDD0000第三
50、字节:(并行)8位数据的低4位格式 0000DDDD11.3.4 LCD12864用户指令集 1. 指令表1:(RE=0:基本指令集) 备注: 1. 当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。2. “RE”为基本指令集与扩充指令集的选择控制位元,当变更“RE”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE”位元,否则使用相同指令集时,不需每次重设“RE
51、”位元。具体指令介绍:1、清除显示功能:把DDRAM地址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。4、显示状态 开/关 文本显示RAM提供4行(每行8个)的汉字空间,当写入文本显示RAM时,可以分别显示CGROM、HCGROM与CGRAM的字型;ST7920A可以显示三种字型 ,分别是半宽的HCGROM字型、CGRAM字型及中文CGR
52、OM字型。三种字型的选择,由在DDRAM中写入的编码选择,各种字型详细编码如下: 1) 显示半宽字型 :将一位字节写入DDRAM中,范围为02H-7FH的编码。 2) 显示CGRAM字型:将两字节编码写入DDRAM中,总共有0000H,0002H,0004H,0006H四种编码 3) 显示中文字形:将两字节编码写入DDRAMK ,范围为A1A0H-F7FFH(GB码)或A140H-D75FH(BIG5码)的编码。2. 绘图RAM(GDRAM)绘图显示RAM提供1288字节的记忆空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个字节的数据到绘图RAM,而地址计数器(AC)会自动加
53、一;在写入绘图RAM的期间,绘图显示必须关闭,整个写入绘图RAM的步骤如下:1) 关闭绘图显示功能。2) 先将水平的位元组坐标(X)写入绘图RAM地址;3) 再将垂直的坐标(Y)写入绘图RAM地址;4) 将D15D8写入到RAM中;将D7D0写入到RAM中;5) 打开绘图显示功能。6) 绘图显示的缓冲区对应分布请参考“显示坐标”7) 游标/闪烁控制ST7920A提供硬件游标及闪烁控制电路,由地址计数器(address counter)的值来指定DDRAM中的游标或闪烁位置。11.3.7 LCD12864应用举例应用举例例11-5 如图11-15所示,用C编写程序,在LCD12864上显示“中山
54、大学”四个字。 /函数库名称:12864显示函数 #include#include#include#define uchar unsigned char#define uint unsigned int#define PORT P0sbit CS1=P24; /左半屏片选脚sbit CS2=P23; /右半屏片选脚sbit RS=P22; /H代表数据输入,L代表指令码输入sbit RW=P21; /H读取,L写入sbit E=P20; /使能,由H到L完成使能sbit bflag=P07; /忙标志位uchar code Num=0 x00,0 x20,0 x60,0 xE0,0 xE0,0
55、 xE0,0 xF0,0 xFC,0 xFF,0 xFC,0 xF0,0 xE0,0 xE0,0 xE0,0 x60,0 x20,0 x00,0 x00,0 x40,0 x30,0 x3D,0 x1F,0 x1F,0 x0F,0 x07,0 x0F,0 x1F,0 x1F,0 x3D,0 x30,0 x40,0 x00, /星号0 x00,0 xf8,0 x08,0 x08,0 x08,0 x08,0 x08,0 xff,0 x08,0 x08,0 x08,0 x08,0 x08,0 xfc,0 x08,0 x00,0 x00,0 x03,0 x01,0 x01,0 x01,0 x01,0 x
56、01,0 xff,0 x01,0 x01,0 x01,0 x01,0 x01,0 x03,0 x00,0 x00, /中0 x00,0 xf0,0 x00,0 x00,0 x00,0 x00,0 x00,0 xff,0 x00,0 x00,0 x00,0 x00,0 x00,0 xf0,0 x00,0 x00,0 x00,0 x7f,0 x20,0 x20,0 x20,0 x20,0 x20,0 x3f,0 x20,0 x20,0 x20,0 x20,0 x20,0 x7f,0 x00,0 x00, /山0 x20,0 x20,0 x20,0 x20,0 x20,0 x20,0 xa0,0 x
57、7f,0 xa0,0 x20,0 x20,0 x20,0 x20,0 x30,0 x20,0 x00,0 x00,0 x40,0 x40,0 x20,0 x10,0 x0c,0 x03,0 x00,0 x01,0 x06,0 x08,0 x10,0 x20,0 x60,0 x20,0 x00, /大0 x40,0 x30,0 x11,0 x96,0 x90,0 x90,0 x91,0 x96,0 x90,0 x90,0 x98,0 x14,0 x13,0 x50,0 x30,0 x00,0 x04,0 x04,0 x04,0 x04,0 x04,0 x44,0 x84,0 x7e,0 x06,
58、0 x05,0 x04,0 x04,0 x04,0 x06,0 x04,0 x00, /学;/*驱动函数* void Left()/选左半屏 CS1=0; CS2=1;void Right()/选右半屏 CS1=1; CS2=0;void Busy_12864()/判忙函数 do E=0; RS=0; /读状态 RW=1; PORT=0 xff; E=1; E=0; while(bflag); /若bflag=1则代表系统忙void Wreg(uchar c)/写指令Busy_12864();RS=0;RW=0;PORT=c;E=1; /E下降沿,液晶模块从数据总线写入指令E=0;void W
59、data(uchar c)/写数据Busy_12864();RS=1;RW=0;PORT=c;E=1;E=0;void Pagefirst(uchar c)/页设置/LCD12864一共可以画32个字,4行,每行8个字,左半屏4个,右半屏4个;/每个字占2页,第0页显示上半字,第1页显示下半字,画1个字是16X16个点;/8小行为一页,DDRAM共64小行,即8页,Page0-7,所以只能显示4行汉字 uchar i;i=c;c=i|0 xb8;/实际页数和b8(即10111000B)的或运算就是要送的代码,逻辑加法Busy_12864();Wreg(c);void Linefirst(uch
60、ar c)/列设置,Y=0-63,左右半屏各64列uchar i;i=c;c=i|0 x40;/实际列数和40H(即01000000B)的或运算就是要送的代码Busy_12864();Wreg(c);/*清屏函数* void Ready_12864() uint i,j; Left(); Wreg(0 x3f);/左屏开显示;0 x3e为关显示的控制字 Right(); Wreg(0 x3f);/右屏开显示;0 x3f为开显示的控制字 Left();/清左屏 for(i=0;i8;i+) Pagefirst(i); Linefirst(0 x00); for(j=0;j64;j+) Wdata(0 x00); Right();/清右屏 for(i=0;i8;i+) Pagefirst(i);Linefirst(0 x00); for(j=0;j64;j+) Wda
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乐器清洁保养考核试卷
- 2024年行政管理师考试中的解题策略试题及答案
- 行政管理师考前心理预备试题及答案
- 2025年【湖南省汽车修理工(中级)】考试题及答案
- 索道制动系统设计与优化考核试卷
- 材料科学与工程基础考核试卷
- 矿产勘查经济学考核试卷
- 糖果与巧克力产品创新设计考核试卷
- 路基工程挖土施工方案
- 花艺师个人创意题目及答案
- 机械原理课程设计-自动盖章机
- 长螺旋钻桩施工记录
- 中医内科临床诊疗指南-肺动脉高压
- 三氯化硼-安全技术说明书MSDS
- 常用的饲料加工设备图形符号
- GB∕T 28575-2020 YE3系列(IP55)三相异步电动机技术条件(机座号63~355)
- 《通过感官来发现》PPT
- 施工临时便桥、便道安全要求内容
- 40篇短文搞定高考英语3500词(共42页)
- 轮式挖掘机的驱动桥壳工艺设计1
- 事业单位工作人员奖励审批表--实用
评论
0/150
提交评论