在我们设计单片机电路的时候,单片机的 IO 口数量是有限的,有时并满足不了我们的设计需求,但是我们为了控制更多的器件,就要使用一些外围的数字芯片,这种数字芯片由简单的输入逻辑来控制输出逻辑,比如 74HC138这个三八译码器。图 1 是 74HC138 在我们原理图上的一个应用。
图1从这个名字来分析,三八译码器,就是把 3 种输入状态翻译成 8 种输出状态。74HC138 有 1~6 一共是 6 个输入引脚,但是其中 4、5、6 这三个引脚是使能引脚。使能引脚这三个引脚如果不符合规定的输入要求,Y0 到 Y7 不管你输入的 1、2、3 引脚是什么电平状态,总是高电平。所以我们要想让这个 74HC138 正常工作,ENLED 那个输入位置必须输入低电平,ADDR3 位置必须输入高电平,这两个位置都是使能控制端口。 第1~3脚A、B、C,二进制输入脚。第4~6脚片选信号控制,只有在4、5脚为“0”6脚为“1”时,才会被选通,输出受A、B、C信号控制。其它任何组合方式将不被选通,且Y0~Y7输出全为“1”。第8脚GND,电源地。 第15脚VCC,电源正极。 通过控制选通脚来级联,使之扩展到十六位。
对于数字器件的引脚,如果一个引脚输入的时候,有 0 和 1 两种状态;对于两个引脚输入的时候,就会有 00、01、10、11 这四种状态了,那么对于 3 个输入的时候,就会出现 8 种状态了,大家可以看下边的这个真值表——图 2,其中输入是 A2、A1、A0 的顺序,输出是从Y0、Y1......Y7 的顺序。
图2任一输入状态下,只有一个输出引脚是低电平,其他的引脚都是高电平。
图3图3 8 个 LED 小灯的总开关三极管 Q16 基极的控制端是LEDS6,也就是 Y6 输出一个低电平的时候,可以开通三极管 Q16,从右侧的希望输出的结果,我们可以推导出我们的 A2、A1、A0 的输入状态应该是 110。那么我们再整体捋一遍点亮 LED 小灯的过程,首先看 74HC138,我们要让 LEDS6 为低电平才能导通三极管 Q16,所以 ENLED = 0;ADDR3 = 1;保证 74HC138 使能。然后 ADDR2 =1; ADDR1 = 1; ADDR0 = 0;这样保证了三极管 Q16 这个开关开通,5V 电源加到 LED 上。
实验程序
#include<reg51.h>
sbit HC138A=P2^2; //定义译码器输入端A在P2.2管脚上
sbit HC138B=P2^3; //定义译码器输入端B在P2.3管脚上
sbit HC138C=P2^4; //定义译码器输入端C在P2.4管脚上
void delay(unsigned int i)
{
unsigned char j;
for(i;i>0;i++)
for(j=255;j>0;j--);
}
main( )
{
//点亮第一个LED灯
HC138C=0;HC138B=0;HC138A=0;
delay(1500); //延时
//点亮第二个LED灯
HC138C=0;HC138=0;HC138A=1;
delay(1500);//延时
//点亮第三个LED灯
HC138C=0;HC138B=1;HC138A=0;
delay(1500);//延时
//点亮第四个LED灯
HC138C=0;HC138B=1;HC138A=1;
delay(1500);//延时
//点亮第五个LED灯
HC138C=1;HC138B=0;HC138A=0;
delay(1500);
//点亮第六个LED灯
HC138C=1;HC138B=0;HC138A=1;
delay(1500);
HC138C=1;HC138B=1;HC138A=0;
delay(1500);
HC138C=1;HC138B=1;HC138A=1;
delay(1500);
}
网友评论