您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 第5章IO口应用-显示与开关键盘输入.
第5章I/O口应用-显示与开关/键盘输入1内容概要2单片机片内的I/O口常见的显示器件常见的输入器件发光二极管LED数码管LCD液晶屏开关键盘拨盘开关3发光二极管4LED数码管5LCD液晶屏6常见的输入器件5.1单片机控制发光二极管显示第2章介绍了单片机片内4个I/O端口P0口~P3口的内部电路以及外部引脚特性。如果P0口作为通用I/O使用,由于漏极开路,需要外接上拉电阻。而P1~P3口内部已有30kΩ左右的上拉电阻。下面首先讨论P1~P3口如何与LED发光二极管连接。发光二极管常用来指示系统工作状态,制作节日彩灯、广告牌匾等。大部分发光二极管工作电流1~5mA之间,其内阻为20~100Ω。电流越大,亮度也越高。为保证发光二极管正常工作,同时减少功耗,限流电阻选择十分重要,若供电电压为+5V,则限流电阻可选1~3kΩ。5.1.1单片机与发光二极管的连接单片机通过并行端口P1~P3直接驱动发光二极管,电路如图5-1所示。P0口与P1、P2、P3口相比,P0口每位可驱动8个LSTTL输入,而P1~P3口每一位的驱动能力,只有P0口的一半。当P0口的某位为高电平时,可提供400µA的拉电流(见图5-1(a));当P0口某位为低电平(0.45V)时,可提供3.2mA的灌电流(见图5-1(b)),而P1~P3口内部有30kΩ左右的上拉电阻,如果高电平输出,则从P1、P2和P3口输出的拉电流Id仅为几百µA,驱动能力较弱,亮度较差,如图5-1(a)所示。9图5-1发光二极管与单片机并行口的连接如果端口引脚为低电平,能使灌电流Id从单片机的外部流入内部,则将大大增加流过的灌电流值,如图5-1(b)所示。所以,AT89S51单片机任何一个端口要想获得较大的驱动能力,要采用低电平输出。如果一定要高电平驱动,可在单片机与发光二极管之间加驱动电路,如74LS04、74LS244等。10115.1.2单片机I/O端口控制发光二极管的编程发光二极管与单片机的I/O端口的连接,如图5-1(b)所示。如要点亮某发光二极管,只需该I/O端口位写入“0”即可。下面通过一个例子介绍如何对I/O端口编程实现对发光二极管亮灭的控制。【例5-1】制作一个单片机控制的流水灯,原理电路见图5-2,8个发光二极管LED0~LED7经限流电阻分别接至P1口的P1.0~P1.7引脚上,阳极共同接高电平。编写程序,每次点亮一个发光二极管,控制发光二极管由上至下的反复循环流水点亮。说明:本例采用了Proteus环境下的虚拟仿真,7.5版本元件库中没有AT89S51单片机,采用的是AT89C51来代替AT89S51,以下同。参考程序如下:1213图5-2单片机控制的流水灯ORG0100HSTART:MOVR2,#8MOVA,#0FEH;FEH为点亮P1.0脚发光二极管需写入;P1口的控制码LOOP:MOVP1,A;控制码写入P1口,点亮相应的LEDLCALLDELAY;调用延时子程序RLA;控制码循环左移,点亮下一位DJNZR2,LOOP;判断左移是否超过8位,未超过继续循环LJMPSTART;左移循环已8次,再重新进行下一次循环点亮1415DELAY:MOVR5,#20;延时子程序,延时约0.2sD1:MOVR6,#20D2:MOVR7,#248D3:DJNZR7,D3;R7不为0则原地跳转DJNZR6,D2DJNZR5,D1RETEND5.2开关状态检测检测开关处于闭合状态还是打开状态,只需把开关一端接到I/O端口的引脚上,另一端接地,然后通过检测I/O端口引脚的电平来实现。【例5-2】如图5-3所示,利用单片机、1个开关k和1个发光二极管LED,构成一个简单的检测开关k是否闭合的系统。图5-3中,开关k的一端接到单片机P3.0引脚上,并通过上拉电阻接到+5V上,开关的另一端接地,当开关打开时,P3.0引脚为高电平,当开关闭合时,P3.0引脚为低电平。16图5-3开关、LED发光二极管与P1口的连接单片机对开关状态的检测是由程序检测P3.0引脚的输入电平是高还是低。当开关闭合,即P3.0脚为低电平;当开关打开,P3.0引脚为高电平。P1.0引脚接发光二极管的阴极LED,当开关k闭合时,LED点亮;开关打开时,LED熄灭。开关k与LED没有任何电气上的联系。19参考程序如下:ORG0100HSTART:JBP3.0,NOLIG;判P3.0高还是低,P3.0高;开关打开,跳NOLIGCLRP1.0;P3.0为低,开关闭合,则;P1.0输出0,点亮LEDSJMPSTARTNOLIG:SETBP1.0;开关为打开状态,P1.0置1;LED熄灭SJMPSTART;返回END5.3单片机控制LED数码管的显示5.3.1LED数码管显示原理LED数码管是常见的显示器件。LED数码管为“8”字型的,共计8段(包括小数点段在内)或7段(不包括小数点段),每一段对应一个发光二极管,有共阳极和共阴极两种,如图5-4所示。共阳极数码管的阳极连接在一起,公共阳极接到+5V上;共阴极数码管的阴极连接在一起,通常此公共阴极接地。对于共阴极数码管,当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极数码管的阳极连接在一起接+5V,当某个发光二极管的阴极接低电平时,该发光二极管被点亮,相应的段被显示。2021图5-48段LED数码管结构及外形为了使LED数码管显示不同的字符,要把某些段点亮,就要为数码管的各段提供一个字节的二进制代码,即段码。习惯上以“a”段对应字型码字节的最低位。各种字符的段码如表5-1所示。如要在数码管上显示某一字符,只需将该字符的段码加到各段上即可。2223例如某存储单元中的数为“02H”,想在共阳极数码管上显示“2”,需要把“2”的段码“A4H”加到数码管各段。通常采用的方法是将欲显示的字符的段码作成一个表,根据显示的字符从表中查找到相应的段码,然后单片机把该段码输出到数码管的各个段上,同时数码管的公共端接+5V,此时在数码管上显示出字符“2”。24【例5-3】用单片机控制一个8段LED数码管,如图5-5所示。要求数码管反复循环显示单个数字:0~9。图5-5控制数码管循环显示单个数字图5-5中,采用了共阳极数码管,R1~R7为限流电阻。单片机P0口输出段码,数码管的公共段接+5v。欲显示的数字0~9的字型码由于无规律可循,只能采用查表的方式来完成要求,这样可按着数字0~9的顺序,把每个数字的字型码按顺序排好,形成一个段码表。根据要显示的数字,查找到相应的段码,从而控制LED数码管显示相应的字符。读者通过本例应掌握段码查表程序的编写。26参考程序如下:ORG0100HSTART:MOVDPTR,#TABLE;指针指向表头地址S1:MOVA,#00H;设置地址偏移量MOVCA,@A+DPTR;查表取得段码,送ACJNEA,#01H,S2;判断A中段码是否为结束符01H,不是则跳S2继续显示LJMPSTART;是结束符01H,重新从;开始显示S2:MOVP0,A;段码送LED显示LCALLDELAYINCDPTR;指针加1LJMPS1DELAY:MOVR5,#20;延时子程序D2:MOVR6,#20D1:MOVR7,#248D3:DJNZR7,D3DJNZR6,D1DJNZR5,D2RET28TABLE:DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h;共阳极数码管段码表DB01H;结束符END程序设计中,为达到反复循环显示数字0~9的目的,在段码表中设置了一个结束符01H,来控制反复循环显示。295.3.2LED数码管的显示方式1.静态显示方式静态显示就是指无论多少位LED数码管,都同时处于显示状态。多位LED数码管工作于静态显示方式时,各位的共阴极(或共阳极)连接在一起并接地(或接+5V);每位数码管的段码线(a~dp)分别与一个单片机控制的8位I/O口锁存器输出相连。如果送往各个LED数码管所显示字符的段码一经确定,则相应I/O口锁存器锁存的段码输出将维持不变,直到送入下一个显示字符的段码。因此,静态显示方式的显示无闪烁,亮度较高,软件控制比较容易。3031图5-6所示为4位LED数码管静态显示电路,各个数码管可独立显示,只要向控制各位I/O口锁存器写入相应的显示段码,该位就能保持相应的显示字符。这样在同一时间,每一位显示的字符可以各不相同。但是,静态显示方式占用I/O口线较多。对于图5-6所示电路,要占用4个8位I/O口(或锁存器)。如果数码管数目增多,则还需要增加I/O口的数目。在实际的系统设计中,如果显示位数较少,可采用静态显示方式。但显示位数较多时,为了降低成本,一般采用动态显示方式。图5-64位LED静态显示的示意图2.动态扫描显示方式显示位数较多时,静态显示所占用的I/O口多,为节省I/O口与驱动电路的数目,常采用动态扫描显示方式。将所有LED数码管显示器的段码线的相应段并联在一起,由一个8位I/O端口控制,而各显示位的公共端分别由另一单独的I/O端口线控制。34图5-7所示为一个4位8段LED数码管动态扫描显示电路的示意图。其中单片机向I/O(1)端口发出欲显示字符的段码,而显示器的位点亮控制使用I/O(2)端口中的4位口线,来控制数码管公共端的电平,每一时刻,只有1位位选线有效,即选中某一位显示,其他各位位选线都无效,不显示。每隔一定时间逐位地轮流点亮各数码管(扫描),由于数码管的余辉和人眼的“视觉暂留”作用,只要控制好每位数码管点亮显示的时间和间隔,则可造成“多位同时亮”的假象,达到4位同时显示的效果。图5-74位LED数码管动态显示示意图各位数码管轮流点亮的时间间隔(扫描间隔)应根据实际情况而定。发光二极管从导通到发光有一定的延时,如果点亮时间太短,发光太弱,人眼无法看清;时间太长,产生闪烁现象,而且此时间越长,占用单片机时间也越多。另外,显示位数增多,也将占用单片机的大量时间,因此动态显示的实质是以执行程序的时间来换取I/O端口数目的减少。为克服动态显示的弊病,可采用5.6.4小节介绍的专用的键盘/显示器芯片,由芯片内部硬件扫描电路自动完成显示数据的扫描刷新。365.3.3LED数码管静态显示设计【例5-4】用AT89S51设计一个2位LED数码管显示的“秒表”,显示时间为00~99秒,每秒自动加1。原理电路如图5-8所示。电路采用单片机的P2口、P3口分别控制两个LED数码管作为“秒表”的时间显示。显示数字的段码采用查表方法。“秒”计时产生采用软件延时的方法。由本例可见,采用静态显示,需要一个数码管对应一个I/O端口。当数码管的数目较多时,需要占用较多的I/O端口。但是软件编程比较简单,只需向P2口、P3口输出显示数字的段码即可,且显示不闪烁。38图5-82位LED数码管静态显示的秒表3940425.3.4LED数码管动态显示设计下面介绍单片机控制数码管动态显示的案例。【例5-5】图5-9所示的动态扫描显示电路,由单片机控制8只共阳极数码管,同时在数码管上同时显示8个数字1~8。电路中P0口输出显示字符的段码,P2口输出点亮某位的位选码。由于8位数码管的各段是并联的,P0端口一次只能送出一个显示段码,即一次只能点亮1位数码管。单片机先控制左边第1个数码管显示1,经过延时后,再控制左边第2个数码管显示2,……,直至第8个数码管显示8,反复循环上述过程。图5-9数码管采用动态显示方式同时显示数字1~8单片机对8个数码管进行快速位选扫描,只要位选扫描速度选择适当,虽然是每次只点亮一位数码管,但由于数码管的余辉和人眼的“视觉暂留”作用,只要控制好每位数码管显示的时间和间隔,则可造成“多位同时亮”的假象,达到8位数码管同时显示字符的效果。44455.4单片机控制LED点阵显示器显示LED点阵显示器应用非常广泛,在许多公共场合,如商场、银行、车站、机场、医院随处可见。不仅能显示文字、图形,还能播放动画、图像、视频等信号。LED点阵显示器分为图文显示器和视频显示器,有单色显示,还有彩色显示。下
本文标题:第5章IO口应用-显示与开关键盘输入.
链接地址:https://www.777doc.com/doc-2110262 .html