74ls138数码管显示
时间: 2023-10-29 11:02:45 浏览: 479
74LS138是一种集成电路芯片,它是一种译码器和多路选择器。数码管是一种用于显示数字或字符的设备。那么,如何使用74LS138芯片来驱动数码管的显示呢?
首先,我们需要将74LS138连接到适当的电源电压,并通过合适的电阻连接数码管的阳极和74LS138的输出引脚。然后,我们需要设置74LS138的输入引脚,以选择要显示的数字或字符。
74LS138有3个输入引脚(A0、A1和A2)和8个输出引脚(Y0至Y7)。这些输入引脚用于选择数码管显示的数字或字符。我们可以通过设置A0、A1和A2引脚的高低电平来选择要显示的数字或字符。例如,设置A0、A1和A2引脚为000,则对应的Y0引脚将输出高电平,从而点亮数码管的特定段,显示数字“0”。
通过设置不同的A0、A1和A2引脚的组合,我们可以依次选择要显示的数码管段,以显示所需的数字或字符。例如,设置A0、A1和A2引脚为001,则对应的Y1引脚将输出高电平,从而点亮数码管的特定段,显示数字“1”。
需要注意的是,74LS138芯片只能驱动一个数码管的一段。如果想要驱动多个数码管,可以通过将多个74LS138芯片连接在一起,并设置不同的A0、A1和A2引脚的组合,来选择要驱动的不同数码管段。
综上所述,通过适当地设置74LS138芯片的输入引脚,我们可以控制并实现数码管的显示。74LS138具有多路选择功能,通过设置不同的输入引脚组合,可以选择要显示的数字或字符,并将对应的输出引脚输出高电平,从而点亮数码管的特定段。
相关问题
利用74LS138、与非门、74LS47和共阳极数码管(或74LS48和共阴极数码管)设计1位全加器。 要求 、 分别表示两个加数, 表示低位的进位, 和 分别表示和位以及向高位的进位,要求利用数码管显示输出结果。例如当输入 、 、 时,数码管应显示为3。
首先,根据全加器的逻辑电路图,我们可以得到以下真值表:
| A | B | Cin | Cout | S |
| :---: | :---: | :-: | :--: | :---: |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
根据真值表,我们可以得到以下逻辑式:
S = A xor B xor Cin
Cout = (A and B) or (Cin and (A xor B))
接下来,我们使用74LS138实现选择器,将输入的A、B、Cin和输出的S、Cout分别选择到不同的与非门中进行计算。具体电路如下图所示:
![1位全加器电路图](https://cdn.luogu.com.cn/upload/image_hosting/3q3q6jtt.png)
其中,74LS138的输入端A0、A1、A2分别连接A、B、Cin,输出端Y0、Y1、Y2、Y3分别连接与非门的输入端,74LS138的使能端G1、G2A、G2B均连接高电平,74LS47的输入端a、b、c、d、e、f、g分别连接与非门的输出端(注意,74LS47的输入端需要接入反向电阻,否则显示的数字会倒过来),74LS47的输出端a、b、c、d、e、f、g分别连接共阳极数码管的a、b、c、d、e、f、g。如果使用74LS48和共阴极数码管,则需要将74LS47改为74LS48,并将共阳极数码管改为共阴极数码管。
最后,我们可以使用以下代码在Arduino上实现该电路的功能:
```c++
const int A_pin = 2;
const int B_pin = 3;
const int Cin_pin = 4;
const int S_pin = 5;
const int Cout_pin = 6;
const int a_pin = 7;
const int b_pin = 8;
const int c_pin = 9;
const int d_pin = 10;
const int e_pin = 11;
const int f_pin = 12;
const int g_pin = 13;
void setup() {
pinMode(A_pin, INPUT);
pinMode(B_pin, INPUT);
pinMode(Cin_pin, INPUT);
pinMode(S_pin, OUTPUT);
pinMode(Cout_pin, OUTPUT);
pinMode(a_pin, OUTPUT);
pinMode(b_pin, OUTPUT);
pinMode(c_pin, OUTPUT);
pinMode(d_pin, OUTPUT);
pinMode(e_pin, OUTPUT);
pinMode(f_pin, OUTPUT);
pinMode(g_pin, OUTPUT);
}
void loop() {
int A = digitalRead(A_pin);
int B = digitalRead(B_pin);
int Cin = digitalRead(Cin_pin);
int S = (A ^ B ^ Cin);
int Cout = ((A & B) | (Cin & (A ^ B)));
digitalWrite(S_pin, S);
digitalWrite(Cout_pin, Cout);
if (S == 0b00000001) {
digitalWrite(a_pin, LOW);
digitalWrite(b_pin, HIGH);
digitalWrite(c_pin, HIGH);
digitalWrite(d_pin, LOW);
digitalWrite(e_pin, LOW);
digitalWrite(f_pin, LOW);
digitalWrite(g_pin, LOW);
} else if (S == 0b00000010) {
digitalWrite(a_pin, HIGH);
digitalWrite(b_pin, HIGH);
digitalWrite(c_pin, LOW);
digitalWrite(d_pin, HIGH);
digitalWrite(e_pin, HIGH);
digitalWrite(f_pin, LOW);
digitalWrite(g_pin, HIGH);
} else if (S == 0b00000011) {
digitalWrite(a_pin, HIGH);
digitalWrite(b_pin, HIGH);
digitalWrite(c_pin, HIGH);
digitalWrite(d_pin, HIGH);
digitalWrite(e_pin, LOW);
digitalWrite(f_pin, LOW);
digitalWrite(g_pin, HIGH);
} else if (S == 0b00000100) {
digitalWrite(a_pin, LOW);
digitalWrite(b_pin, HIGH);
digitalWrite(c_pin, HIGH);
digitalWrite(d_pin, LOW);
digitalWrite(e_pin, LOW);
digitalWrite(f_pin, HIGH);
digitalWrite(g_pin, LOW);
} else if (S == 0b00000101) {
digitalWrite(a_pin, HIGH);
digitalWrite(b_pin, LOW);
digitalWrite(c_pin, HIGH);
digitalWrite(d_pin, HIGH);
digitalWrite(e_pin, LOW);
digitalWrite(f_pin, HIGH);
digitalWrite(g_pin, HIGH);
} else if (S == 0b00000110) {
digitalWrite(a_pin, HIGH);
digitalWrite(b_pin, LOW);
digitalWrite(c_pin, HIGH);
digitalWrite(d_pin, HIGH);
digitalWrite(e_pin, HIGH);
digitalWrite(f_pin, HIGH);
digitalWrite(g_pin, HIGH);
} else if (S == 0b00000111) {
digitalWrite(a_pin, HIGH);
digitalWrite(b_pin, HIGH);
digitalWrite(c_pin, HIGH);
digitalWrite(d_pin, LOW);
digitalWrite(e_pin, LOW);
digitalWrite(f_pin, LOW);
digitalWrite(g_pin, LOW);
} else if (S == 0b00001000) {
digitalWrite(a_pin, HIGH);
digitalWrite(b_pin, HIGH);
digitalWrite(c_pin, HIGH);
digitalWrite(d_pin, HIGH);
digitalWrite(e_pin, HIGH);
digitalWrite(f_pin, HIGH);
digitalWrite(g_pin, HIGH);
} else {
digitalWrite(a_pin, HIGH);
digitalWrite(b_pin, HIGH);
digitalWrite(c_pin, HIGH);
digitalWrite(d_pin, HIGH);
digitalWrite(e_pin, HIGH);
digitalWrite(f_pin, HIGH);
digitalWrite(g_pin, LOW);
}
}
```
利用74LS138、与非门、74LS47和共阳极数码管(或74LS48和共阴极数码管)设计1位全加器。
1位全加器的真值表如下:
| 输入A | 输入B | 输入Cin | 输出S | 输出Cout |
|-------|-------|---------|-------|---------|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
其中,输入A和输入B是要相加的两个二进制数的各位,输入Cin是上一位相加时的进位,输出S是相加的结果,输出Cout是本位相加时的进位,即下一位的输入Cin。
利用74LS138,可以实现输入A、输入B和输入Cin的选择。74LS138是一个三-八译码器,其三个输入端口A、B和Cn用于选择8个输出端口中的一个。如果A、B和Cn的二进制值为i、j和k,那么输出端口n的输出信号就是输入信号i、j、k的反码。这样,我们可以实现对输入A、输入B和输入Cin的选择。具体电路如下图所示:
![1位全加器电路图](https://img-blog.csdn.net/20180414213338821)
其中,74LS138的8个输出端口分别对应8种选择情况。A、B和Cin分别与74LS138的A、B和Cn端口相连,共同控制8个输出端口的选择。
对于每种选择情况,我们需要实现对应的逻辑功能。这可以通过与非门实现。与非门的输出信号是其两个输入信号的逻辑与的反码。因此,我们可以利用与非门实现逻辑非和逻辑与的组合逻辑。具体电路如下图所示:
![1位全加器电路图](https://img-blog.csdn.net/20180414213413349)
其中,与非门的输出信号作为74LS47的输入信号。74LS47是一个BCD-7段译码器,用于将二进制数转换为7段数码管的显示信号。因此,我们可以将74LS47的输出信号与共阳极数码管相连,显示出计算结果。如果使用74LS48和共阴极数码管,则需要将74LS48的输出信号取反,再与共阴极数码管相连。
阅读全文