(俞鹤飞)我们在发电报时,先要把汉字报文编写成由不同数字组成的电报码,然后才能发送到对方。这个过程我们称为编码。当对方收到电报码后,必须把电报码翻译成汉字报文以后才能交给收报人。这个过程我们称为译码。
在数字电路中,我们把各种信息按一定规律编成由0和1组成的不同代码的过程叫做编码,能完成这种工作的电路就叫做编码电路或编码器。反过来,把代码还原成原来信息的过程就叫做译码,能完成这种工作的电路就叫做译码电路或译码器。
现在让我们来看看编码器和译码器是怎样工作的。
二-十进制编码器
我们知道,数字电路里使用的是二进制数,而我们日常使用的则是十进制数。要想把十进制数输入到数字电路中去,只能使用二进制形式的二-十进制码,即BCD码。能完成这种任务的编码电路就叫做二-十进制编码器。
袖珍计算器的键盘上有0、1、2、……9共10个数字键和其它运算符号键。当我们按下数字键时,十进制数就以BCD码的形式输入计算器中。在计算器中,这个任务是由二极管矩阵编码电路完成的,如图1。图的上方是和十进制数对应的10个数字键,右边就是被转换成的8421-BCD码,它从高位到低位的次序是P\(_{3}\)、P2、P\(_{1}\)、P0。所有的键都不按下时,所有的二极管都不导通,P\(_{3}\)、P2、P\(_{1}\)、P0线上都是低电位,输出是0000。按下数字键“0”时,输出也是0000,它正是十进制数0的BCD码。按下数字键“1”时,二极管D\(_{1}\)导通,P0线成为高电平,P\(_{1}\)、P2、P\(_{3}\)线仍是低电平,输出是0001,它就是十进制数1的BCD码。按下数字键“9”时,D14和D\(_{15}\)导通,输出是1001,即输出十进制数9的BCD码。可见按下哪个键,就可从输出端得到和它相应的8421-BCD码。

图2是另一种用与非门组成的二-十进制编码器。它是利用与非门的“全1出0、有0出1”的逻辑功能来完成编码任务的。电路中,当10个数字键都不按下时,4个与非门的所有输入端都是高电平,输出是0000。按下“0”键时,从电路上看并没有改变这种状态,输出仍是0000,即十进制数0的BCD码。当按下“1”键时,与非门1有一个输入端成为低电平,从而使它的输出P\(_{0}\)成为高电平。与此同时,与非门2、3、4的输入端没有变化,P1、P\(_{2}\)、P3仍是低电平,所以输出是BCD码0001。当按下“7”键时,与非门1、2、3各有1个输入端成为低电平,输出是BCD码0111。依此类推,按下哪个数字键,就会在输出端得到和它相应的BCD码。这种编码器因为有10个输入端和4个输出端,它的输出见典型的8421码,所以也称为10线-4线8421码编码器。

除了用与非门以外,也可以用与或非门组成编码器。例如国产中规模集成电路产品T340就是用与或非门组成的10线-4线8421码编码器。它的内部电路由4个与或非门、13个非门和1个或非门组成。因为电路组成的不同,必须在4个输出端都加接一个非门之后才能得到和图2完全相同的BCD码。
编码器是数字系统中的重要部件,除了10线-4线编码器外,还有8线-3线编码器,它能把0~7八种状态转换成3位二进制代码。还有能把输入的十进制数转换成纯二进制码的二进制编码器等等。我们可以根据需要选用各种现成的集成化产品。
二-十进制译码器
二-十进制编码器的作用是作为一个桥梁把十进制数输入给数字系统。当数字系统需要输出它的运算结果或控制量时,就要使用二-十进制译码器,它能把BCD码转换成十进制数。因为这种译码器有4个输入端和10个输出端,所以也称为4线-10线译码器。
图3是一个二极管矩阵式4线-10线译码器。它用8根输入线表示BCD码的4位,因为输入的BCD码是4位二进制数,每1位都可能出现“1”或“0”两种状态,所以它的每1对输入线表示BCD码的1位。图右边的10根线Q\(_{0}\)~Q9是十进制数输出,每1根线表示十进制数的1个数。每次输出只有1根线是高电平,其余9根都是低电平。例如Q\(_{0}\)线是高电平就表示输出十进制数0,Q1线是高电平时表示输出十进制数1,……。图中D\(_{1}\)、D2、D\(_{3}\)、D4和R\(_{1}\)组成1个二极管4输入端与门,输出是Q0;D\(_{5}\)、D6、D\(_{7}\)、D8和R\(_{2}\)组成另一个二极管与门,输出是Q1;……。总共有40个二极管和10个电阻,组成10个与门。我们知道,与门的逻辑功能是:“全1出1、有0出0”。当输入是BCD码0000时,8根输入线中有4根是低电平,有4根是高电平,即A-\(_{0}\)=1,A-1=1,A-\(_{2}\)=1,A-3=1。这时由二极管D\(_{1}\)、D2、D\(_{3}\)、D4组成的与门输出端Q\(_{0}\)成为高电平,其余各输出线仍保持低电平,这就表示已经把输入的BCD码0000译成十进制数0输出。当输入是BCD码0001,即A0=1,A-\(_{1}\)=1,A-2=1,A-\(_{3}\)=1时,只有D5、D\(_{6}\)、D7、D\(_{8}\)组成的与门输出端Q1成为高电平,其余各输出线仍是低电平,这就表示译码器输出十进制数1。依此类推,当输入为1001时,输出线Q9为高电平,表示译出的是十进制数9。

用与非门也能组成译码器。图4是国产中规模集成电路产品4线-10线译码器T331的电路。从图看到,它的内部电路由8个非门和10个4输入端与非门组成。8个非门连成4对,向10个与非门提供BCD码的输入数据,使其中的1个与非门有输出,表示被译出的1个十进制数。由于它使用的是与非门,所以它是低电平输出,也就是只有被译中的那个与非门的输出是低电平,其余9个与非门输出都是高电平,因此要在每个输出端加接1个非门之后才能得到和图3相同的输出。

7段字形译码器
每个袖珍计算器都有显示器,有8位的,也有10位的。这种显示器的每1位就是1个7段字形显示的数码管。每个数码管由7道直线组成,每1道直线是1个发光二极管,见图5(a)。当二极管负极接地时,在它的正极接上高电平,就可使它发光。由于输入到7段字形数码管的信号是经过反相器才送到正极的,见图5(b),所以当输入是0电平时,相应段的二极管才发亮,而输入是1电平时,二极管不亮。通过7个发光二极管的亮与不亮可以组成不同的字形。例如g二极管不亮,其余二极管都亮,就显示出字形“0”;当f、e不亮,其余发光二极管都亮时,显示出十进制数“3”……。按照这个规律,我们把7个二极管a、b、c、d、e、f、g,按从g到a的顺序排列,可以得到显示的字形和相对应的代码表,见表1。例如,显示十进制数0时,g=1,其它都是0,它的代码是:gfedcba=1000000;显示十进制数7时,g、f、e、d均为1,其余为0,它的代码是:gfedcba=1111000;其它依此类推。


因为计算器输出的是BCD码,要想在数码管上显示出十进制数,就必须先把BCD码变换成7段字形数码管所要求的代码。我们把能够将计算器输出的BCD码变换成7段字形代码;并使数码管显示出十进制数的电路称为7段字形译码器。
国产中规模集成电路产品T338就是7段字形译码器。它有4个输入端A、B、C、D,1个禁止端I\(_{B}\),7个输出端Qa、Qb、……Qg。输入A、B、C、D的排列是BCD码从低到高的4位。正常工作时IB必须接高电平,即要求I\(_{B}\)=1,输入才有效。它的内部电路由7个与或非门和10个非门组成。从7段字形译码器的真值表(表1)可以看到:当输入是0000时,输出是1000000,显示的是十进制数0;当输入是0111时,输出是1111000,显示的是十进制数7。当输入是1111或者IB=0时,任何字形都不显示。这个代码称为消隐码或熄灭码。当8位显示器实际只要显示最低的3位时,前面5位各送1个消隐码就可以使它们不显示任何字形,使显示的数字更清晰可读。
复习思考题
1.二-十进制编码器和译码器的功能是什么?它是怎样变换代码的?
2.画出用与非门和非门组成的2线-4线译码器,要求高电平输出。
上期答案
1.①(37)\(_{1}\)0=(100101)2=(00110111)\(_{2}\)-10
②(138)\(_{1}\)0=(10001010)2=(000100111000)\(_{2}\)-10
③(1010101)\(_{2}\)=(85)10=(10000101)\(_{2-1}\)0
④(1111111)\(_{2}\)=(127)10=(000100100111)\(_{2-1}\)0
⑤(000101010011)\(_{2}\)-10=(153)10=(10011001)\(_{2}\)