
☛ 功能说明
利用 Arduino UNO 开发板及 74HC138 芯片控制 8 个 LED 由左至右依次亮灯,呈现出 LED 亮灯是由左至右移动的效果。
【74HC138 芯片介绍】
74HC138 是一款高速 CMOS 器件,74HC138 引脚兼容低功耗肖特基 TTL(LSTTL)系列。
74HC138 译码器可接受 3 位二进制加权地址输入( A0, A1 和 A2 ),并当使能时,提供 8 个互斥的低有效输出( Y0 至 Y7 )。74HC138 特有 3 个使能输入端:两个低有效 ( E1 和 E2 ) 和一个高有效 ( E3)。除非 E1 和 E2 置低且 E3 置高,否则 74HC138 将保持所有输出为高。利用这种复合使能特性,仅需 4 片 74HC138 芯片和 1 个反相器,即可轻松实现并行扩展,组合成为一个 1-32 ( 5 线到 32 线 ) 译码器。任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则 74HC138 亦可充当一个 8 输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。

74HC138 的引脚及功能如下所示:

⑴ 输入端 A0、A1、A2:这三个引脚是用来输入译码信号的,共有 8 种输入组合方式,可以产生 8 个不同的输出。
⑵ 输出端 Y0 ~ Y7:共8个输出端口,对应着 A0 ~ A7 八位二进制编码。
⑶ OE ( 输出使能 ) 端口:该端口为低电平有效,当 OE 端口为高电平时,输出端口处于高阻态。
74HC138 芯片是一种通用的数字逻辑译码器,其主要作用是将输入的多位二进制编码转换成独立的输出信号。举例来说,如果将三位二进制编码输入到 74hc138 芯片中,芯片会自动判断当前输入的编码,并将其转换为相应的输出信号。因此,74HC138 芯片可以用来实现多种不同的数字逻辑功能,如地址译码、数据选择等。
同时,由于 74HC138 芯片的输出端口具有高电平或低电平两种状态,因此它还可以用来控制开关、驱动 LED 灯等。举例来说,在 LED显示屏中,通过将 74HC138 芯片与多个 LED 灯串联,就可以使用极少的引脚来控制大量的 LED 灯,从而降低了系统的复杂度和成本。
总之,74HC138 芯片在数字逻辑电路中具有非常重要的作用。它的输入输出接口简单明了,易于集成,并且能够满足各种不同的应用场景,因此被广泛地应用在各种数字电路中。
☛ 使用材料
Arduino UNO R3 开发板 × 1、74HC138 IC × 1、LED × 8、电阻 220Ω × 8。
☛ 电路图及面包板接线图


☛ 程式码
int segCount = 3;
int segPins[]={2,3,4}; //将数位接脚 2、3、4 依序接到 74HC138 芯片的
//A0、A1、A2
void setup()
{
for(int thisSeg=0;thisSeg<segCount;thisSeg++) //循环设置,把对应的端口设置成输出
pinMode(segPins[thisSeg],OUTPUT);
}
void loop()
{
for(int i=0;i<8;i++) //循环输出 0-7,在 74HC138 芯片的输出端是 Y0-Y7
{ //依次为 0,任何时候只有 1 个接脚为低电平
deal(i); //数据处理
delay(200); //延迟 200ms
}
}
void deal(unsigned char value) //把需要处理的 byte 数据写入对应的引脚端口
{
for(int i=0;i<3;i++)
digitalWrite(segPins[i],bitRead(value,i));
}
☛ 练习
㈠ 设计 Arduino 程式,使 LED 由右至左依序移动亮灯。
int segCount = 3;
int segPins[]={2,3,4}; //将数位接脚 2、3、4 依序接到 74HC138 芯片的 A0、A1、A2
//A0、A1、A2
void setup()
{
for(int thisSeg=0;thisSeg<segCount;thisSeg++) //循环设置,把对应的端口设置成输出
pinMode(segPins[thisSeg],OUTPUT);
}
void loop()
{
for(int i=7;i>0;i--) //循环输出 7-0,在 74HC138 芯片的输出端是 Y0-Y7
{ //依次为 0,任何时候只有 1 个接脚为低电平
deal(i); //数据处理
delay(200); //延迟 200ms
}
}
void deal(unsigned char value) //把需要处理的 byte 数据写入对应的引脚端口
{
for(int i=0;i<3;i++)
digitalWrite(segPins[i],bitRead(value,i));
}
㈡ 设计 Arduino 程式,使 LED 由左至右依序移动亮灯,当到最右边时,再由右至左依序移动亮灯,形成 LED 左右移动亮灯的效果。
int segCount = 3;
int segPins[]={2,3,4}; //将数位接脚 2、3、4 依序接到 74HC138 芯片的
//A0、A1、A2
void setup()
{
for(int thisSeg=0;thisSeg<segCount;thisSeg++) //循环设置,把对应的端口设置成输出
pinMode(segPins[thisSeg],OUTPUT);
}
void loop()
{
for(int i=0;i<8;i++) //循环输出 0-7,在 74HC138 芯片的输出端是 Y0-Y7
{ //依次为 0,任何时候只有 1 个接脚为低电平
deal(i); //数据处理
delay(200); //延迟 200ms
}
for(int 1=7;i>0;i--) //循环输出 7-0,在 74HC138 芯片的输出端是 Y0-Y7
{ //依次为 0,任何时候只有 1 个接脚为低电平
deal(i); //数据处理
delay(200); //延迟 200ms
}
}
void deal(unsigned char value) //把需要处理的 byte 数据写入对应的引脚端口
{
for(int i=0;i<3;i++)
digitalWrite(segPins[i],bitRead(value,i));
}



