2.8.5 并口驱动简单外设
1.并口的负载能力
对于典型的单片机器件AT89S52,每根口线最大可吸收10 mA的(灌)电流,但P0口所有引脚吸收电流的总和不能超过26 mA,P1口、P2口和P3口每个口吸收电流的总和限制在15 mA,4个并口所有口线的吸收电流总和限制在71 mA。
2.驱动输出设备
(1)驱动发光二极管(LED)
LED是用半导体材料制成的具有PN结特性的发光器件,LED是单片机应用系统中最常用的输出设备。应用形式有单个LED、LED阵列和LED数码管。LED具有PN结特性,但其正向电压与普通的二极管不同,如图2-28所示。LED典型工作点为1.75 V、10 mA。由于材料、尺寸、温度的不同,特性曲线有些差别。
注:LED正向压降约为1.75 V,与普通硅二极管的正向压降0.7 V有区别。场效应管VT的导通压降与通过的电流有关,图2-28中取0.45 V。
图2-28 LED特性及其灌电流驱动
考虑到单片机并口的结构,对于LED的驱动采用灌电流的方式。P1口、P2口和P3口由于内部有上拉电阻,在它们的引脚上可以不接外部上拉电阻,但P0口内部没有上拉电阻,其引脚必须加外部上拉电阻。
对于单个LED,限流电阻RL的值为270Ω时,LED可以得到较好的亮度,但单根口线的负载能力达到了极限,接几个LED时将超过并口的负载能力。解决的第一种办法是加大限流电阻的阻值,这样亮度会变暗,但可以减小并口的负担;第二种办法是增加驱动器件。
驱动多个LED时,通常将LED接成共阴极或共阳极的形式。对于要求不高的场合可以采用图2-29所示的直接驱动方法,由于并口的驱动能力,LED的亮度不够理想。若有较高的亮度要求,可以在LED与单片机并口之间加入74HC245缓冲驱动器,如图2-30所示。
图2-29 单片机并口直接驱动
图2-30 LED经缓冲器驱动
(2)驱动LED数码管
LED数码管通常由8个发光二极管(7个笔画段和1个小数点)组成,简称数码管。当某个发光二极管导通时,相应的一个笔画或一个点就发光。控制相应的发光二极管导通,就能显示出对应字符,如图2-31所示。
图2-31 LED数码管
在七段LED数码管中,通常将各段发光二极管的阴极或阳极连在一起作为公共端,这样可以使驱动电路简单。将各段发光二极管阳极连在一起的叫共阳极数码管,用低电平驱动数码管各段的阴极,其com端接+5V;将阴极连在一起的叫共阴极数码管,用高电平驱动数码管各段的阳极,其com端接地。
数码管的两种驱动方式如图2-32所示。公共电阻限流方法接线比较简单,不同字符时各导通发光二极管电流不均衡,但发光差别并不明显;各路分别限流时,导通发光二极管电流相近、亮度相近,但接线麻烦、占印制电路板的空间大。
图2-32 数码管的两种驱动方式
要显示某字形就要使此字形的相应段点亮,也就是要送一个用不同电平组合的数据给数码管,这种装入数码管的数据编码称为字形码。
若数据总线D7~D0与dp、g、f、e、d、c、b、a按顺序对应相接,要想显示数字“8”时,共阴极数码管要送0111 1111B至数据总线,即字形码为7FH,而共阳极数码管要送数据1000 0000B至数据总线,即字形码为80 H。常用字符的字形码如表2-7所示。
表2-7 常用字符的字形码
注:表中字形码数据省略了十六进制的后缀H。
(3)驱动蜂鸣器
蜂鸣器是单片机应用系统的电声转换器件,分为压电式和电磁式两种类型。单片机应用系统中常用的是电磁式蜂鸣器。电磁式蜂鸣器采用直流电压供电,接通电源后,流过电磁线圈的电流会使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性振动并发出声音。
电磁式蜂鸣器又可分为两种类型:一是有源蜂鸣器,内部含有音频振荡电路,直接接上额定电压就可以连续发声;二是无源蜂鸣器,工作时需接入音频方波,改变方波频率可以得到不同的音调声音。两种蜂鸣器的驱动电路相同,只是驱动程序不同。蜂鸣器驱动电路如图2-33所示。
图2-33 蜂鸣器驱动电路
3.驱动输入设备
单片机应用系统中,通常将按键开关和波动开关作为简单的输入设备。按键开关主要用于某些工作的开始或结束命令,而拨动开关主要用于工作状态的预置和设定。它们的外形、符号以及和单片机的连接如图2-34所示。
图2-34 开关及其与单片机的连接
拨动开关的闭合、断开一般是在系统没有上电的情况下进行设置的,而按键开关是在系统已经上电的情况下进行操作的。当按键按下时,相当于开关闭合;当按键松开时,相当于开关断开。按键在闭合和断开时,触点会存在抖动现象。抖动现象和去抖电路如图2-35所示。
按键的抖动时间一般为5~10 ms,抖动可能造成一次按键的多次处理问题,应采取措施消除抖动的影响。消除抖动的办法有多种,如采用去抖电路或软件延时,通常采用软件延时10 ms的方法。
图2-35 按键开关的抖动现象和去抖电路
在按键较少时,常采用图2-35(b)所示的去抖电路。当按键未按下时,输出为“1”;当按键按下时,输出为“0”,即使在B位置时因抖动瞬时断开,只要按键不回A位置,输出就会仍保持为“0”状态。
当按键较多时,常采用软件延时的办法。当单片机检测到有键按下时,先延时10ms,然后再检测按键的状态,若仍是闭合状态,则认为真正有键按下。当检测到按键释放时,亦需要做同样的处理。