发光二极管LED数码管LCD液晶显示器和微型打印机课件.ppt

上传人:小飞机 文档编号:3805591 上传时间:2023-03-22 格式:PPT 页数:177 大小:4.25MB
返回 下载 相关 举报
发光二极管LED数码管LCD液晶显示器和微型打印机课件.ppt_第1页
第1页 / 共177页
发光二极管LED数码管LCD液晶显示器和微型打印机课件.ppt_第2页
第2页 / 共177页
发光二极管LED数码管LCD液晶显示器和微型打印机课件.ppt_第3页
第3页 / 共177页
发光二极管LED数码管LCD液晶显示器和微型打印机课件.ppt_第4页
第4页 / 共177页
发光二极管LED数码管LCD液晶显示器和微型打印机课件.ppt_第5页
第5页 / 共177页
点击查看更多>>
资源描述

《发光二极管LED数码管LCD液晶显示器和微型打印机课件.ppt》由会员分享,可在线阅读,更多相关《发光二极管LED数码管LCD液晶显示器和微型打印机课件.ppt(177页珍藏版)》请在三一办公上搜索。

1、第7章 显示与开关/键盘输入及微型 打印机接口设计,1,第7章 显示、开关/键盘及微型打印机接口设计7.1 单片机控制发光二极管的显示 7.1.1 单片机与发光二极管的连接 7.1.2 单片机I/O端口控制发光二极管的编程7.2 开关状态检测7.3 单片机控制LED数码管的显示 7.3.1 LED数码管显示原理 7.3.2 LED数码管的显示方式 7.3.3 LED数码管静态显示设计 7.3.4 LED数码管动态显示设计,2,7.4 单片机控制LED点阵显示器显示 7.4.1 LED点阵显示器结构与显示原理 7.4.2 控制1616 LED点阵显示屏的设计7.5 单片机控制LCD 1602液晶

2、显示器的显示 7.5.1 LCD 1602液晶显示模块简介 7.5.2 单片机控制字符型LCD 1602的显示案例7.6 键盘接口设计 7.6.1 键盘接口设计应解决的问题 7.6.2 独立式键盘的设计 7.6.3 矩阵式键盘的设计 7.6.4 单片机与专用键盘/显示器芯片HD7279的接口设计,3,7.7 AT89S52单片机与微型打印机TPP-40A/16A的接口 7.7.1 TPP-40A/16A微型打印机简介 7.7.2 AT89S52单片机与TPP-40A/16A的接口设计7.8 单片机与BCD码拨盘的接口设计,4,内容概要 作为片内I/O口的基本应用,本章介绍单片机片内I/O口与常

3、见的输入器件(开关、键盘以及拨盘开关等)以及常见的显示输出器件(发光二极管、LED数码管、LCD液晶显示器和微型打印机)的接口设计与编程。,5,7.1 单片机控制发光二极管显示 第2章介绍了单片机片内4个I/O端口P0口P3口的内部电路以及外部引脚特性。如果P0口作为通用I/O使用,由于漏极开路,需要外接上拉电阻。而P1P3口内部已有30k左右的上拉电阻。下面讨论P1P3口如何与LED发光二极管连接。发光二极管常用来指示系统工作状态,制作节日彩灯、广告牌匾等。大部分发光二极管工作电流15mA,其内阻为20100。电流越大,亮度也越高。为保证发光二极管正常工作,同时减少功耗,限流电阻选择十分重要

4、,若供电电压为+5V,则限流电阻可选13k。,6,7.1.1 单片机与发光二极管的连接 单片机通过并行端口P1P3驱动发光二极管,电路如图7-1所示。P0口与 P1、P2、P3口相比,P0口每位可驱动8个LSTTL输入,而P1P3口每一位的驱动能力,只有P0口的一半。当P0口的某位为高电平时,可提供400A的拉电流,见图7-1(a);当P0口某位为低电平(0.45V)时,可提供3.2mA的灌电流,见图7-1(b),而P1P3口内部有30k左右的上拉电阻,如果高电平输出,则从P1、P2和P3口输出的拉电流Id仅为几百A,驱动能力较弱,亮度较差,如图7-1(a)所示。,7,8,图7-1 发光二极管

5、与单片机并行口的连接,(a)不恰当的连接:高电平驱动(b)恰当的连接:低电平驱动,如果端口引脚为低电平,能使灌电流Id从单片机的外部流入内部,则将大大增加流过的灌电流值,如图7-1(b)所示。所以,AT89S52单片机任何一个端口要想获得较大的驱动能力,要采用低电平输出。如果一定要高电平驱动,可在单片机与发光二极管之间加驱动电路,如74LS04、74LS244等。7.1.2 单片机I/O端口控制发光二极管的编程 发光二极管与单片机I/O端口的连接,见图7-1(b)。如要点亮某发光二极管,只需该I/O端口位写入“0”即可。下面介绍如何对I/O端口编程实现对发光二极管亮灭的控制。,9,【例7-1】

6、制作一个单片机控制的流水灯,原理电路见图7-2,8个发光二极管LED0LED7经限流电阻分别接至P1口的P1.0P1.7引脚上,阳极共同接高电平。编写程序,每次点亮一个发光二极管,控制发光二极管由上至下的反复循环流水点亮。说明:本例采用了Proteus环境下的虚拟仿真,7.5版本元件库中没有AT89S52单片机,采用AT89C51来代替AT89S52,以下同。参考程序如下:,10,11,图7-2 单片机控制的流水灯,12,7.2 开关状态检测 检测开关处于闭合状态还是打开状态,只需把开关一端接到I/O端口的引脚上,另一端接地,然后通过检测I/O端口引脚的电平来实现。【例7-2】如图7-3所示,

7、利用单片机、1个开关k和1个发光二极管LED,构成一个简单的检测开关k是否闭合的系统。图7-3中,开关k的一端接到单片机P3.0引脚上,并通过上拉电阻接到+5V上,开关的另一端接地,当开关打开时,P3.0引脚为高电平,当开关闭合时,P3.0引脚为低电平。单片机对开关状态的检测是由程序检测,13,图7-3 开关、LED发光二极管与P1口的连接,14,P3.0引脚的输入电平是高还是低。当开关闭合,即P3.0脚为低电平;当开关打开,P3.0引脚为高电平。P1.0引脚接发光二极管的阴极LED,当开关k闭合时,LED点亮;开关打开时,LED熄灭。开关k与LED没有任何电气上的联系。参考程序如下:,15,

8、7.3 单片机控制LED数码管的显示7.3.1 LED数码管显示原理 LED数码管是常见的显示器件。LED数码管为“8”字型的,共计8段(包括小数点段在内)或7段(不包括小数点段),每一段对应一个发光二极管,有共阳极和共阴极两种,如图7-4所示。共阳极数码管的阳极连接在一起,公共阳极接到+5V上;共阴极数码管的阴极连接在一起,通常此公共阴极接地。对于共阴极数码管,当某发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极数码管的阳极连接在一起接+5V,当某个发光二极管的阴极接低电平时,该发光二极管被点亮,相应的段被显示。,16,17,图7-4 8段LED数码管结构及外形,为使

9、LED数码管显示不同的字符,要把某些段点亮,就要为数码管的各段提供一个字节的二进制代码,即段码。习惯上以“a”段对应字型码字节的最低位。各种字符的段码见表7-1。如要在数码管上显示某一字符,只需将该字符的段码加到各段上即可。例如某存储单元中的数为“02H”,想在共阳极数码管上显示“2”,需要把“2”的段码“A4H”加到数码管各段。通常采用的方法是将欲显示的字符的段码作成一个表,根据显示的字符从表中查找到相应的段码,然后单片机把该段码输出到数码管的各个段上,同时数码管的公共端接+5V,此时在数码管上显示出字符“2”。,18,19,下面介绍单片机如何控制LED数码管显示字符的设计。【例7-3】用单

10、片机控制一个8段LED数码管,如图7-5所示。要求数码管反复循环显示单个数字:09。,图7-5 控制数码管循环显示单个数字,20,图7-5中,采用了共阳极数码管,R1R7为限流电阻。单片机P0口输出段码,数码管的公共段接+5v。欲显示的数字09的字型码由于无规律可循,只能采用查表的方式来完成要求,这样可按着数字09的顺序,把每个数字的字型码按顺序排好,形成一个段码表。根据要显示的数字,查找到相应的段码,从而控制LED数码管显示相应的字符。读者通过本例应掌握段码查表程序的编写。参考程序如下:,21,22,程序设计中,为达到反复循环显示数字09的目的,在段码表中设置了一个结束符01H,来控制反复循

11、环显示。7.3.2 LED数码管的显示方式 单片机控制LED数码管有两种显示方式:静态显示和动态扫描显示。1.静态显示方式 静态显示就是指无论多少位LED数码管,都同时处于显示状态。多位LED数码管工作于静态显示方式时,各位的共阴极(或共阳极)连接在一起并接地(或接+5V);每位数码管的,23,段码线(adp)分别与一个单片机控制的8位I/O口锁存器输出相连。如果送往各个LED数码管所显示字符的段码一经确定,则相应I/O口锁存器锁存的段码输出将维持不变,直到送入下一个显示字符的段码。因此,静态显示方式的显示无闪烁,亮度较高,软件控制比较容易。图7-6所示为4位LED数码管静态显示电路,各个数码

12、管可独立显示,只要向控制各位I/O口锁存器写入相应的显示段码,该位就能保持相应的显示字符。这样在同一时间,每一位显示的字符可以各不相同。但是,静态显示方式占用I/O口线较多。,24,图7-6 4位LED静态显示的示意图,25,对于图7-6所示电路,要占用4个8位I/O口(或锁存器)。如果数码管数目增多,则还需要增加I/O口的数目。在实际的系统设计中,如果显示位数较少,可采用静态显示方式。但显示位数较多时,为了降低成本,一般采用动态显示方式。2.动态扫描显示方式 显示位数较多时,静态显示所占用的I/O口多,为节省I/O口与驱动电路的数目,常采用动态扫描显示方式。将所有LED数码管显示器的段码线的

13、相应段并联在一起,由一个8位I/O端口控制,而各显示位的公共端分别由另一单独的I/O端口线控制。图7-7所示为一个4位8段LED数码管动态扫描显示电路的,26,图7-7 4位LED数码管动态显示示意图,27,示意图。其中单片机向I/O(1)端口发出欲显示字符的段码,而显示器的位点亮控制 使用I/O(2)端口中的4位口线,来控制数码管公共端的电平,每一时刻,只有1位位选线有效,即选中某一位显示,其他各位位选线都无效,不显示。每隔一定时间逐位地轮流点亮各数码管(扫描),由于数码管的余辉和人眼的“视觉暂留”作用,只要控制好每位数码管点亮显示的时间和间隔,则可造成“多位同时亮”的假象,达到4位同时显示

14、的效果。,28,各位数码管轮流点亮的时间间隔(扫描间隔)应根据实际情况而定。发光二极管从导通到发光有一定的延时,如果点亮时间太短,发光太弱,人眼无法看清;时间太长,产生闪烁现象,而且此时间越长,占用单片机时间也越多。另外,显示位数增多,也将占用单片机的大量时间,因此动态显示的实质是以执行程序的时间来换取I/O端口数目的减少。为克服动态显示的弊病,可采用7.6.4小节介绍的专用的键盘/显示器芯片,由芯片内部硬件扫描电路自动完成显示数据的扫描刷新。,29,7.3.3 LED数码管静态显示设计【例7-4】用AT89S52设计一个2位LED数码管显示的“秒表”,显示时间为0099秒,每秒自动加1。原理

15、电路如图7-8所示。电路采用单片机的P2口、P3口分别控制两个LED数码管作为“秒表”的时间显示。显示数字的段码采用查表方法。“秒”计时产生采用软件延时的方法。由本例可见,采用静态显示,需要一个数码管对应一个I/O端口。当数码管的数目较多时,需要占用较多的I/O端口。但是软件编程比较简单,只需向P2口、P3口输出显示数字的段码即可,且显示不闪烁。参考程序如下:,30,31,图7-8 2位LED数码管静态显示的秒表,32,33,7.3.4 LED数码管动态显示设计 下面介绍单片机控制数码管动态显示的案例。【例7-5】图7-9所示的动态扫描显示电路,由单片机控制8只共阳极数码管,同时在数码管上同时

16、显示8个数字18。电路中P0口输出显示字符的段码,P2口输出点亮某位的位选码。由于8位数码管的各段是并联的,P0端口一次只能送出一个显示,34,图7-9 数码管采用动态显示方式同时显示数字18,35,段码,即一次只能点亮1位数码管。单片机先控制左边第1个数码管显示1,经过延时后,再控制左边第2个数码管显示2,直至第8个数码管显示8,反复循环上述过程。单片机对8个数码管进行快速位选扫描,只要位选扫描速度选择适当,虽然是每次只点亮一位数码管,但由于数码管的余辉和人眼的“视觉暂留”作用,只要控制好每位数码管显示的时间和间隔,则可造成“多位同时亮”的假象,达到8位数码管同时显示字符的效果。,36,37

17、,38,7.4 单片机控制LED点阵显示器显示 LED点阵显示器应用非常广泛,在许多公共场合,如商场、银行、车站、机场、医院随处可见。不仅能显示文字、图形,还能播放动画、图像、视频等信号。LED点阵显示器分为图文显示器和视频显示器,有单色显示,还有彩色显示。下面仅介绍单片机如何来控制单色LED点阵显示器的显示。7.4.1 LED点阵显示器结构与显示原理 由若干个发光二极管按矩阵方式排列而成。阵列点数可分为57、58、68、88点阵;按发光颜色可分为单色、双色、三色;按极性排列可分为共阴极和共阳极。,39,1.LED点阵结构 以88LED点阵显示器为例,外形见图7-10,内部结构见图7-11,由

18、64个发光二极管组成,且每个发光二极管是处于行线(R0R7)和列线(C0C7)之间交叉点上。2.LED点阵显示原理 LED点阵显示器显示的一个字符是由点阵中被点亮的LED所构成。下面以发光二极管阳极接行线,阴极接列线的点阵显示器,即图7-11的结构来说明。可以看出,点亮点阵中的一个发光二极管的条件是:所在行为高电平,所在列为低电平。当然,行与列也是相对的,如把图7-11中的行列互换,则点亮点阵中的一个发光二极管的条件是:,40,图7-10 88 LED点阵显示器外形,41,图7-11 88LED点阵显示器(共阴极)的结构,42,对应的行为低电平,对应的列为高电平。如果在很短时间内依次点亮很多个

19、发光二极管,LED点阵就可以显示一个稳定的字符、数字或其他图形。因此,控制LED点阵显示,实质上就是控制加到行线和列线上的电平编码来控制点亮某些发光二极管(点),从而显示出由不同发光的点组成的各种字符。88 LED点阵显示模块中的每个发光二极管均放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列为0电平时,该发光二极管被点亮。下面以1616LED点阵显示器显示字符“子”为例,见图7-12。,43,图7-12 1616 LED点阵显示器显示字符“子”,44,显示过程如下:先给LED点阵的第1行送高电平(行线高电平有效),同时给所有列线送高电平(列线低电平有效),从而第1行发光二极管全灭;

20、延时一段时间后,再给第2行送高电平,同时给所有列线送“1100 0000 0000 1111”,列线为0的发光二极管点亮,从而点亮10个发光二极管,显示出汉字“子”的第一横;延时一段时间后,再给第3行送高电平,同时加到列线的编码为“1111 1111 1101 1111”,点亮1个发光二极管;,45,延时一段时间后,再给第16行送高电平,同时给列线送“1111 1101 1111 1111”,显示出汉字“子”的最下面的一行,点亮1个发光二极管。然后再重新循环上述操作,利用人眼视觉暂留效应,一个稳定字符“子”显示出来,见图7-12。7.4.2 控制1616 LED点阵显示屏的案例 单片机控制16

21、16点阵显示屏显示字符案例。【例7-8】如图7-13,利用单片机及 74LS154(4-16译码器)、74LS07、1616 LED点阵显示屏来实现字符显示,编写程序,循环显示字符“电子技术”。,46,图7-13 控制1616LED点阵显示器(共阴极)显示字符,47,图中1616 LED点阵显示屏16行行线R0R15电平,由P1口低4位经4-16译码器74HC154的16条译码输出线L0L15经驱动后的输出来控制。16列列线C0C15的电平由P0口和P2口控制。剩下问题是如何确定显示字符的点阵编码,以及控制好每一屏逐行显示的扫描速度(刷新频率)。,48,49,50,51,52,53,54,扫描

22、显示时,单片机通过P1口低4位经4-16译码器74HC154的16条译码输出线L0L15经驱动后的输出来控制,逐行为高电平,来进行扫描。由P0口与P2口控制列码C0C15的输出,从而显示出某行应当点亮的发光二极管。下面以显示汉字“子”为例,说明其显示过程。由程序可看出,汉字“子”的前3行发光二级管的列码为“FFH,FFH,03H,F0H,FFH,FBH,”,第一行的列码为“FFH,FFH”,由P0口与P2口输出,没有点亮的发光二极管。第二行的列码为“03H,F0H”,通过P0口与P2口输出后,由图7-13的电路可看出,H03加到列线C7C0的二进制编码为“0000 0011”,这里要注意加到8

23、个发光二极管上的对应位置。按照图7-12和图7-13的连线关系,加到从左到右发光二极管应为C0C7的二进制,55,编码为“1100 0000”,即最左边的2个发光二极管不亮,其余的6个发光二极管点亮。同理,P2口输出的HF0加到列线C15C8的二进制编码为“1111 0000”,即加到C8C15的二进制编码为“0000 1111”,所以第二行的最右边的4个发光二极管不亮,如图7-12所示。对应通过P0口与P2口输出加到第3行16个发光二极管的列码为“FFH,FBH,”,对应于从左到右的C0C15的二进制编码为“1111 1111 1101 1111”,从而第3行左边数第11个发光二极管被点亮,

24、其余均熄灭,如图7-12所示。其余各行点亮的发光二极管,也是由1616点阵的列码来决定的。,56,7.5 单片机控制液晶显示模块1602 LCD的显示 液晶显示器(Liquid Crystal Display,LCD)具有省电、体积小、抗干扰能力强等优点,LCD显示器分为字段型、字符型和点阵图形型。(1)字段型。以长条状组成字符显示,主要用于数字显示,也可用于显示西文字母或某些字符,广泛用于电子表、计算器、数字仪表中。(2)字符型。专门用于显示字母、数字、符号等。一个字符由57或510的点阵组成,在单片机系统中已广泛使用。,57,(3)点阵图形型。广泛用于图形显示,如笔记本电脑、彩色电视和游戏

25、机等。它是在平板上排列的多行列的矩阵式的晶格点,点大小与多少决定了显示的清晰度。7.5.1 LCD 1602液晶显示模块简介 最常见的字符型液晶显示模块。单片机系统中常用。由于LCD显示面板较为脆弱,厂商已将LCD控制器、驱动器、RAM、ROM和液晶显示器用PCB连接到一起,称为液晶显示模块(LCd Module,LCM),用户只需购买现成的液晶显示模块即可。单片机只需向LCD显示模块写入相应命令和数据就可显示需要的内容。,58,1字符型液晶显示模块LCD 1602特性与引脚 字符型LCD模块常用的有16字1行、16字2行、20字2行、20字4行等模块,型号常用1602、1604、2002、2

26、004来表示,其中为商标名称,16代表液晶显示器每行可显示16个字符,02表示显示2行。LCD1602内部具有字符库ROM(CGROM),能显示出192个字符(57点阵),如图7-14所示。由字符库可看出显示器显示的数字和字母部分代码,恰是ASCII码表中编码。单片机控制LCD 1602显示字符,只需将待显示字符的ASCII码写入内部的显示,用数据存储器,59,图7-14 ROM字符库的内容,60,(DDRAM)内部控制电路就可将字符在显示器上显示出来。例如,显示字符“A”,单片机只需将字符“A”的ASCII码41H写入DDRAM,控制电路就会将对应的字符库ROM(CGROM)中的字符“A”的

27、点阵数据找出来显示在LCD上。模块内有80字节数据显示RAM(DDRAM),除显示192个字符(57点阵)的字符库ROM(CGROM)外,还有64字节的自定义字符RAM(CGRAM),用户可自行定义8个57点阵字符。LCD 1602工作电压4.55.5V,典型5V,工作电流2mA。标准的14引脚(无背光)或16个引脚(有背光)的外形及引脚分布如图5-15所示。,61,(a)LCD 1602的外形(b)LCD 1602的引脚图5-15 LCD 1602外形及引脚,62,引脚包括8条数据线、3条控制线和3条电源线,见表7-2。通过单片机向模块写入命令和数据,就可对显示方式和显示内容做出选择。,63

28、,2LCD1602字符的显示及命令字 显示字符首先要解决待显示字符的ASCII码产生。用户只需在C51程序中写入欲显示的字符常量或字符串常量,C51程序在编译后会自动生成其标准的ASCII码,然后将ASCII码送入显示用数据存储器DDRAM,内部控制电路就会自动将该ASCII码对应的字符在LCD1602显示出来。让液晶显示器显示字符,首先对其进行初始化设置,还必须对有、无光标、光标移动方向、光标是否闪烁及字符移动方向等进行设置,才能获得所需显示效果。对LCD 1602的初始化、读、写、光标设置、显示数据的指针设置等,都是单片机向LCD 1602写入命令字来实现。命令字见表7-3。,64,65,

29、表7-3中11个命令功能说明如下:命令1:清屏,光标返回地址00H位置(显示屏的左上方)。命令2:光标返回到地址00H位置(显示屏的左上方)。命令3:光标和显示模式设置。I/D地址指针加1或减1选择位。I/D=1,读或写一个字符后地址指针加1;I/D=0,读或写一个字符后地址指针减1。S屏幕上所有字符移动方向是否有效的控制位。S=1当写入一字符时,整屏显示左移(I/D=1)或右移(I/D=0);S=0整屏显示不移动。,66,命令4:显示开/关及光标设置。D屏幕整体显示控制位,D=0关显示,D=1开显示。C光标有无控制位,C=0无光标,C=1有光标。B光标闪烁控制位,B=0不闪烁,B=1闪烁。命

30、令5:光标或字符移位。S/C光标或字符移位选择控制位。S/C=1移动显示的字符,S/C=0移动光标。R/L移位方向选择控制位。0:左移,1:右移,,67,命令6:功能设置命令。DL传输数据的有效长度选择控制位。1:8位数据线接口;0:4位数据线接口。N显示器行数选择控制位。0:单行显示,1:两行显示。F字符显示的点阵控制位。0:显示57点阵字符,1:显示510点阵字符。命令7:CGRAM地址设置。命令8:DDRAM地址设置。LCD内部有一个数据地址指针,用户可通过它访问内部全部80字节的数据显示RAM。命令格式为:80H+地址码。其中,80H为命令码。,68,命令9:读忙标志或地址。BF忙标志

31、。BF=1表示LCD忙,此时LCD不能接受命令或数据;BF=0表示LCD不忙。命令10:写数据。命令11:读数据。例如,将显示模式设置为“162显示,57点阵,8位数据接口”,只需要向1602写入光标和显示模式设置命令(命令3)“00111000B”,即38H即可。再如,要求液晶显示器开显示,显示光标且光标闪烁,那么根据显示开关及光标设置命令(命令4),只要令D=1,,69,C=1和B=1,也就是写入命令“00001111B”,即0FH,就可实现所需的显示模式。3字符显示位置的确定 LCD1602内部有80字节DDRAM,与显示屏上字符显示位置一一对应,图7-16给出LCD1602显示RAM地

32、址与字符显示位置的对应关系。,70,图7-16 LCD内部显示RAM的地址映射图,71,当向DDRAM的00H0FH(第1行)、40H4FH(第2行)地址的任一处写数据时,LCD立即显示出来,该区域也称为可显示区域。而当写入10H27H或50H67H地址处时,字符不会显示出来,该区域也称为隐藏区域。如果要显示写入到隐藏区域的字符,需要通过字符移位命令(命令5)将它们移入到可显示区域方可正常显示。需说明的是,在向DDRAM写入字符时,首先要设置DDRAM定位数据指针,此操作可通过命令8完成。例如,要写字符到DDRAM的40H处,则命令8的格式为:80H+40H=C0H,其中80H为命令代码,40

33、H是要写入字符处的地址。,72,4LCD1602的复位LCD1602上电后复位状态为:清除屏幕显示 设置为8位数据长度,单行显示,57点阵字符。显示屏、光标、闪烁功能均关闭。输入方式为整屏显示不移动,I/D=1。,73,LCD1602的一般初始化设置为:写入命令01H(命令1),显示清屏,数据指针清0。写入命令38H(命令6),显示模式设置(162显示,57点阵,8位数据接口)。写入命令0CH(命令4),设置开显示,不显示光标。写入命令06H(命令3),写一个字符后地址指针加1。写入命令08H,显示关闭。在进行上述设置及对数据进行读取时,通常需要检测忙标志位BF,如果为1,则说明忙,要等待;如

34、果BF为0,则可进行下一步操作。LCD1602的读写操作规定见表7-4。,74,75,LCD1602与AT89S52的接口电路见图7-17。,图7-17 单片机与LCD1602接口电路,76,由图7-17可看出,单片机的P3.0、P3.1和P3.2引脚分别与LCD1602的RS、R/W*和E这3个引脚连接,只需通过指令对这3个引脚置“1”或清“0”,就可实现对LCD1602的读写操作控制。单片机的P2口与LCD1602的 D0D7相连,进行命令或数据的传送。具体来说,显示一个字符的操作过程为“读忙标志位BF写命令写显示字符自动显示”。,77,77,7.5.2 单片机控制字符型LCD 1602的

35、显示案例下面通过具体案例介绍单片机如何控制LCD1602显示字符。【例7-7】用AT89C51单片机控制LCD1602,使其显示两行文字:“Welcom to”与“Harbin Institute”,Proteus的虚拟仿真原理电路如图7-18所示。在Proteus中,LCD1602液晶显示器的对应仿真模型为LM016L(相当于14脚的LCD1602,即表7-2中的114脚)。LM016L的符号与引脚如图7-19所示,与14引脚LCD1602液晶显示器的引脚信号相同,引脚功能说明见表7-2。,78,图7-18 单片机与字符型LCD接口电路与仿真,79,80,图7-19 字符型液晶显示器LCD引

36、脚,80,81,81,82,83,83,84,84,程序说明:(1)程序中调用了3个子程序,即检测LCD1602“忙”标志、向LCD1602写入命令、向LCD1602写入数据,3个子程序中包括了相应的控制信号产生,使用时只需调用即可。(2)显示两行字符时,分别使用了相应的显示位置的设置命令(命令8)。第一行的显示位置从03H开始;第二行的显示位置从40H开始。(3)使用了R0寄存器来控制两行分别显示字符的个数。,85,85,7.6 键盘接口设计 键盘向单片机输入数据、命令等功能,是人机对话的主要手段。由若干按键按照一定规则组成。每一个按键实质上是一个按键开关,按构造可分为有触点开关按键和无触点

37、按键。有触点开关按键常见的有:触摸式键盘、薄膜键盘、导电橡胶、按键式键盘等,最常用按键式键盘。无触点开关按键有电容式按键、光电式按键和磁感应按键等。下面介绍按键式开关键盘工作原理、方式以及与键盘接口设计与软件编程。,86,86,7.6.1 键盘接口设计应解决的问题1键盘的任务 任务3项。(1)判别是否有键按下?若有,进入第(2)步。(2)识别哪一个键被按下,并求出相应的键值。(3)根据键值,找到相应键值处理程序入口。,87,2键盘输入特点 键盘一个按键实质就是一个按钮开关。图7-20(a)所示按键开关的两端分别连接在行线和列线上,列线接地,行线通过电阻接到+5V上。键盘开关机械触点的断开、闭合

38、,其行线电压输出波形如图7-20(b)所示。图7-20(b)所示的t1和t3分别为键的闭合和断开过程中的抖动期(呈现一串负脉冲),抖动时间长短与开关机械特性有关,一般为510ms,t2为稳定的闭合期,其时间由按键动作确定,一般为十分之几秒到几秒,t0、t4为断开期。,88,89,图7-20 键盘开关及其行线波形,89,3按键的识别与键号获取 按键闭合与否,反应在行线输出电压上就是呈现高电平或低电平,单片机通过对行线电平的高低状态的检测,便可确认按键是否按下与松开。为了确保单片机对一次按键动作只确认一次按键有效(所谓按键有效,是指按下按键后,一定要再松开),必须消除抖动期t1和t3的影响。判断按

39、键有效按下后,下一个问题是如何获取按下键的键号。键盘按如何获取按下键的键号,可分为非编码键盘和编码键盘。,90,90,非编码键盘是利用按键直接与单片机的I/O口线(或外部扩展的I/O口线)相连接,键盘按下时不能直接得到键号,还要通过编写程序判断I/O口线的电平来求得键号。编码键盘是键盘按下时能直接获取按下键的键号,最典型的是7.6.4小节介绍的专用键盘/显示器接口芯片HD7279,当键盘有键按下时,能直接得到按下键的键号。,91,4如何消除按键的抖动 两种去抖动方法。一种是用软件延时来消除按键抖动,基本思想:在检测到有键按下时,该键所对应的行线为低电平,执行一段延时10ms的子程序后,确认该行

40、线电平是否仍为低电平,如果仍为低电平,则确认该行确实有键按下。当按键松开时,行线的低电平变为高电平,执行一段延时10ms的子程序后,检测该行线为高电平,说明按键确实已经松开。采取以上措施,可消除两个抖动期t1和t3的影响。另一种去除按键抖动的方法是采用专用的键盘/显示器接口芯片,这类芯片中都有自动去抖动的硬件电路。常见的键盘有:独立式键盘和矩阵式键盘两种结构。,92,92,7.6.2 独立式键盘的设计 独立式键盘特点各键相互独立,每个按键各接一条I/O口线,通过检测I/O输入线的电平状态,判断哪个键被按下。图7-21为一独立式键盘,8个按键k0k7分别接到单片机的P1.0 P1.7引脚上,图中

41、上拉电阻保证按键未按下时,保证对应I/O口线为稳定高电平。当某一按键按下时,对应I/O口线就变成低电平,与其他按键相连的I/O口线仍为高电平。因此,只需读入I/O口线状态,判别是否为低电平,就很容易识别出哪个键被按下。优点是电路简单,各条检测线独立,识别按键号的软件编写简单。如按键数目较多,要占用较多I/O口线。因此独立式键盘适于按键数目较少场合,,93,93,图7-21 独立式键盘的接口电路,94,1.独立式键盘的查询工作方式【例7-8】对图7-21所示独立式键盘,用查询方式实现键盘扫描,根据按下不同按键,对其进行处理。独立式键盘查询方式的参考程序如下:,95,95,96,97,97,对应8

42、个按键的键处理子程序Pkey0Pkey7,要根据按键功能的具体要求来编写。但是需要注意的是,进入键处理子程序后,应先判断按下的按键是否松开,确认松开后,再进行按键功能的处理。所以指令“JNB P1.x,Pkeyx”(x=07)用来判断按键是否松开。,98,2.独立式键盘的中断扫描方式 上面介绍的独立式键盘的查询方式,即使键盘无按键按下,也要查询。为提高键盘扫描的工作效率,可采用中断扫描方式,即只有在按键按下时,才进行扫描查询与处理,因此中断扫描方式的键盘实时性强,工作效率高。【例7-9】设计一个采用中断方式的独立式键盘,只有在键盘有按键按下时,才向单片机发出中断请求。单片机进入中断服务程序后,

43、再对按下的键进行查询。中断方式的独立式键盘的原理电路见图7-22。图中P1.0P1.7口线接上拉电阻至+5V,当键盘中没有按键按下时,P1.0P1.7口线均为高电平。,99,图7-22 中断扫描方式的独立式键盘的接口电路,100,当某个按键按下时,按键所在行的行线为低电平,经过8输入与非门74LS30的输出以及74LS04反相后向单片机的中断请求输入引脚发出低电平的外部中断请求,单片机响应中断,进入外部中断的中断服务子程序,在中断服务子程序中,再进行按键的查询扫描,根据扫描结果跳向按下键的键处理程序。,101,101,102,102,103,程序中用到的软件延时10ms子程序,见【例7-8】。

44、,103,7.6.3 矩阵式键盘的设计 按键数目较多的场合常采用矩阵式(也称行列式)键盘。键盘由行线和列线组成,按键位于行、列的交叉点上。如图7-23所示,一个44的行列结构可构成一个16个按键k0k15的键盘,需要一个8位的并行I/O口。如果采用88的行列结构,可构成一个88=64键的键盘,只需要两个8位的并行I/O口。很明显,在按键数目较多的场合,矩阵式键盘要比独立式键盘节省较多的I/O口线。对图7-23的矩阵式键盘的查询扫描,一般4个步骤。(1)首先判别整个键盘有无按键按下,方法为单片机驱动列线P1.4P1.7输出全“0”,然后读行线P1.0P1.3的状态,104,105,图7-23 矩

45、阵式(行列式)键盘的接口电路,105,,若为全“1”,则键盘上没有闭合键,若P1.0P1.3不全为“1”,则有键按下。(2)去除键的抖动,当判别出可能有键按下时,软件延时一段时间(10ms左右)再判别键盘的状态,若仍有键闭合,则认为键盘上有确定的键按下,否则是键抖动。(3)求出按下键的键号,图7-23中的16个按键,键号依次为0,1,15。各行的首键号分别为0,4,8,12,列号依次为0,1,2,3。行线通过上拉电阻接+5V,当无键按下时,行线为高电平,当有按键按下时,对应的行线与列线短接,行线的电平将由此行线相连的列线电平决定。,106,106,如果把行线设置为单片机的输入口线,列线设置为单

46、片机的输出口线,则按键号的识别过程是:先令0列线P1.4为低电平“0”,其余3根列线都为高电平,逐行检查行线状态。如果行线P1.0P1.3都为高电平“1”,则P1.4这一列上没有按键闭合,若P1.0P1.3中有一行为低电平,则该行线与列线交叉的按键按下。如果P1.4这一列上没有按键闭合,接着再使P1.5为低电平,其余列线为高电平。用同样的方法检查P1.5这一列上有无按键闭合,以此类推。这样采用逐列扫描(只有一列为低),然后读入各行线的电平,即可求出按下键的键号N为:N=行的首键号+列号。各行的首键号分别为0,4,8,12,列号依次为0,1,2,3。编程时设置1个列号计数器,初值为0,每扫描1列

47、,列号计数器加1。,107,107,(4)判闭合键是否松开,如果松开则将键号送入A中保存,单片机根据按下键的键号,对该键的一次闭合仅作一次键功能处理。1.矩阵式键盘的查询扫描的编程【例7-10】对图7-23的矩阵式键盘,编写键盘的查询扫描程序。查询扫描的参考程序如下。,108,108,109,109,110,110,111,上述的键盘扫描程序将按下键的键号存于累加器A中,如果想要把键号显示出来,只需在P2口接一个共阳极数码管,通过下面的程序,将存于累加器A中的键号,通过查表的方法,将键值的段码通过P2口输出给数码管即可。参考的显示子程序如下。,111,查询扫描键盘无论是否有键按下,都需要进行扫

48、描。为提高键盘扫描的工作效率,可采用中断扫描方式。,112,2.矩阵式键盘的线反转法扫描矩阵式键盘的扫描要逐列扫描查询,当被按下的键处于最后一列时,则要经过多次扫描才能最后获得此按键所处的行列值。而线反转法则很简练,无论是矩阵键盘被按下的键是处于第一列或最后一列,均只需经过两步便能获得此按键所在的行列值,下面仍以图7-23的矩阵式键盘为例,介绍线反转法键盘操作的具体操作步骤。(1)让行线编程为输入,列线编程为输出,并使输出线为全低电平,则行线电平由高变低的所在行为按键所在行;(2)再把行线编程为输出,列线编程为输入,并使输出线输出为全低电平,则列线中电平由高变低所在列为按键所在列。,113,结

49、合上述两步,可确定按键所在的行和列,从而识别出所按的键。假设k3键被按下。第一步,P1.4P1.7输出全为“0”,然后,读入P1.0P1.3线的状态,结果P1.0=0,而P1.1P1.3均为1,因此,第0行出现电平的变化,说明第0行有键按下;第二步,让P1.0P1.3输出全为“0”,然后,读入P1.4P1.7的状态,结果P1.7=0,而P1.4P1.6均为1,因此第3列出现电平的变化,说明第3列有键按下。综合上述分析,即第0行、第3列按键被按下,此按键即为键k3。因此,线反转法非常简单适用,但在实际编程中不要忘记还要进行按键去抖动处理。,114,3.矩阵式键盘的中断扫描查询方式 采用中断扫描方

50、式,只有在键盘有按键按下时,才会向单片机发出中断请求,单片机执行中断服务子程序去扫描查询键盘,识别出按下的键号。如果无键按下,单片机将不会扫描键盘。该方式的优点是,实时性强,工作效率高。【例7-11】矩阵式键盘的中断查询扫描方式的设计,接口电路如图7-24所示。键盘的列线与P1口的高4位相连,行线与P1口的低4位相连。图中的4输入与门74LS21用于产生按键中断,其输入端与键盘各行线相连,经上拉电阻接至+5V,输出端接至单片机的外部中断请求输入引脚INT0*。,115,图7-24 矩阵式(行列式)键盘的中断方式的接口电路,116,当键盘没有按键按下时,与门各输入端均为高电平,无中断请求,单片机

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号