单片机原理和应用-KFIL-C项目教程项目七-液晶显示器及其应用PPT资料106页课件_第1页
单片机原理和应用-KFIL-C项目教程项目七-液晶显示器及其应用PPT资料106页课件_第2页
单片机原理和应用-KFIL-C项目教程项目七-液晶显示器及其应用PPT资料106页课件_第3页
单片机原理和应用-KFIL-C项目教程项目七-液晶显示器及其应用PPT资料106页课件_第4页
单片机原理和应用-KFIL-C项目教程项目七-液晶显示器及其应用PPT资料106页课件_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

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

文档简介

1、项目七 液晶显示器及其应用 7.1 项目说明 7.2 基础知识 7.3 项目实施 7.4 项目评价 7.5 拓展与提高7.1 项 目 说 明 项目任务在液晶显示器LCD1602的第一行居中显示“99 s倒计时”,第二行居右显示“WE LOVE dpj”。 知识培养目标(1) 掌握液晶显示器的特点、分类、命名方法。(2) 掌握存储器DDRAM、CGROM的作用。(3) 掌握液晶显示器的常用指令,并对其进行正确的初始化。(4) 掌握字符、字符串的显示方法。(5) 掌握定时/计数器与液晶显示器的综合应用。 能力培养目标(1) 能利用所学知识正确地选择元器件。(2) 能利用所学知识画出实现该任务的原理

2、图。(3) 能利用KEIL C建立工程文件,并进行调试。7.2 基 础 知 识7.2.1 液晶显示器概述液晶是一种高分子材料,具有特殊的物理、化学、光学特性,利用液晶的这些特点可制成液晶显示器(简称为LCD),它的主要原理是以电流刺激液晶分子产生点、线、面并配合背光灯显示信息。液晶显示器以其体积小、微功耗、操作简单、显示信息量大等特点,在低功耗显示领域得到了越来越广泛的应用。液晶显示器根据显示方式分为字符型液晶和图形型液晶。字符型液晶一般只能显示ASCII码字符,如数字、大小写字母、各种符号等;图形型液晶主要用于显示汉字及各种图形,也可显示ASCII码。液晶显示器一般是根据显示字符的行数或构成

3、液晶点阵的行数、列数进行命名。例如,字符型液晶显示器1602的含义就是可以显示两行,每行显示16个字符。类似地命名还有1601、0802、2019等。图形型液晶12232表示液晶由122列32行组成,共有12232个光点,通过控制其中任意一个光点显示或不显示构成所需的画面。类似地命名还有12864、192128、320240等。液晶显示器的驱动简单、灵活,用户可根据需要选择并口或串口驱动。7.2.2 LCD1602简介1. LCD1602的特点LCD1602是最常用的一种字符型液晶显示器,共16个引脚,电源电压为5 V,带背光,两行显示,每行16个字符,即每屏最多显示32个字符,一般不用于显示

4、汉字,内置128个ASCII字符集。常用两种显示形式,一是在液晶的任意位置显示字符或字符串;二是字符或字符串的滚动显示。市场上的LCD1602多采用并口驱动,图7-1和图7-2所示为并口LCD1602的正面和反面。图7-1 液晶显示器1602的正面图 图7-2 液晶显示器1602的反面图 2. LCD1602的引脚 LCD1602共有16个引脚,引脚图如图7-3所示。各引脚名称及功能如下。(1) 电源。VCC电源正,+5 V。GND电源地。BLA背光电源正极。BLK背光电源负极。(2) 并行数据口。DB7DB08位数据口。图7-3 LCD1602引脚图(3) 控制引脚。VL液晶显示器对比度调节

5、端,此端通常接电位器的调节端;不需调节时可接地。RS数据/指令选择端(H/L)。当RS=0时,选择指令,DB7DB0上的指令码将送入指令寄存器存放;当RS=1时,选择数据,DB7DB0上显示字符的ASCII码将存入DDRAM中某一单元。R/读写选择端(H/L)。当R/=0时,写操作;当R/=1时,读操作。E使能端。3. LCD1602 DDRAM地址映射图 显示存储器DDRAM主要用于存放待显示字符在CGROM中的编码即ASCII码。也就是说,LCD1602显示屏上的32个显示位置与DDRAM中的32个单元一一对应,在LCD1602上某个位置显示字符就是将该字符的ASCII码存入DDRAM存储

6、器的对应单元。DDRAM的容量为80字节,这80个字节分两行,每行40字节,最多存储两屏半字符,其地址与LCD1602显示屏的对应关系如图7-4所示。图7-4 LCD1602液晶DDRAM地址映射图 由图7-4可知,只有将显示字符写入第一行地址为00H0FH、第二行地址为40H4FH这32个单元时,才能直接在显示屏上显示出来。例如,要在第一行第三列显示“H”,需要将“H”的ASCII码写入DDRAM中地址为02H的单元中(实际上编程时指令码为80H+02H,这是由LCD指令8所决定的);写入指令码为80H+40时,字符则会显示在第二行第一列。写入第一行地址为10H27H、第二行地址为50H67

7、H单元中的显示字符,必须通过LCD1602的移屏指令(LCD指令3或指令5)将其移入可显示区域后才能显示出来。DDRAM的地址存于地址指针中,每进行一次读或写操作,地址指针可自动加1或减1,是加1还是减1通过LCD1602的指令3进行设置,这为字符串的显示带来方便。4. LCD1602 CGROMCGROM存储器中固化了128个常用字符的字模,每个字模都有固定的编码即它的ASCII码,主要用于显示常用字符;CGRAM存储器的64个字节用于存放用户自定义的8组58点阵字模,字模的代码为07,主要用于显示简单汉字或图形。 图7-5 58点阵字模LCD1602由32个58点阵组成,每个58点阵可以显

8、示一个字符,点阵之间有一段空的间隔起到了字符间距和行间距的作用。常用的1601、8002等字符型液晶显示器都是相同的原理,它们虽然显示的行数、字数不尽相同,但是都具有相同的输入、输出界面。在58字符点阵中点亮不同的点就可以显示出不同的字符,点亮和熄灭点阵上光点的数据称为字模。图7-5给出了58点阵显示字符“H”所需要的字模。常用字符的字模已在CGROM中被固化,且每个字模都有一个固定的编码,即它的ASCII码。当用户编程将待显示字符的编码写入DDRAM后,根据编码在CGROM中找到所对应的字模,由它来控制58点阵显示所需的字符。 5. LCD1602指令集LCD1602液晶模块共有11条指令,

9、主要用于清屏、显示、移位等操作,如表7-1所示。指令1:显示清屏。光标返回显示屏的左上方,地址指针为0;DDRAM单元全部写入“空白”的ASCII码20H。指令2:显示回车。光标返回显示屏的左上方,地址指针为0。指令3:置地址指针。ID:置地址指针。ID=1读或写完一个字符后地址指针加1,且光标加1;ID=0读或写完一个字符后地址指针减1,且光标减1。表7-1 LCD1602指令集 S:置移屏。S=1写入一个字符时整屏显示左移(ID=0)或右移(ID=1);S=0写入一个字符时整屏显示不移动。指令4:置显示开/关及光标。D:LCD1602显示的开与关。D=1开显示,LCD1602可以显示;D=

10、0关显示,LCD1602不能显示。C:光标的开与关。C=1光标显示,C=0光标不显示。B:光标是否闪烁。B=1光标闪烁,B=0光标不闪烁。指令5:光标或字符移位。S/C:光标或字符是否移位。S/C=1时整屏信息、光标同时移动;S/C=0时只移动光标;R/L:移位方向。R/L=1时整屏信息、光标右移;R/L=0时整屏信息、光标左移。指令6:置显示模式。为8位数据接口,两行显示,58点阵。指令7:置CGRAM地址。用以选择CGRAM存储器的某一单元。指令8:置DDRAM地址。用以选择DDRAM存储器的某一单元。指令9:读忙标志或读光标地址。(1) 读忙标志。BF:为忙标志位。BF=1表示忙,此时模

11、块不能接收命令或者数据;BF=0表示不忙。原则上每次对LCD1602进行读/写操作之前都必须进行忙检测,以确定BF为0。实际上,由于单片机的操作速度慢于液晶显示器的反应速度,因此可以不进行忙检测或只进行简短的延时即可。(2) 读光标地址。读取当前DDRAM存储器地址指针的内容。指令10:写数据到CGRAM或DDRAM。(1) 写数据到DDRAM:将显示字符写入DDRAM。(2) 写数据到CGRAM:将用户自己编写的字模存入CGRAM,可以在显示屏上显示出相应的图形或简单的汉字。指令11:从CGRAM或DDRAM读数据。读取DDRAM和CGRAM的内容。例如,设置地址指针自加1,不移屏时,根据表

12、7-1可知由指令3实现。其中由地址指针自加1确定ID=1,不移屏确定S=0,指令码DB7DB0为00000110B=06H。6. LCD1602的基本操作读状态输入:RS=L,R/=H,E=H输出:DB7DB0=状态字写指令输入:RS=L,R/=L,DB7DB0=指令码,E=正脉冲输出:无读数据输入:RS=H,R/=H,E=H输出:DB7DB0=数据写数据输入:RS=H,R/=L,DB7DB0=数据,E=正脉冲输出:无指令1指令8为写指令操作,指令9为读状态操作,指令10为写数据操作,指令11为读数据操作。7. LCD1602的操作时序LCD1602的读/写操作时序如图7-6和图7-7所示。操

13、作时间参数如表7-2所示。图7-6 LCD1602读操作时序图7-7 LCD1602写操作时序 表7-2 LCD1602操作时间参数 7.2.3 LCD1602应用举例1. 字符显示字符的显示需完成以下操作:(1) LCD1602初始化:包括设置显示模式、显示开/关及光标、地址指针、清屏等。(2) 设置DDRAM中的显示地址(指令8),指令码为80H+地址码。(3) 向DDRAM单元写入待显示字符的ASCII码。写入ASCII码有两种方法:一是直接写入ASCII码,如显示“H”是就写入它的ASCII码48H;二是发送字符常量,在C51中将1个字符用单引号括起来就是字符常量,发送一个字符常量时实

14、际上是将它的ASCII码存放到选定的DDRAM存储单元中。因此发送H与48H的效果相同。例1 在LCD1602的第一行居左显示字符“H”,第二行居右显示字符“B”。解:(1) 硬件设计。硬件电路如图7-8所示,由单片机的最小系统和LCD1602组成。P2口作为LCD1602的数据口DB7DB0;P0.5作为LCD1602的数据/命令选择端RS,P0.6用作读/写选择端R/,P0.7是使能端E,3脚所接10 k电位器进行对比度调节。图7-8 LCD1602与51单片机连接图 (2) 软件设计。液晶显示器1602在工作时,首先要对它进行初始化,确定LCD1602的显示模式、显示开/关、光标或字符是

15、否移位、清屏等。根据本例要求参照表7-1设置LCD1602的显示模式为162显示、58点阵、8位数据接口(指令6,指令码为38H);开显示、显示光标、光标不闪烁(指令4,指令码为0eH);显示单个的字符时可不设置地址指针;清屏(指令1,指令码为01H)。其次要确定DDRAM单元的地址,根据图7-4所示DDRAM地址映射图并结合指令8可知,第一行居左显示,即第一行第一个位置的指令码80H+00H;第二行居右显示,即第二行最后一个位置的指令码是80H+4fH。最后将显示字符写入选中的DDRAM单元。写指令函数write_com(uchar com)用于将8位指令码com写入LCD1602的指令寄存

16、器,必须符合图7-7所示写操作时序,初始化LCD1602、确定DDRAM存储器地址等所需的指令18均由此函数写入。写数据write_dat(uchar dat)的作用是将8位显示数据dat写入LCD1602内的显示存储器DDRAM的单元中,并且要符合图7-7所示写操作时序,实现指令10操作。初始化LCD1602由函数csh1602( )完成。主函数中实现LCD1602的初始化、字符的显示,流程图如图7-9所示。图7-9 例1流程图 (3) 源程序。#include#define uchar unsigned char#define uint unsigned int/*必要的全局变量定义*/s

17、bit E=P07;/定义LCD1602使能端sbit RW=P06;/定义LCD1602读/写选择端sbit RS=P05;/定义LCD1602数据/命令选择端/*延时函数*/void delay( ) uchar i;/时间约为1 msfor(i=0; i=130; i+);/*写指令函数*/void write_com(uchar com) P2 = com; /com为输入的指令码,通过P2口送入LCD1602的指令寄存器RS = 0; /RS=0选择指令RW = 0; / RW = 0写操作E = 0; /为使能端E提供所需的正脉冲,参照图7-7写操作时序delay( );E = 1

18、;delay( );E = 0;/*写数据函数*/void write_dat(uchar dat) P2 = dat; /dat为输入的显示数据,通过P2口存入LCD1602的DDRAM单元RS = 1; /RS=1选择数据RW = 0;E = 0; /为使能端E提供所需的正脉冲,参照图7-7写操作时序delay( );E = 1;delay( );E = 0;/*1602初始化函数*/void csh1602 ( ) write_com (0 x38); /显示模式为162显示、57点阵、8位数据口write_com (0 x0e); /开显示、显示光标、光标不闪烁write_com (0

19、 x01); /清屏/*主函数*/main( ) csh1602( ); /初始化LCD1602delay( );write_com (0 x80+0 x00); /在第一行居左显示“H”,先设置DDRAM地址write_dat (H);/后写入H的ASCII码,或用指令write_data (48H);delay( );write_com (0 x80+0 x4F); /在第二行显示“B”,同上write_dat (B);delay( );while(1);/动态停机2. 字符串显示字符串的显示需完成以下操作:(1) 定义字符数组存放待显示的字符串,字符串数组的定义格式为 uchar cod

20、e table1 = “HELLO!”;或 uchar code table1 = “HELLO!”;或 uchar table1 = HELLO!;将字符数组的每个元素发送至DDRAM存储器时,存放的实际是每个字符的ASCII码。注意:当数组中的元素为字符串时,可以用双引号将字符串引起来,空格也算一个字符;字符串在存放时有一个结束标志空字符“0”,因此上述定义的字符数组table1实际上有6+1个元素。(2) LCD1602初始化:与字符显示不同的是一定要设置地址指针(指令3)。(3) 设置字符串显示首地址的指令码是“80H+地址码”。在显示字符串时,如果初始化时是由指令3设置地址指针自加1

21、,则只需发送字符串显示位置第一个单元的地址;地址指针自减1时只需发送字符串显示位置最后一个单元的地址,那么每读完或写完一个字符后地址指针会自加1或自减1,从而自动获得其他后续字符的显示地址。(4) 用for语句向DDRAM连续写入待显示的字符串。如果字符串中字符的个数小于16个,则循环次数一定要与字符串所含字符的个数一致,否则会显示乱码;如果字符串中字符的个数超过16个,则显示完一屏16个字符后应该用移屏指令显示剩余的字符。例2 在LCD1602的第一行显示字符串“HELLO!”,第二行显示字符串“Dian zi xin xi”,均居中显示。解:(1) 硬件设计。硬件电路图如图7-8所示。(2

22、) 软件设计。本例实现的关键在于以下几点: 定义数组存放待显示的字符串。uchar code table1 = “HELLO!”;uchar code table2 = Dian zi xin xi; 设置字符串显示首地址。本例中,初始化LCD1602时,设置地址指针自加1、不移屏(指令3,指令码为06H)。第一行显示的字符串“HELLO!”共6个字符,LCD1602每行最多显示16个字符。当居中显示时,左面须剩余(16-6)/2=5个位置,第一个字符显示地址的指令码即为80H+05H。第二行字符串“Dian zi xin xi”中包括空格共14个字符,居中显示时,左面须剩余(16-14)/2

23、=1个位置,第一个字符显示地址的指令码为80H+41H。 确定了字符串显示的首地址后,用for语句连续向DDRAM写入字符串数据。第一行显示的字符串“HELLO!”共6个字符,应循环6次,而第二行显示的字符串“Dian zi xin xi”则需循环14次。若出现乱码,一般表明这里的循环次数出错。主函数流程图如图7-10所示。图7-10 例2流程图 (3) 源程序。#include#define uchar unsigned char#define uint unsigned int/*必要的全局变量定义*/sbit E=P07;/定义LCD1602使能端sbit RW=P06;/定义LCD16

24、02读/写选择端sbit RS=P05;/定义LCD1602数据/命令选择端uchar code table1 = “HELLO!”;/定义第一行字符串uchar code table2 = “Dian zi xin xi”;/定义第二行字符串/*延时函数*/void delay() uchar i;/时间约为1 msfor(i=0; i=130; i+);/*写指令函数*/void write_com(uchar com) P2 = com; /com为输入的指令码,通过P2口送入LCD1602的指令寄存器RS = 0; /RS=0选择指令RW = 0; / RW = 0写操作E = 0;

25、/为使能端E提供所需的正脉冲,参照图7-7写操作时序delay();E = 1;delay();E = 0;/*写数据函数*/void write_dat(uchar dat) P2 = dat; /dat为输入的显示数据,通过P2口存入LCD1602的DDRAM单元RS = 1; /RS=1选择数据RW = 0;E = 0; /为使能端E提供所需的正脉冲,参照图7-7写操作时序delay();E = 1;delay();E = 0;/*1602初始化函数*/void csh1602 () write_com (0 x38); /显示模式为162显示、57点阵、8位数据口write_com (

26、0 x0e); /开显示、显示光标、光标不闪烁write_com (0 x06); /地址指针自加1、不移屏write_com (0 x01); /清屏/*主函数*/main() uchar num;csh1602(); /初始化LCD1602write_com (0 x80+0 x05); /在第一行显示“HELLO!”,置DDRAM首地址05H for(num=0;num6;num+)/连续发送table1的6个元素write_dat (table1num);/将数组table1中序号num的元素写入DDRAMdelay();write_com (0 x80+0 x41); /在第二行显示

27、“Dian zi xin xi”,置DDARM首地址41Hfor(num=0;num=13;num+)/连续发送table2的14个元素write_dat (table2num); /将数组table2中序号num的元素写入DDRAMdelay(); while(1);/动态停机在字符串显示时,除了利用for语句发送字符串中的每个字符至DDRAM,也可以用while语句来实现。相关程序段为:num=0;while(table1num!=0) write_dat (table1num);delay();num+;/修改num7.3 项 目 实 施7.3.1 硬件设计方案硬件电路如图7-8所示。7

28、.3.2 软件设计方案该项目与项目六的区别在于显示器件由半导体数码管改为液晶显示器1602后,可以在显示屏上显示更多的信息。在软件设计中主要解决以下几个问题:(1) 计时的时间基准1 s由定时/计数器T0实现。原理是1 s=20 ms50,由T0实现20 ms定时,定义变量t0_num(初值为0)在T0中断服务函数中统计T0的溢出次数,当T0溢出50次时,表示1 s到。(2) 定义变量djs(初值为99)用于倒计时。当1 s到了之后,djs-1。(3) 在液晶显示器1602上显示变量djs时,可分别显示十位数和个位数。不管显示哪一位数都要先发送DDRAM的显示地址,后发送它的ASCII码。主函

29、数流程图如图7-11所示。图7-11 项目七主函数流程图 源程序#include#define uchar unsigned char#define uint unsigned int/*必要的全局变量定义*/sbit E=P07;/定义LCD1602使能端sbit RW=P06;/定义LCD1602读/写选择端sbit RS=P05;/定义LCD1602数据/命令选择端uchar code table =WE LOVE dpj;/定义第二行字符串uchar djs=99;/定义倒计时变量uchar t0_num=0; /定义变量t0_num,用以累计定时器T0的溢出次数,实现1s定时/*延时

30、函数*/void delay() uchar i;/时间约为1 msfor(i=0; i=130; i+);/*写指令函数*/void write_com(uchar com) P2 = com; /com为输入的指令码,通过P2口送入LCD1602的指令寄存器RS = 0; /RS=0选择指令RW = 0; / RW = 0写操作E = 0; /为使能端E提供所需的正脉冲,参照图7-7写操作时序delay();E = 1;delay();E = 0;/*写数据函数*/void write_dat(uchar dat) P2 = dat; /dat为输入的显示数据,通过P2口存入LCD1602

31、的DDRAM单元RS = 1; /RS=1选择数据RW = 0;E = 0; /为使能端E提供所需的正脉冲,参照图7-7写操作时序delay();E = 1;delay(); E = 0;/*1602初始化函数*/void csh1602 () write_com (0 x38); /显示模式为162显示、57点阵、8位数据口write_com (0 x0e); /开显示、显示光标、光标不闪烁write_com (0 x06); /地址指针自加1、不移屏write_com (0 x01); /清屏/*定时/计数器T0初始化函数*/void csht0() TMOD=0 x01;/设置T0定时2

32、0 ms,软启动,方式一TH0=(65536-20000)/256;/晶振12 MHz,定时20 ms时初值高8位送入TH0TL0=(65536-20000)%256;/晶振12 MHz,定时20 ms时初值低8位送入TL0ET0=1;/定时/计数器T0开中断EA=1;/CPU开中断TR0=1;/启动定时/计数器T0/*主函数*/main() uchar num;csh1602(); /初始化LCD1602csht0();/初始化T0write_com (0 x80+0 x45); /显示第二行字符串,发送首地址45H for(num=0; num11; num+)/连续发送11次显示数据wr

33、ite_dat (tablenum);/将数组table中序号num的元素写入DDRAMdelay();while(1) /在第一行显示变量djs,在定时/计数器T0的中断函数中,djs隔1s减1 write_com (0 x80+0 x07); /发送变量djs十位数的显示地址07Hwrite_dat (djs/10+48); /将变量djs十位数的ASCII码写入DDRAMwrite_com (0 x80+0 x08); /发送变量djs个位数的显示地址08Hwrite_dat (djs%10+48); /将变量djs个位数的ASCII码写入DDRAM/*定时/计数器T0中断服务函数*/v

34、oid time0() interrupt 1 TH0=(65536-20000)/256;TL0=(65536-20000)%256;t0_num+;/T0每20 ms溢出一次,变量t0_num加1if(t0_num=50)/变量t0_num加至50时,表示1 s到 t0_num=0;/将变量t0_num重赋初值0,便于下一次累计T0的溢出次数if(djs=0)/将0-1=99变为100-1=99,符合减法运算规则djs=100;djs-;/1 s到了,变量djs减17.3.3 程序调试1. 实验板电路分析在HOT-51实验板中,LCD1602与单片机的连接如图7-12所示。P0口与数据口D

35、B0DB7相连;P2.5、P2.6、P2.7分别与RS、R/、E相连,W1为对比度调节电位器。图7-12 HOT-51实验板LCD1602连接图2. 程序设计根据图7-12的连接方式,重新改写程序。液晶显示源程序内容简单,但是程序结构较为繁琐,包含了延时函数、写指令函数、写数据函数、初始化LCD1602函数,其中写指令函数、写数据函数需要参考LCD1602的写操作时序才能够完全理解;由定时/计数器T0或T1实现1 s的定时,与其相关的函数有初始化T0函数、定时/计数器的中断服务函数;每个函数都完成了独立的功能,通过主函数将它们有序地联系起来。当定义的函数较多时,要注意各函数的位置,其中中断服务

36、函数由于不能被调用,所以可写在任意位置,其他函数如果写在主函数之后时,需加入函数声明语句。编辑源程序时,一定要注意源程序的书写格式,要做到一目了然。例如:C51中,字符用单引号,而字符串需用双引号;字符串数组定义时是否加关键字“code”视需要而定;DDRAM地址的确定;09的ASCII码等这些细节也要考虑清楚,才能提高调试的成功率。3. 结果测试在下载程序之前先将LCD1602插入实验板上对应的插孔中,注意插接方向不能反了;后加上工作电压,调节LCD1602附近的电位器W1,改变调节LCD1602的对比度,在显示屏上刚能看到每个58点阵即可。LCD1602调整好后,将程序下载到实验板上,观察

37、执行结果。如果字符串的显示位置错误,出现乱码,一般是字符串显示的首地址出错;如果不能进行倒计时,则可能是与定时/计数器相关的函数有误,如初始化时没有启动、未开中断等;如果计时不准确,则与T0的计数初值、溢出次数的累计有关。总之在调试过程中,要逐步学会依据实验结果缩小检查范围。4. 拓展练习根据下列要求,编写程序。(1) 由定时/计数器T1实现1 s定时。(2) 改变1 s的实现原理,如1 s=10 ms100。(3) 在第二行居中位置显示0999 s计时。(4) 设置按键,可以在0999 s范围内,灵活设置计时时间。7.4 项 目 评 价 7.5 拓展与提高字符型液晶主要用于显示字符,如需大量

38、显示汉字或复杂的图形时最好选用图形型液晶。液晶显示器12864是较为常用的一种图形型液晶,LCD12864一般分为两种,一种带有中文字库,主要用于显示汉字,也可显示图形;另一种不带字库,只是简单的点阵模式,主要用于显示图形,显示汉字时,需自行定义字模。下面介绍如图7-13所示带中文字库的液晶显示器12864。图7-13 液晶显示器12864的正面图1. LCD12864的特点LCD12864由64行128列光点组成,5 V电源,并口驱动,内置8192个1616点阵的汉字字库,128个816点阵ASCII字符集。LCD12864一屏最多可显示4行8列共32个1616点阵汉字,4行16列共64个1

39、68点阵的ASCII字符,也可用于显示图形;利用LCD12864灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。2. LCD12864的引脚LCD12864的引脚及功能说明如表7-3所示。表7-3 LCD12864的引脚及功能说明 3. LCD12864的工作原理LCD12864主要由行驱动器、列驱动器及12864全点阵液晶显示器组成,包含以下功能部件。(1) 忙标志BF。忙标志BF反映LCD12864内部的工作情况。当BF=1时,表示LCD12864在进行内部操作,此时不接收外部指令和数据;当BF=0时,表示LCD12864为准备状态,随时可接收外部指令或数据。利用读状态

40、,可以将BF读到DB7总线,检验12864的工作状态,不检测时,用延时替代。(2) CGROM。存储器CGROM提供8192个触发器用于LCD12864显示屏上64128个光点显示开/关的控制,在CGROM中固化了8192个1616点阵的汉字字库供用户使用,每个汉字的字模都有固定的编码是A1A0HF7FFH。(3) HCGROM。存储器HCGROM中固化了128个168点阵ASCII字符集供用户使用,字符的编码是02H7FH。(4) CGRAM。存储器CGRAM可以存储四组1616点阵的自定义图像点阵数据,用户可以将CGROM内没有提供的图像点阵数据自行定义到CGRAM中,便可以和CGROM一

41、样通过DDRAM显示在屏幕中。CGRAM中四组自定义点阵数据的编码为0000H、0002H、0004H、0006H。(5) DDRAM。存储器DDRAM用于存储待显示的汉字或字符在CGROM、HCGROM中的编码,与LCD12864的显示屏有直接对应关系。(6) 地址指针。地址指针用于存放DDRAM或CGRAM的地址,如果设置为自加1或自减1之后只要读取或是写入DDRAM/CGRAM后,地址指针的值就会自动修改。当RS=0且R/=1时,地址指针的值会被读取到DB6DB0中。(7) 光标/闪烁控制电路。光标/闪烁控制电路提供硬体光标及闪烁控制电路,由地址指针的值来确定显示屏中光标或闪烁的位置。4

42、. LCD12864指令集LCD12864有基本指令和扩充指令两套控制命令,如表7-4、表7-5所示。表7-4 LCD12864基本指令集(RE=0) 表7-5 LCD12864扩充指令集(RE=1)5. LCD12864的基本操作读状态输入:RS=L,R/=H,E=H输出:DB7DB0=状态字写指令输入:RS=L,R/=L,DB7DB0=指令码,E=正脉冲输出:无读数据输入:RS=H,R/=H,E=H输出:DB7DB0=数据写数据输入:RS=H,R/=L,DB7DB0=数据,E=正脉冲输出:无6. 字符与汉字的显示(1) LCD12864使用前的准备:先给LCD12864加上工作电压,再调节

43、对比度,使其显示出黑色的底影,可以初步检测LCD有无缺段现象。(2) LCD12864初始化:设置LCD12864显示模式、显示开/关及光标、地址指针及清屏等。(3) 汉字与字符显示:汉字的显示是通过编程将汉字在CGROM中的编码写入DDRAM实现的;字符的显示是将字符在HCGROM中的编码写入DDRAM实现的。每个DDRAM单元中存储的数据可控制显示屏上显示1个1616点阵汉字或2个168点阵ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。汉字与字符可以混合显示。(4) DDRAM地址映射图。DDRAM存储器的地址范围是80H9FH,它的每个单元与显示屏上32

44、个显示区域有着一一对应的关系,其对应关系如表7-6所示。在LCD12864显示屏的某一个位置显示汉字与字符时应先设定DDRAM的显示地址,然后再写入汉字或字符的编码。例如,若要在第一行的第二个位置显示字符串“学习ABC”,第一步先设定DDRAM地址,指令码为0 x80+1=0 x81,确定显示首地址;第二步用for语句循环7次将字符串“学习ABC”连续写入DDRAM。7. LCD12864的操作时序LCD12864的读/写操作时序如图7-14和图7-15所示。表7-6 LCD12864的DDRAM地址映射图 8. 应用举例例3 在液晶显示器12864的第二行显示“电子信息”,第三行显示“dia

45、n zi xin xi”,显示方式居中。解:(1) 硬件设计。硬件电路如图7-16所示,P0口与DB7DB0相连作为8位数据接口;P2.5是数据/指令选择端RS,P2.6是读/写选择端R/,P2.7是使能端E,P2.2是串并选择端PSB,P2.4是复位端。(2) 软件设计。带字库的LCD12864的使用与LCD1602非常相似,但也有特殊之处: 不对LCD12864进行忙检测,为了简化编程,用延时代替。 初始化LCD12864设置显示模式时的指令码0 x30须连写两次。因为不能同时改变DL 和RE,第一次写入0 x30改变DL,第二次写入0 x30才能改变RE。图7-14 LCD12864读操作时序 图7-15 LCD12864写操作时序 显示汉字或字符时,要先设置DDRAM的显示地址。例如,“电子信息”共有4个字,而LCD12864每行最多显示8个字,居中显示

温馨提示

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

评论

0/150

提交评论