首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >嵌入式开发基础整理

嵌入式开发基础整理

作者头像
算法之名
发布于 2025-02-06 13:37:38
发布于 2025-02-06 13:37:38
23000
代码可运行
举报
文章被收录于专栏:算法之名算法之名
运行总次数:0
代码可运行

数字电路

逻辑门电路

  • 四种电路门

非门

与门

或门

异或门

输入1时出0,输入0时出1

输入的数均为1时出1,其他情况出0

输入的数均为0时出0,其他情况出1

输入的数不同时出1,相同时出0

组合形式

一、

这是与非的组合形式,输入输出参考

1&0=0,0∘=1

二、

这是两与加一或加一非的组合形式,输入输出参考

1&0=0,1&1=1,0|1=1(在书面上用|表示或),1∘=0

判断输出是0还是1

各步骤的推导如下

1&0=0,0&0=0,0|1=1,1|0=1,1&1=1,1∘=0

最终为0.

  • 写函数表达式L

非门

与门

或门

异或门

L=AB

L=A+B

组合形式

一、

这是一个与非门的组合,其结果如下

A&B=AB,AB∘=

,故L=

二、

这是两与加一或加一非的组合形式,其结果如下

A&B=AB,C&D=CD,AB|CD=AB+CD,(AB+CD)∘=

,故L=

写出函数表达式

其结果如下

A&B=AB,B&C=BC,C|D=C+D,AB∘=

|BC=

+BC,

+BC&C+D=(

+BC)(C+D),(

+BC)(C+D)∘=

,故L=

  • 给出函数表达式,画逻辑图

已知函数表达式为L=AB+BC+

,请画出逻辑图

由表达式可知,它的最终一定是通过了一个或门,故初始图如下

AB和BC都是与门,故添加两个与门

最后的

是一个先与后非的组合

由于上图多次出现A、B、C,则将其化简

化简逻辑表达式

  • 将卡诺图表示成逻辑表达式

卡诺图(Karnaugh Map)是逻辑函数的一种图形表示方法。它是一种平面方格图,主要用于化简布尔代数(逻辑代数)表达式。在数字电路设计中,它能够帮助工程师和设计者以直观的方式简化逻辑电路,减少电路中门电路的数量,从而降低成本、提高电路的可靠性和工作速度。

上图是一个卡诺图,在卡诺图中有一系列的0和1,具体是0是1是不确定的。我们需要根据这些0和1写成逻辑表达式。解题步骤如下

  1. 找出8个连续的1(若找不出就找4个,找不出4个就找2个,找不出2个就找1个)。
  2. 依次判断(1)中找出的1是否全在或全不在A、B、C、D区域。
  3. 若全在某区域,则写该区域代号;若全不在某区域,则写

;若部分在,则啥都不写,最后将写出的结果相与。

  1. 重复(1)(2)(3)步,但每次第(1)步需包含没用过的1。
  2. 所有1都用过后,将每次第(3)步写出的结果相加。

这里8个连续的1是指诸如

2个连续的1是指

等等,

它这里上下或者左右的边也属于邻边。

在本题中存在8个连续的1

根据第(2)步,我们可以判断这8个连续的1

有部分在A区域

有部分在B区域

全在C区域

有部分在D区域

根据第(3)步,我们可以写出全在的区域代号

C

根据第(4)步,我们找不出8个连续的1,可以找出4个连续的1

对应4个区域分别为

A区域:全不在;B区域:部分在;C区域:部分在;D区域:全不在

根据第(3)步,可以写出全不在的代号并相与

现在我们找不到4个连续的1了,只能找出2个连续的1

对应4个区域分别为

A区域:全在;B区域:全在;C区域:部分在;D区域:全在

根据第(3)步,可以写出全在的代号并相与

ABD

根据第(5)步,则有

以上是16格的卡诺图,现在我们来看一下8格的卡诺图

8格卡诺图跟16格卡诺图最大的不同在于它只有A、B、C三个区域,没有D区域。

根据解题步骤,该图中找不到8个连续的1和4个连续的1,可以找出3组2个连续的1,第一组

A区域:部分在;B区域:全在;C区域:全在,可以写出全在的代号并相与

BC

第二组

A区域:全在;B区域:部分在;C区域:全在,可以写出全在的代号并相与

AC

第三组

A区域:全在;B区域:全在;C区域:部分在,可以写出全在的代号并相与

AB

则最终的逻辑表达式为

L=BC+AC+AB

  • 将逻辑表达式画入卡诺图

画进卡诺图

画进卡诺图

解题步骤如下

  1. 根据表达式中字母的个数,画出相应的空白卡诺图
  2. 找出表达式第一部分各字母对应的卡诺图区域
  3. 找出重合区域,在这些格子里标上1
  4. 对表达式第二部分、第三部分......重复(2)(3)步骤
  5. 表达式所有部分都标完后,在剩下的空白格子里标上0

第一步,之前我们知道卡诺图分为16格和8格的,8格的没有D区域,则在上式中有D,故可以肯定为16格卡诺图。

第二步,该表达式一共有5个部分,其中第一部分为AC,则我们需要在空白卡诺图中找出A区和C区

第三步,在重合区域标1

第四步,表达式的第二部分为

指除A区域以外的区域,

指除D区域以外的区域

在重复区域标1

表达式的第三部分为

在重复区域标1

表达式的第四部分为

在重复区域标1

表达式的第五部分为ABD

AB重合的部分为第三行

第三行与D重合的部分为第三行中间两格

在重复区域标1

第五步,在剩下的格标0

第一步,上式中没有D,故相应的卡诺图肯定为8格

第二步,该表达式一共有4个部分,其中第一部分为

,则我们需要在空白卡诺图中找出相应区域

重合的区域为第一行后两格

第一行后两格与C重合的区域为第一行第三格

第三步,在重复区域标1

第四步,表达式的第二部分为

,在重合区域标1(此处节省区域查找,以下同)

表达式第三部分为

,在重合区域标1

表达式第四部分为ABC,在重合区域标1

第五步,在剩下的格标0

  • 用卡诺图化简逻辑表达式

用卡诺图化简逻辑表达式其实就是先将表达式画入卡诺图,再从卡诺图里提取新的逻辑表达式,如

将其画入卡诺图是这个样子的

再重新提取的逻辑表达式为L=BC+AC+AB

直接使用Python化简

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sympy import symbols, Not, And, Or, simplify_logic

# 定义逻辑变量
A, B, C = symbols('A B C')

# 定义原始逻辑表达式
original_expression = Or(
    And(Not(A), B, C),
    And(A, Not(B), C),
    And(A, B, Not(C)),
    And(A, B, C)
)

# 化简逻辑表达式
simplified_expression = simplify_logic(original_expression)

print(simplified_expression)

运行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(A & B) | (A & C) | (B & C)
  • 用公式法化简逻辑表达式

化简

名称

公式1

公式2

0-1律

A⋅1=A

A+0=A

A⋅0=0

A+1=1

互补律

重叠律

AA=A

A+A=A

交换律

AB=BA

A+B=B+A

结合律

A(BC)=(AB)C

A+(B+C)=(A+B)+C

分配律

(A+B)C=AC+BC

AB+C=(A+C)(B+C)

反演律

吸收律

A(A+B)=A

A+AB=A

对合律

根据上表,我们来化简

根据重叠律的公式2,有

+ABC+ABC

根据交换律的公式2和结合律的公式2,有

L=(

+ABC)+(

+ABC)+(

+ABC)

根据交换律的公式1,有

L=(

+ABC)+(

+BAC)+(

+CAB)

根据分配律的公式1,有

L=(

+A)BC+(

+B)AC+(

+C)AB

根据互补律的公式2,有

L=BC+AC+AB

  • 求公式表示函数的反函数

已知

,求其反函数

解题步骤

  1. 与->或,或->与
  2. 0->1,1->0
  3. 原变量->反变量,反变量->原变量
  4. 多个变量的公共非号保持不变
  5. 原式运算的优先顺序保持不变

第一步

L A ⋅ B +

⋅ A + C +

第二步

不变

第三步

+ C ⋅

+

+ D

第四步

+ C ⋅

第五步

组合逻辑电路的分析与设计

  • 给出逻辑电路图,分析逻辑功能

组合逻辑电路如图所示,分析该电路的逻辑功能

解题步骤

  1. 由逻辑图写出函数表达式
  2. 化简函数表达式
  3. 列出所有情况
  4. 分析出功能

第一步

我们先把各个电路门的输出表达出来

则有L=AP+BP+CP

AP=A&P=A

BP=B&P=B

CP=C&P=C

第二步

根据反演律公式1,有

L=

+

+

根据分配律公式1,有

L=

+

+

根据互补律公式1,有

L=

我们也可以直接使用Pyton来化简

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sympy import symbols, Not, And, Or, simplify_logic

# 定义逻辑变量
A, B, C = symbols('A B C')

# 定义原始逻辑表达式
original_expression = Or(
    And(A, Not(And(A, B, C))),
    And(B, Not(And(A, B, C))),
    And(C, Not(And(A, B, C)))
)

# 化简逻辑表达式
simplified_expression = simplify_logic(original_expression)

print(simplified_expression)

运行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(A & ~B) | (A & ~C) | (B & ~A) | (B & ~C) | (C & ~A) | (C & ~B)

第三步

A

B

C

L

0

0

0

0

0

0

1

1

0

1

0

1

1

0

0

1

0

1

1

1

1

0

1

1

1

1

0

1

1

1

1

0

A、B、C全为0,有

L=

=0⋅1+0⋅1+0⋅1+0⋅1+0⋅1+0⋅1=0

A、B为0,C为1,有

L=

=0⋅1+0⋅0+0⋅1+0⋅0+1⋅1+1⋅1=1 (这里是逻辑运算0|1|1=1,不是0+1+1=2)

A、B、C全为1,有

L=

=1⋅0+1⋅0+1⋅0+1⋅0+1⋅0+1⋅0=0

用Python来生成真值表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sympy import symbols, Not, And, Or, simplify_logic, true, false

# 定义逻辑变量
A, B, C = symbols('A B C')

# 定义原始逻辑表达式
original_expression = Or(
    And(A, Not(And(A, B, C))),
    And(B, Not(And(A, B, C))),
    And(C, Not(And(A, B, C)))
)

# 化简逻辑表达式
simplified_expression = simplify_logic(original_expression)

# 使用简化后的表达式生成真值表
truth_table = []
for a in [false, true]:
    for b in [false, true]:
        for c in [false, true]:
            # 计算表达式的值
            result = simplified_expression.subs({A: a, B: b, C: c})
            # 转换布尔值到整数,True -> 1, False -> 0
            result_int = int(bool(result))
            a = int(bool(a))
            b = int(bool(b))
            c = int(bool(c))
            truth_table.append([a, b, c, result_int])

# 打印真值表表头
print("A\tB\tC\tF")
for row in truth_table:
    print(f"{row[0]}\t{row[1]}\t{row[2]}\t{row[3]}")

运行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A	B	C	F
0	0	0	0
0	0	1	1
0	1	0	1
0	1	1	1
1	0	0	1
1	0	1	1
1	1	0	1
1	1	1	0

第四步

由真值表可知,当A、B、C不一致时,电路输出为"1",所以,这个电路为"不一致电路"。

根据真值表的不同一般分为三种电路,除了"不一致电路",还有以下两种电路。

A

B

C

L

0

0

0

1

0

0

1

0

0

1

0

0

1

0

0

0

0

1

1

0

1

0

1

0

1

1

0

0

1

1

1

1

这种称为"一致电路"

A

B

C

L

0

0

0

0

0

0

1

0

0

1

0

0

1

0

0

0

0

1

1

1

1

0

1

1

1

1

0

1

1

1

1

1

这种称为"少数服从多数电路"。

  • 给出功能要求设计电路

设计一个三人表决电路,结果按"少数服从多数"原则决定。

解题步骤

  1. 确定输入个数,定义0,1
  2. 列真值表
  3. 写出逻辑表达式
  4. 化简
  5. 画出电路图

第一步

设三人依次为A、B、C,A、B、C三人均可选择"同意"与"不同意",选择"同意"则输入"1",选择“不同意”则输入"0"。

第二步

A

B

C

L

0

0

0

0

0

0

1

0

0

1

0

0

1

0

0

0

0

1

1

1

1

0

1

1

1

1

0

1

1

1

1

1

第三步

这里只看L为1的情况,根据四种情况,可以得到以下表达式

其中

表示0、1、1、1的情况,其他相同

第四步

化简后为L=AB+BC+AC

第五步

逻辑函数最小项

对于有n个变量的逻辑函数,最小项是包含全部n个变量的乘积项。在每个乘积项中,每个变量以原变量(如A)或反变量(如

)的形式出现一次,且仅出现一次。

例如,对于两个变量A和B,最小项有

这四个。对于三个变量A、B、C,最小项有

这八个。

把变量取值组合看成二进制数,原变量用1表示,反变量用0表示,这个二进制数对应的十进制数就是最小项的编号。

例如,对于三个变量的逻辑函数,\(m_1\)对应的变量取值组合是001,即

;\(m_2\)对应的是010,即

;\(m_3\)对应的是011,即

  • 用卡诺图法将逻辑函数变成最小项形式

用卡诺图法将逻辑函数

变成最小项形式。

解题步骤

  1. 将函数表现在卡诺图里
  2. 将卡诺图中的1与下面图比对

第一步

第二步

由于我们画出的图为16格卡诺图,故需要跟第一个图对比

图中的蓝格是我们自己画出的卡诺图中为1的位置。

的最小项为

\(=m_1+m_4+m_5+m_7+m_6+m_9\)

用卡诺图法将逻辑函数

变成最小项的形式

第一步

第二步

由于我们画出的图为8格卡诺图,故需要跟第二个图对比

的最小项为

\(=m_1+m_3+m_7+m_6\)

  • 用公式法将逻辑函数变成最小项形式

用公式法将逻辑函数

变成最小项的形式。

解题步骤

  1. 根据互补律公式2和0~1律公式1,利用

,令每一项都包含全部代码。

  1. 根据交换律公式1,整理(1)的结果,令每一项都是A、B、C、D的顺序。
  2. 将每一项的A、B、C、D变成1,将

变成0。

  1. 将(3)的结果由二进制数变成十进制数。
  2. 在m后加上(4)中的结果。

根据第一步

因为AB中没有C,故将AB变为

=

因为

中没有B,故将

变为

=

则有

根据第二步

根据第三步

将ABC变成111,

变成110,

变成011,

变成001

根据第四步

111变成十进制为7,110变成十进制为6,011变成十进制为3,001变成十进制为1。

根据第五步

\(L=m_7+m_6+m_3+m_1\)

  • Python代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sympy import symbols, And, Or, Not
from itertools import product


def get_minterms(expr, variables):
    # 获取变量的数量
    num_vars = len(variables)

    # 初始化最小项列表
    minterms = []

    # 遍历所有可能的输入组合
    for i, inputs in enumerate(product([False, True], repeat=num_vars)):
        # 构造一个字典来赋值给符号变量
        assignment = {var: val for var, val in zip(variables, inputs)}

        # 检查当前输入组合是否使表达式为真
        if expr.subs(assignment):
            # 计算最小项的索引(直接使用 i)
            minterms.append(f"m_{i}")

    return sorted(minterms)  # 按照最小项索引排序

if __name__ == '__main__':

    # 定义符号变量
    A, B, C, D = symbols('A B C D')
    
    # 示例逻辑表达式 AB + ~AC
    # expr = Or(And(A, B), And(Not(A), C))
    expr = Or(And(Not(A), B), And(Not(B), Not(C), D))

    print("原始表达式:", expr)

    # 获取最小项列表
    minterms_list = get_minterms(expr, [A, B, C, D])
    print("最小项列表形式:", " + ".join(minterms_list))

运行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
原始表达式: (B & ~A) | (D & ~B & ~C)
最小项列表形式: m_1 + m_4 + m_5 + m_6 + m_7 + m_9
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sympy import symbols, And, Or, Not
from itertools import product


def get_minterms(expr, variables):
    # 获取变量的数量
    num_vars = len(variables)

    # 初始化最小项列表
    minterms = []

    # 遍历所有可能的输入组合
    for i, inputs in enumerate(product([False, True], repeat=num_vars)):
        # 构造一个字典来赋值给符号变量
        assignment = {var: val for var, val in zip(variables, inputs)}

        # 检查当前输入组合是否使表达式为真
        if expr.subs(assignment):
            # 计算最小项的索引(直接使用 i)
            minterms.append(f"m_{i}")

    return sorted(minterms)  # 按照最小项索引排序

if __name__ == '__main__':

    # 定义符号变量
    A, B, C = symbols('A B C')

    # 示例逻辑表达式 AB + ~AC
    expr = Or(And(A, B), And(Not(A), C))
    # expr = Or(And(Not(A), B), And(Not(B), Not(C), D))

    print("原始表达式:", expr)

    # 获取最小项列表
    minterms_list = get_minterms(expr, [A, B, C])
    print("最小项列表形式:", " + ".join(minterms_list))

运行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
原始表达式: (A & B) | (C & ~A)
最小项列表形式: m_1 + m_3 + m_6 + m_7
  • 将最小项的形式化成变量的形式

将\(L(A,B,C)=m_7+m_6+m_3+m_1\)化成变量的形式,解题步骤

  1. 取出m后的数字
  2. 将数字变成二进制数(3输入变成3位,4输入变成4位)
  3. 每个二进制数的
    1. 第一个数是0,则变成

    ,是1则变成A。

    1. 第二个数是0,则变成

    ,是1则变成B。

    1. 第三个数是0,则变成

    ,是1则变成C。

    1. 第四个数是0,则变成

    ,是1则变成D。

  4. 用公式法或者卡诺图法化简逻辑函数

第一步,7 6 3 1

第二步,L(A,B,C)是3输入,则以上四个数字变成二进制为

111 110 011 001

第三步,上面四个二进制数可转化为

\(L(A,B,C)=m_7+m_6+m_3+m_1\)=

第四步,最终化简结果为

=

将\(L(A,B,C,D)=m_1+m_4+m_5+m_6+m_7+m_9\)化成变量的形式

第一步,1 4 5 6 7 9

第二步,L(A,B,C,D)是4输入,则以上六个数字变成二进制为

0001 0100 0101 0110 0111 1001

第三步,上面六个二进制数可转化为

\(L(A,B,C,D)=m_1+m_4+m_5+m_6+m_7+m_9\)=

第四步,最终化简结果为

=

python代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sympy import symbols, And, Or, Not, simplify, to_dnf


def minterm_to_expr(minterm, variables):
    """
    将最小项转换成逻辑表达式。

    :param minterm: 最小项字符串,例如 "m_5"
    :param variables: 变量列表,例如 [A, B, C, D]
    :return: 逻辑表达式
    """
    index = int(minterm[2:])  # 去掉 "m_" 前缀

    and_terms = []

    # 遍历所有变量,根据最小项索引构造与项
    for i, var in enumerate(reversed(variables)):  # 注意这里我们反转了变量列表以匹配二进制位序
        if (index >> i) & 1:
            and_terms.append(var)
        else:
            and_terms.append(Not(var))

    return And(*and_terms)


def minterms_to_expr(minterms, variables):
    """
    将最小项列表转换成逻辑表达式,并化简为DNF形式。

    :param minterms: 最小项列表,例如 ["m_0", "m_3"]
    :param variables: 变量列表,例如 [A, B, C, D]
    :return: 化简后的逻辑表达式,以DNF形式
    """
    expr_parts = [minterm_to_expr(minterm, variables) for minterm in minterms]
    expr = Or(*expr_parts)
    simplified_expr = simplify(expr)
    dnf_expr = to_dnf(simplified_expr, simplify=True)  # 确保使用DNF并尝试简化
    return dnf_expr


if __name__ == '__main__':
    # 定义符号变量
    A, B, C = symbols('A B C')

    # 示例最小项列表
    minterms_list = ["m_1", "m_3", "m_6", "m_7"]

    # 获取并打印化简后的逻辑表达式,以DNF形式
    dnf_expr = minterms_to_expr(minterms_list, [A, B, C])
    print("化简后的逻辑表达式(DNF形式):", dnf_expr)

运行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
化简后的逻辑表达式(DNF形式): (A & B) | (C & ~A)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sympy import symbols, And, Or, Not, simplify, to_dnf


def minterm_to_expr(minterm, variables):
    """
    将最小项转换成逻辑表达式。

    :param minterm: 最小项字符串,例如 "m_5"
    :param variables: 变量列表,例如 [A, B, C, D]
    :return: 逻辑表达式
    """
    index = int(minterm[2:])  # 去掉 "m_" 前缀

    and_terms = []

    # 遍历所有变量,根据最小项索引构造与项
    for i, var in enumerate(reversed(variables)):  # 注意这里我们反转了变量列表以匹配二进制位序
        if (index >> i) & 1:
            and_terms.append(var)
        else:
            and_terms.append(Not(var))

    return And(*and_terms)


def minterms_to_expr(minterms, variables):
    """
    将最小项列表转换成逻辑表达式,并化简为DNF形式。

    :param minterms: 最小项列表,例如 ["m_0", "m_3"]
    :param variables: 变量列表,例如 [A, B, C, D]
    :return: 化简后的逻辑表达式,以DNF形式
    """
    expr_parts = [minterm_to_expr(minterm, variables) for minterm in minterms]
    expr = Or(*expr_parts)
    simplified_expr = simplify(expr)
    dnf_expr = to_dnf(simplified_expr, simplify=True)  # 确保使用DNF并尝试简化
    return dnf_expr


if __name__ == '__main__':
    # 定义符号变量
    A, B, C, D = symbols('A B C D')

    # 示例最小项列表
    minterms_list = ["m_1", "m_4", "m_5", "m_6", "m_7", "m_9"]

    # 获取并打印化简后的逻辑表达式,以DNF形式
    dnf_expr = minterms_to_expr(minterms_list, [A, B, C, D])
    print("化简后的逻辑表达式(DNF形式):", dnf_expr)

运行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
化简后的逻辑表达式(DNF形式): (B & ~A) | (D & ~B & ~C)
  • 将\(L=\sum{m}+\sum{d}\)形式的式子用卡诺图化简

将\(L(A,B,C,D)=\sum{m(1,4,5,6,7,9)}+\sum{d(10,11,12,13,14,15)}\)用卡诺图化简,解题步骤

  1. 根据下图,在m对应代号处写1,d对应代号处写X,其他代号处写0。
  2. 将卡诺图表示成逻辑表达式
    1. 注意:表示的过程中,可以将X当作1来凑8个1、4个1、2个1、1个1。
    2. 将所有1都表示完即可,不需要表示完所有X。

第一步,由于L(A,B,C,D)是4输入,故我们要对应于

m后面的数字是1,4,5,6,7,9,故将卡诺图中相应位置上的数字变为1

d后面的数字为10,11,12,13,14,15,故将卡诺图中相应位置上的数字变为X

剩下的数字都变成0

第二步,找出8个1(X可以当成1用)

  1. A区域:部分在
  2. B区域:全部在
  3. C区域:部分在
  4. D区域:部分在

次时为B

找出4个1

  1. A区域:部分在
  2. B区域:部分在
  3. C区域:全不在
  4. D区域:全部在

此时为

故最终答案为

使用译码器和门电路实现逻辑函数

这是一个译码器74138,它是一个集成电路,内部逻辑图如下

它有16个引脚

其中\(V_{CC}\)表示电源(正),GND表示接地;\(A_0,A_1,A_2\)为二进制信号输入端;\(E_1,E_2,E_3\)(或者第一幅图中的\(G_1,G_{2A},G_{2B}\))为选通端,又叫做使能输入;\(Y_0\)到\(Y_7\)为输出端。74138 的基本功能是根据输入的二进制代码选择一个特定的输出。比如\(A_0A_1A_2=000\)时,只有\(Y_0\)输出低电平,其他都是高电平。\(A_0A_1A_2=010\)时,只有\(Y_2\)输出低电平,其他都是高电平。要使得这一功能得以实现,\(E_2\)(或\(G_{2A}\))和\(E_3\)(或\(G_{2B}\))必须为低电平,\(E_1\)(或\(G_1\))必须为高电平。

这里的高低电平是数字电路中表示二进制信息(即逻辑状态)的一种物理方式,它们直接与数字信号的概念相关联。在数字电子学中,所有的数据和指令最终都以二进制的形式存在,而高低电平则是用来区分这两种基本状态(0 和 1)的电压水平。

  1. 高电平 (High Level):通常代表逻辑“1”,意味着某个信号处于激活状态或被设置为真。大约2.0V到5.0V之间的电压被认为是高电平。
  2. 低电平 (Low Level):通常代表逻辑“0”,意味着某个信号处于非激活状态或被设置为假。0V到0.8V之间的电压被认为是低电平。

引脚(Pin)是集成电路(IC)或其他电子组件上用于电气连接的物理接口。每个引脚都是一个金属触点,通常排列在器件的边缘或底部,通过焊接到印刷电路板(PCB)上的相应焊盘来建立电气连接。引脚的主要功能是提供输入、输出以及电源和接地等必要的信号通路。

引脚的基本概念

  1. 电气连接:引脚作为外部电路与内部电路之间的桥梁,允许电流流入或流出器件。
  2. 信号传输:引脚可以传输各种类型的电信号,包括但不限于电源电压、地线、数据信号、控制信号等。
  3. 标识与功能:每个引脚都有特定的功能,并且通常会在器件的数据手册中明确标注其用途。例如,在74138译码器中,有专门的引脚用于地址输入、使能输入、输出等。

引脚的分类

根据引脚的功能,它们可以分为几大类:

  1. 电源引脚(VCC 或 VDD 和 GND):
    1. VCC 或 VDD:为器件提供工作所需的正电源电压。
    2. GND:提供参考电位,通常是0伏特,也称为地线。
  2. 输入引脚(Input Pins):
    1. 用于接收来自外部电路的信号,如控制信号、数据输入等。例如,74138的地址输入A0-A2和使能输入E1-E3。
  3. 输出引脚(Output Pins):
    1. 用于向外部电路发送信号,如数据输出、状态指示等。例如,74138的Y0-Y7输出。
  4. 双向引脚(Bidirectional Pins):
    1. 可以根据需要配置为输入或输出,常见于某些微控制器和存储器芯片。
  5. 其他特殊功能引脚:
    1. 包括复位引脚、时钟输入、中断请求等,这些引脚具有特定的应用场景和功能。

引脚编号与布局

  1. 引脚编号:每个引脚都有唯一的编号,从1开始,按照一定的顺序排列。对于双列直插式封装(DIP),引脚编号通常是沿着器件的一侧依次增加,然后折返到另一侧继续编号。
  2. 引脚布局:不同型号的IC有不同的引脚布局。设计人员必须仔细参照数据手册中的引脚图来正确连接电路。

实际应用中的引脚

在实际应用中,引脚的选择和使用非常重要。例如:

  1. 74138译码器:
    1. E1, E2, E3:使能输入引脚,控制译码器是否根据地址输入产生输出。
    2. A0, A1, A2:地址输入引脚,决定哪个输出被激活。
    3. Y0 至 Y7:输出引脚,根据地址输入选择其中一个输出为低电平。
  2. 微控制器:
    1. GPIO(通用输入/输出)引脚:可以编程为输入或输出,用于连接传感器、LED、按钮等外围设备。
    2. UART(串行通信)引脚:用于与其他设备进行异步串行通信。
    3. SPI/I2C引脚:用于同步串行通信协议,连接多个外围设备。
  • 请用74138译码器和门电路实现逻辑函数L=AB+BC+AC

解题步骤

  1. 下边左三:带圈输入0,不带圈输入1
  2. 下边右三:依次写三个输入量(多为A、B、C)
  3. 将函数化成最小项形式
  4. 将m变成

变成Y

  1. 利用下面两条公式,转化结果里单独的
  1. 根据函数与Y的关系接线

第一步

第二步,由于L=AB+BC+AC有A、B、C三个输入量,故

第三步,\(L=AB+BC+AC=m_3+m_5+m_6+m_7\)

第四步,\(m_3+m_5+m_6+m_7\)=

第五步,

=

第六步,最终画线为

  • 根据译码器接线图写出逻辑函数

写出下列接线图中L的逻辑函数表达式

解题步骤

  1. 根据接线写出函数与Y的关系式
  2. 将Y变成
  1. 若最小项中存在

的情况,根据下列公式化简

  1. 将最小项变成表达式
  2. 化简表达式

第一步,

第二步,

第三步

\(=m_3+m_5+m_6+m_7\)

第四步,第五步

\(m_3+m_5+m_6+m_7=AB+BC+AC\)

嵌入式开发的基本步骤

这里我们以LED灯为例,我们的目标是点亮开发板上的LED灯。

原理图分析

上图是一个原理图,其中右边的绿色部件就是LED灯,三角形的左部为正极,右部的箭头为负极,绿色的斜线表示是一个发光二级管。当LED灯两边有电压时,该灯就会亮。这里我们可以看到,所有的LED灯经过了一个电阻(RLED)后接地(GND),表示二极管右方的电压为0V。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
逻辑电路&代数运算(下)
在逻辑代数中,卡诺图(Karnaugh map)是真值表的变形,它可以将有n个变量的逻辑函数的2^n个最小项组织在给定的长方形表格中,同时为相邻最小项(相邻与项)运用邻接律化简提供了直观的图形工具。但是,如果需要处理的逻辑函数的自变量较多(有五个或更多的时候,此时有些项就很难圈了),那么卡诺图的行列数将迅速增加,使图形更加复杂。
WuShF
2023/03/23
6.5K0
逻辑电路&代数运算(下)
FPGA:逻辑函数的卡诺图化简法
的最小项是 n 个因子的乘积,每个变量 都以它的原变量或非变量的形式在乘积项中出现,且仅出 现一次。一般 n 个变量的最小项应有
timerring
2023/02/03
9030
FPGA零基础学习:数字电路中的逻辑代数基础
大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。
FPGA技术江湖
2020/12/30
6460
FPGA零基础学习:数字电路中的逻辑代数基础
大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。
FPGA技术江湖
2021/03/15
6210
FPGA零基础学习:数字电路中的逻辑代数基础
HDLBits: 在线学习 SystemVerilog(十三)-Problem 72-79(卡诺图)
HDLBits 是一组小型电路设计习题集,使用 Verilog/SystemVerilog 硬件描述语言 (HDL) 练习数字硬件设计~
碎碎思
2022/11/14
9270
HDLBits: 在线学习 SystemVerilog(十三)-Problem 72-79(卡诺图)
数字IC基础知识总结(笔试、面试向)-持续更新
BCD码为使用4个bit表示一个十进制位数,即123的BCD码为0x123,余3码表示BCD码基础上加3(十进制),例子如下,对于26而言:
月见樽
2020/05/26
2.3K0
数字IC基础知识总结(笔试、面试向)-持续更新
逻辑电路&代数运算(上)
逻辑代数L是一个封闭的代数系统,由一个逻辑变量集K,常量0和1,以及与或非三种基本运算构成。
WuShF
2023/03/05
8450
逻辑电路&代数运算(上)
卡诺图化简最小项表达式
对于 F(A,B,C,D)=Σm(0,1,3,5,6,7,11,13),我们将这些最小项标记在4变量的卡诺图中。
用户11315985
2025/01/09
1410
卡诺图化简最小项表达式
联发科技2021校招IC笔试题全部解析【数字IC设计验证】【MTK笔试】
(4)说明DFF2和DFF4为什么采用负沿采样?若采用正沿,会存在何种风险?(3分)
FPGA探索者
2021/05/26
4.1K0
联发科技2021校招IC笔试题全部解析【数字IC设计验证】【MTK笔试】
(五)《数电》——化简法(公式化简法和卡诺图化简法)
目录 公式化简法 指定器件的逻辑函数化简  最小项 定义 性质 ​编辑 最大项 定义 性质 两者之间的关系 “最小项之和”形式 “最大项之积”形式 卡诺图 定义 实例 ​编辑特点 逻辑函数的卡诺图表示 基本性质 并2消1 并4消2  并8消3 推论 化简的基本步骤 总规则 示例 约束项 定义 任意项 定义 无关项 定义 应用 Q——M法 ---- 公式化简法         我们来介绍一下公式化简法,主要包含5种方法,接下来我们来一一介绍!         接下来我们来总结一下这五种方法! 
小点点
2022/12/12
5.6K0
(五)《数电》——化简法(公式化简法和卡诺图化简法)
组合逻辑竞争冒险,时序逻辑亚稳态【0型冒险和1型冒险及其消除方法】
在一个组合电路当中,当某一个变量经过两条以上的路径到达输出端的时候,由于每条路径上的延迟时间的不同,到达终点的时间就会有先有后,这一现象称作竞争。
FPGA探索者
2021/05/26
3.2K0
组合逻辑竞争冒险,时序逻辑亚稳态【0型冒险和1型冒险及其消除方法】
FPGA:组合逻辑电路的设计
1.逻辑抽象:根据实际逻辑问题的因果关系确定输入、输出变量,并定义逻辑状态的含义;
timerring
2023/01/16
8060
HDLBits:在线学习 Verilog (十五 · Problem 70 - 74)
题目要求我们创建一个100bit的二进制的加法器,该电路共包含两个100bit的输入和一个cin, 输出产生sum和cout。
数字积木
2021/04/15
4390
FPGA:逻辑运算及逻辑门
逻辑是指事物因果之间所遵循的规律。为了避免用冗繁的文字来描述逻辑问题,逻辑代数采用逻辑变量和一套运算符组成逻辑函数表达式来描述事物的因果关系。
timerring
2023/02/03
1.1K0
FPGA零基础学习:数字电路中的组合逻辑
大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。
FPGA技术江湖
2020/12/30
7270
FPGA零基础学习:数字电路中的组合逻辑
大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。
FPGA技术江湖
2021/03/15
5370
FPGA零基础学习:数字电路中的组合逻辑
基于Verilog HDL的超前进位全加器设计
       通常我们所使用的加法器一般是串行进位,将从输入的ci逐位进位地传递到最高位的进位输出co,由于电路是有延迟的,这样的长途旅行是需要时间的,所以为了加快加法器的运算,引入了超前进位全加器。
NingHeChuan
2018/04/18
2.8K0
基于Verilog HDL的超前进位全加器设计
HDLBits:在线学习 Verilog (十六 · Problem 75 - 79)
一个4输入a, b, c, d和一输出的逻辑电路,当输入为2, 7或15时,输出为1, 当输入为0, 1, 4, 5, 6, 9, 10, 13, 或 14 时,输出为0,当输入为3,8,11或12时输出为任意值。举例来说,7对应输入abcd为0,1,1,1.
数字积木
2021/04/15
4870
来看联发科芯片秋招的一个大题(1)——全减器电路与Verilog
输入 A = 0,B = 0,0+0 = 0,所以 S = 0,C = 0;
FPGA探索者
2021/04/15
1.3K0
来看联发科芯片秋招的一个大题(1)——全减器电路与Verilog
Python sympy 模块常用功能(一)
定义符号变量 >>> a = symbols('a') >>> b, c, d = symbols('b c d') >>> syms = symbols("a0:5")#也可以以range的方式定义符号变量元组 >>> syms (a0, a1, a2, a3, a4) >>> g,h = var('g h')# 也可以用var >>> x = var('x', positive=True)#可以设定条件(正数) >>> abs(-x) >>> k, m, n = symbols('k m n', i
用户6021899
2019/08/14
2.3K0
推荐阅读
相关推荐
逻辑电路&代数运算(下)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档