📌  相关文章
📜  门| Sudo GATE 2020 Mock II(2019年1月10日)|第50章(1)

📅  最后修改于: 2023-12-03 15:28:46.336000             🧑  作者: Mango

门 | Sudo GATE 2020 Mock II(2019年1月10日)|第50章

简介

本章主要涉及计算机组成原理中的门电路,包括与门、或门、非门、与非门、或非门、异或门、同或门等基本逻辑门。介绍门电路的基本原理、逻辑表达式、真值表、数码管显示、计数器设计等。

基本电路及其实现
与门

与门是一种基本的逻辑门,其逻辑表达式为 $Z=A \cdot B$,即当输入 A 和输入 B 的状态均为 1 时,输出 Z 才为 1。

实现与门电路的方法主要有两种:使用晶体管和使用 TTL(晶体管小规模集成电路)器件。

或门

或门是一种基本的逻辑门,其逻辑表达式为 $Z=A+B$,即当输入 A 和输入 B 中至少有一个为 1 时,输出 Z 才为 1。

实现或门电路的方法与实现与门电路的方法类似,也可以使用晶体管和使用 TTL 器件。

非门

非门是一种基本的逻辑门,其逻辑表达式为 $Z=\overline{A}$,即当输入 A 的状态为 0 时,输出 Z 的状态为 1,反之亦然。

实现非门电路的方法主要有两种:使用晶体管和使用 TTL 器件。

与非门

与非门是一种基本的逻辑门,其逻辑表达式为 $Z=\overline{A \cdot B}$,即当输入 A 和输入 B 的状态均为 1 时,输出 Z 的状态为 0,反之亦然。

实现与非门电路的方法主要有两种:使用晶体管和使用 TTL 器件。

或非门

或非门是一种基本的逻辑门,其逻辑表达式为 $Z=\overline{A+B}$,即当输入 A 和输入 B 中至少有一个为 1 时,输出 Z 的状态为 0,反之亦然。

实现或非门电路的方法主要有两种:使用晶体管和使用 TTL 器件。

异或门

异或门是一种基本的逻辑门,其逻辑表达式为 $Z=A \oplus B$,即当输入 A 和输入 B 的状态相同时,输出 Z 的状态为 0,反之亦然。

实现异或门电路的方法主要有两种:使用晶体管和使用 TTL 器件。

同或门

同或门是一种基本的逻辑门,其逻辑表达式为 $Z=\overline{A \oplus B}$,即当输入 A 和输入 B 的状态相同时,输出 Z 的状态为 1,反之亦然。

实现同或门电路的方法主要有两种:使用晶体管和使用 TTL 器件。

数码管显示

数码管是一种常用的数字显示器件,能够直观地显示数字、字母和符号。数码管一般有共阴极和共阳极两种结构。共阴极数码管外部接法如下:

int anode[4] = {1, 2, 3, 4};
int cathode[10][7] = {
    {0, 0, 0, 0, 0, 0, 1}, // 0
    {1, 1, 1, 1, 0, 0, 0}, // 1
    {0, 1, 0, 0, 1, 0, 0}, // 2
    {0, 1, 1, 0, 0, 0, 0}, // 3
    {1, 1, 0, 0, 0, 0, 1}, // 4
    {0, 1, 1, 0, 0, 1, 0}, // 5
    {0, 1, 1, 0, 0, 1, 1}, // 6
    {0, 1, 0, 0, 0, 0, 0}, // 7
    {0, 1, 1, 0, 0, 1, 1}, // 8
    {0, 1, 1, 0, 0, 0, 1}  // 9
};
计数器设计

计数器是一种能够按照规定的计数规律依次输出一系列数字信号的电路,一般分为同步计数器和异步计数器两种。

异步计数器是由多个 T 触发器构成的,其计数规律是二进制计数。同步计数器由若干个 JK 触发器或 D 触发器、逻辑门和时钟信号组成,不仅能够实现二进制计数,还能够实现异步计数、BCD 码计数、格雷码计数等多种计数方式。

以下是一个同步计数器的代码片段:

int jk[4] = {9, 10, 11, 12};
int count = 0;

void setup() {
  for (int i = 1; i <= 4; i++) {
    pinMode(anode[i - 1], OUTPUT);
  }
  for (int i = 9; i <= 12; i++) {
    pinMode(i, OUTPUT);
  }
  Serial.begin(9600);
}

void loop() {
  digitalWrite(jk[0], (count % 2) ? LOW : HIGH);
  digitalWrite(jk[1], ((count / 2) % 2) ? LOW : HIGH);
  digitalWrite(jk[2], ((count / 4) % 2) ? LOW : HIGH);
  digitalWrite(jk[3], ((count / 8) % 2) ? LOW : HIGH);

  for (int i = 0; i < 4; i++) {
    digitalWrite(anode[i], LOW);
    setSegment(cathode[count % 10][i]);
    delay(2);
    digitalWrite(anode[i], HIGH);
  }

  count++;
  if (count == 16) {
    count = 0;
  }
}

void setSegment(int segments[7]) {
  for (int i = 0; i < 7; i++) {
    if (segments[i] == 1) {
      digitalWrite(seg[i], HIGH);
    } else {
      digitalWrite(seg[i], LOW);
    }
  }
}
小结

本章介绍了门电路的基本原理、逻辑表达式、真值表、数码管显示、计数器设计等内容,希望能够使读者更加深入地理解计算机组成原理中的门电路概念。