译码和显示在各种类型的数字仪表、检测设备及其他数字化系统中都是不可缺少的组成部分,通过实验进一步熟悉它们的工作原理是非常必要的。
一、实验目的
1. 熟悉译码器、计数器、七段译码器和LED显示器的使用方法;
2.学会控制电路的基础设计方法,提高综合实验的技能,为学习微机打下基础。
二、实验思路和实验前准备
1. 熟悉译码器的逻辑功能
图3.2.1 74LS138逻辑符号图
一个译码器是将输入确定位数二进制代码的不同组合“翻译”成不同的对应输出信号。常用的译码器有教材上介绍的3-8译码器74LS138,即输入有3位二进制,其对应的8种组合分别与一个输出对应,其逻辑符号如图3.2.1。当所有74LS138的输入控制端有效时,输出与输入最小项的对应关系是 (i=0,1,…7)。因此教材中已经介绍了它可以实现多输出逻辑函数。但在数字系统的设计中,译码器的另一个更为重要的作用是地址译码,也就是说,译码器将A0、A1、A2输入的三位地址“翻译”成8个输出信号,A0、A1、A2的一个确定值仅对应有一个输出为低电平有效,一般在数字计算机系统中,译码器的这8个输出信号分别接到其它器件的片选端 , 即Chip Select,其上的横线代表片选信号是低电平有效,即低电平选中该芯片,它就可以与计算机通信数据。因此74LS138的8个输出最多可以连接8个计算机外设接口,而任一时间最多只选中一个工作。图3.2.2就是早期的PC计算机使用74LS138译码器构成计算机中DMA控制器8237、中断控制器8259A、计数/定时器T/C(8253)、并行可编程接口PPI(8255A)、DMA页面寄存器及NMI屏蔽寄存器的片选或控制端。根据图中连接方法,可得到各芯片或寄存器的地址空间如图3.2.2右面所列。在信号AEN=1时,大家分析图中所标的各个芯片的地址范围是否正确?这一部分在学习微型计算机原理时会有更深刻的体会。
图3.2.2 IBM—PC/XT 系统主板 I/O接口地址译码电路
译码器还有许多其它的型号,与集成逻辑门中介绍的方法一样,可以在丰富的网络资源中得到找到需要的相关信息。
另外,在实验前,有必要先介绍一下器件符号的概念,对于同一个器件的逻辑符号图或引脚图,不同的器件手册或教材使用的引脚符号和表示形式都不一样,也许大家在学习过程中已经注意到这一点。为了与教材保持一致,我们对逻辑符号图进行规范,即逻辑符号框图内所有变量均为正逻辑(即框内符号上没有非号),逻辑符号框图外输入端的小圆圈表示该输入控制端为低电平有效,而输出端的小圆圈表示反码输出。即小圆圈实现了逻辑非运算,那么逻辑符号框图外对应的每个引脚的符号或变量名就默认为:当逻辑符号框图外引脚没有小圆圈时,那么该引脚对应的变量名与框图内符号一样,但用斜体表示是变量。例如,图3.2.1中的A0、A1、A2和E3;当框图外引脚有小圆圈时,那么该引脚对应的变量名是在框内符号上冠一非号,例如,图3.2.1中的 、 、… 、 和 。以后框图外引脚对应的变量名不再标出,但使用时按照以上规定。但要注意这只是教材的规定,并不是标准,其它的参考书或器件手册中的标法可能会五花八门。因此,使用器件时,大家学会使用器件的方法是最重要的,这样面对不断出现的新器件才不会束手无策。通过大量的使用集成器件,大家会发现使用中小规模的集成器件只要了解以下几点即可:
l 在逻辑符号图或原理图中,器件的输入信号一般在图框的左面或上面,输出在右面;
l 当输入信号端有小圆圈(一般是控制输入端),表示该端为低电平有效,当输出信号端有小圆圈,表示器件工作时该端输出低电平有效;
l 多控制端芯片只有当所有控制端同时有效时,才可以实现芯片的逻辑功能;
l 如果资料中给出了器件的功能表,要学会看对应的功能表,器件功能以功能表为准;
l 资料也是经常会有出错的情况,遇到问题可以通过实验来最后验证。
2. 计数器
计数器的功能是累计输入脉冲个数。它是数字系统中使用最为广泛的时序逻辑部件。计数器的种类非常繁多,但为了降低集成电路的价格,所以计数器也是批量生产了通用的十六进制(二进制)和十进制计数器。但有时会用到其它进制计数,比如,数字钟的24和60进制等,对于其它进制计数器可以通过教材中介绍方法使用反馈的形式实现。比如,现有一块十六进制计数器74LS161,其功能如表3.2.1,逻辑符号如图图3.2.3。使用74LS161的清0端( )作为反馈清0,实现十进制计数的原理如图3.2.4所示。
3. LED(Light Emitting Diode)显示器(七段数码管)
LED显示器在许多的数字系统中作为显示输出设备,使用非常广泛。它的结构是由发光二极管构成如图3.2.5所示的a、b、c、d、e、f和g七段,并由此得名,实际上每个LED还有一个发光段dp,一般用于表示小数点,所以也有少数的资料将LED称为八段数码管。
LED内部的所有发光二极管有共阴极接法和共阳极接法两种,即将LED内部所有二极管阴极或阳极接在一起并通过com引脚引出,并将每一发光段的另一端分别引出到对应的引脚,LED的引脚排列一般如图3.2.5所示,使用时以具体型号的LED资料为依据。通过点亮不同的LED字段,可显示数字0,1,┅,9和A,b,C,d,E,F等不同的字符及自定义一些段发光代表简单符号。
图3.2.6为LED的使用举例,图中的LED为共阳极接法,因此,com端接5V电压,其它引脚端通过限流电阻接到锁存器74LS373的输出,当各段输入端为逻辑“1”,对应的LED不亮;各段输入端为逻辑“0”时,对应LED才发亮。使用时要根据LED正常发光需要的电流参数估算限流电阻取值。电阻取值越小,电流大,LED会更亮,但要注意长时间过热使用烧坏LED。
LED多数情况用于显示十进制数字,要将0~9的数字用7段显示,必须将数字转换为LED对应七段码的信息,比如,要显示“0”,就是让a、b、c、d、e和f段发光,显示“1”,让b和c段发光,等等如表3.2.1所示。然后根据LED是共阴极还是共阳极接法确定LED各输入端应接逻辑1还是逻辑0,如果是共阳接法,要显示“0” 时,a、b、c、d、e和f段就要输入逻辑0,共阴极接法则恰巧相反。也就是说,对于共阴极和共阳极两种不同的接法,显示同一个字符时,对应的显示段码是不同的,互为反码。表3.2.2列出了这两种接法下的字形段码关系表。表中的段码数字是以LED的8段与二进制字节数以下列对应关系为前提得到的:
比如为了显示“0”,对应共阴极应该使D7D6D5D4D3D2D1D0 = 00111111B,即3FH;对共阳极应该使D7D6D5D4D3D2D1D0 = 11000000B,即C0H。如表3.2.2所示,从表中可以看出,对于同一个显示字符,共阴极和共阳极的七段码互为反码。
将待显示内容“翻译”为LED段码的过程,可以由软件查表方法实现译码,这在学习微型计算机有关课程时会使用。也可以采用专用芯片,比如,带驱动的LED七段译码器74LS47及74LS48、74LS49等,依靠硬件实现译码。
表3.2.2 7段LED显示器字符段码表
显示字符
|
共阴极段码
|
共阳极段码
|
显示字符
|
共阴极段码
|
共阳极段码
|
0
|
3FH
|
C0H
|
C
|
39H
|
C6H
|
1
|
06H
|
F9H
|
d
|
5EH
|
A1H
|
2
|
5BH
|
A4H
|
E
|
79H
|
86H
|
3
|
4FH
|
B0H
|
F
|
71H
|
8EH
|
4
|
66H
|
99H
|
·
|
80H
|
7FH
|
5
|
6DH
|
92H
|
P
|
73H
|
82H
|
6
|
7DH
|
82H
|
U
|
3EH
|
C1H
|
7
|
07H
|
F8H
|
T
|
31H
|
CEH
|
8
|
7FH
|
80H
|
Y
|
6EH
|
91H
|
9
|
6FH
|
90H
|
8.
|
FFH
|
00H
|
A
|
77H
|
88H
|
“灭”
|
00H
|
FFH
|
b
|
7CH
|
83H
|
┇自定义
|
┇
|
┇
|
4.七段译码器
七段译码器也称为BCD—七段显示译码器,顾名思义,它是将输入的BCD码翻译成LED显示该BCD的七段信息输出。七段译码器有输出低电平有效和高电平有效的多种型号。当选用的LED是共阳极接法时,应使用低电平输出有效的七段译码器,如7446和7447等;当选用的LED是共阴极接法时,应使用高电平输出有效的七段译码器,如7448和7449(OC输出)等。
七段译码器驱动LED的原理如图3.2.7所示,图中的“?”是表示LED和七段译码器之间一般还要接限流电阻或其它匹配电路,或者驱动译码器是OC输出,需要接上拉电阻。七段译码器内部一般包含了LED的驱动电路,驱动共阳极LED的译码器(输出低电平对应段亮)驱动电流一般较大(灌电流),如果该电流与LED器件的正常工作电流近似,那么可以直接驱动LED,如果驱动电流大于LED正常电流许多,那么两者之间要加限流电阻,根据LED的参数估算限流电阻的大小;如果七段译码器驱动能力不够大,特别是驱动共阴极LED时,可以在两者之间加适当的上拉电阻,比如7448驱动共阴极的BS201时,要LED有正常显示亮度就要加上拉电阻[2]。
LED也有多种型号,如BS211、BS212、BS213为共阳型;BS201、 BS202、 BS203为共阴型。每种型号的LED厂家手册都提供了详细功能及参数介绍(可以通过资料或网络查找),比如,七段共阴磷砷化镓显示器BS201主要参数:
1)消耗功率 PM=150mW
2)最大工作电流 IFM=100mA
3)正常工作电流 IF=40mA
4)正向压降 VF ≤ 1.8V
5)发红色光
6)BS201燃亮电压为5v
共阴极BS202LED的PM=300mW,IFM=200 mA,IF=60mA,VF ≤ 1.8V,VR≥5V,发红光。
实验中采用七段共阳极数码管(TFK-433)和74LS47七段驱动器,查找它们的详细资料,分析两者之间应如何连接?画出连线图。
5. 多个LED的动态扫描显示
在许多实际的系统中,经常需要多个LED显示系统的信息,比如,数字钟实验要显示时、分和秒信息,就必须要6个LED,对这些LED的控制也可以和上面一位LED显示器一样,采用6个七段译码器驱动每一个LED,并使所有LED的公共端始终接有效信号,即共阴极LED公共端接地,共阳极LED公共端接电源。这种LED显示方式称为静态显示方式。采用静态方式,LED亮度高,但这是以复杂硬件驱动电路作为代价的,硬件成本高。
因此,在实际使用时,特别是有微处理器的系统中,如果用多位的LED显示,一般采取动态扫描方式、分时循环显示,即多个发光管轮流交替点亮。这种方式的依据是利用人眼的滞留现象,只要在1秒内一个发光管亮24次以上,每次点亮时间维持2ms以上,则人眼感觉不到闪烁,宏观上仍可看到多位LED同时显示的效果。动态显示可以简化硬件、降低成本、减小功耗。图3.2.8是一个6位LED动态显示电路,段驱动器输出LED字符7段代码信息,位驱动器输出6个LED的位选信号,即分时使Q0 ~ Q5轮流有效,使得LED0~LED5轮流显示。
表3.2.1 BCD码与LED相应发光段对照表
图3.2.6 LED显示举例
图3.2.8 多位LED动态显示电路
三、实验内容和步骤
1.验证74LS138的逻辑功能
如图3.2.9使74LS138的所有控制输入信号E3、 和 都分别有效,由逻辑开关提供数字输入信号,接上74LS138的电源和地线,给一组输入数据测量一次8个输出的逻辑电平,或者使用ET-3200A学习机上的逻辑显示器LED监视输入变化时,输出的状态,列数据记录表,记录实验数据。
然后,使图3.2.9中的任意一个控制输入端无效,比如,将E3端改为接地,然后再改变A0、A1和A2数字输入端,观察8个输出端是否有变化?
2. 熟悉计数器、七段译码器和LED显示器逻辑功能
按图3.2.4连线实现一位十进制计数器,由七段共阳极数码管(TFK-433)显示计数结果,其引脚排列同图3.2.5。数码管由BCD—七段显示译码器(74LS47)驱动,其引脚排列如图3.2.10所示,TFK-433和74LS47之间按实验前准备分析的方式连接。一位十进制计数器的电路原理图如图3.2.11所示,搭接电路并实验。ET-3200A学习机上的1Hz信号可以作为计数输入,或者用555构成1Hz的信号作为输入计数器输入。
图3.2.9 74LS138实验
2. 验证人眼的滞留现象
首先,将ET-3200A学习机上的1Hz时钟信号接到逻辑显示器的L4端,观察L4的显示效果;然后,将1KHz时钟信号接到逻辑显示器的L4端,观察L4的显示效果;最后将100KHz时钟信号接到逻辑显示器的L4端,观察L4的显示效果。
记录观察的到现象,分析原因。
四、报告要求
1. 按照实验顺序,分析各部分实验内容与理论分析是否一致。附上原始记录的数据表格;并回答各部分实验内容中提出的问题;
2. 如果实验中遇到问题或故障,给出解决方法。没能及时解决的,分析原因。
五、其他实验手段
1. 在MAX+PLUSⅡ下用VHDL实现74LS138功能,并仿真功能是否正确。以下提供了VHDL的译码器代码。
library IEEE;
use IEEE.std_logic_1164.all;
entity decoder3_8 is
port
( A2, A1, A0, E3, E2, E1: IN STD_LOGIC;
Y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );
end decoder3-8;
ARCHITECTURE rt1 OF decoder3_8 IS
SIGNAL indate: STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
indate <= A2 & A1 & A0;
PROCESS(INDATE, E3, E2, E1)
BEGIN
IF (E3=‘1‘ AND E2=’0’ AND E1=’0’) THEN
CASE indate IS
WHEN "000" => Y <= "11111110";
WHEN "001" => Y <= "11111101";
WHEN "010" => Y <= "11111011";
WHEN "011" => Y <= "11110111";
WHEN "100" => Y <= "11101111";
WHEN "101" => Y <= "11011111";
WHEN "110" => Y <= "10111111";
WHEN "111" => Y <= "01111111";
WHEN OTHERS => Y <= "XXXXXXXX";
END CASE;
ELSE
Y <= "11111111";
END IF;
END PROCESS;
END rt1;
2. 用VHDL实现计数功能和七段译码功能。
3. 用原理图方法实现74LS138的功能。
|