在逻辑代数中的对偶式:如果将逻辑函数
表达式
F中所有的“·”变成“+”,“+”变成“·”,“0”变成“1”,“1”变成“0”,并保持原函数中的运算顺序不变,则所得到的新的逻辑
表达式
称为函数F的对偶式,并记作F'。
F=AB+B(C+0) F'=(A+B)(B+C·1)
正逻辑:用高电bai平表示逻辑1,用低电du平表示逻辑zhi0
负逻辑:用低电平表示dao逻zhuan辑shu1,用高电平表示逻辑0
正负逻辑之间存在着简单的对偶关系,例如正逻辑与门等同于负逻辑或门等。
在数字系统的逻辑设计中,若采用NP.
链接: https://wenku.baidu.com/view/61589b0b43323968011c92ed.html
https://wenku.baidu.com/view/ae9c050b52ea551810a68782.html
https://www.dgzj.com/dianzi/58466.html
http://m.elecfans.com/article/151594.html
你了解如何如何分析组合逻辑电路与时序逻辑电路吗?
数字电路
根据逻辑功能的不同特点,可以分成两大类,一类叫组合逻辑电路(简称组合电路),另一类叫做时序逻辑电路(简称时序电路)。逻辑电路的特点组合逻辑电路在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。而时序逻辑电路在逻辑功能上的特点是任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说,还与以前的输入有关。很多人往往对于这两种逻辑电路的分析有困惑。组合逻辑电路组合逻辑电路中,有两个方面的问题是我们十分关注:第一个是对于给定的组合电路,确定其逻辑功能,即组合电路的分析;第二个是对于给定的逻辑功能要求,在电路上如何实现它,即组合电路的设计。要解决这两方面的问题必须把门电路和逻辑代数的知识紧密地联系起来。组合逻辑电路一般分析方法分析组合逻辑电路的目的,就是针对给定的组合电路利用门电路和逻辑代数知识,确定电路的逻辑功能。也是我们了解和掌握组合电路模块逻辑功能的主要手段。组合电路的分析步骤大致如下:1.根据给定的逻辑电路图,写出各输出端的逻辑
表达式
;2.对各逻辑
表达式
进行化简与变换;3.列出
真值表
这次分享的资源的关键是逻辑函数与
逻辑门
,
1)首先讲解了与,或,非,异或,同或等重要逻辑关系,相应的逻辑函数与运算定律;
2)然后是逻辑函数与
真值表
:包括
真值表
,最大项,最小项,标准形式,任意项
3)卡诺图的化简与降维;如何根据卡诺图来化简逻辑函数
4)重要逻辑关系对应的逻辑符号;
一、 单项选择题
1. 只有在时钟的下降沿时刻,输入信号才能被接收,该种触发器是( )。
A. 高电平触发器 B.下降沿触发器 C. 低电平触发器 D. 上升沿触发器
2. 下列电路中,属于时序逻辑电路的是( )
A. 编码器 B. 译码器 C. 数值比较器 D. 计数器
3. 若将一个TTL与非门(设输入端为A、B)当作反相器使用,则A、B端应如何连接( )
A. A、B两端并联使用 B. A或B中有一个接低电平0 C. 不能实现
4. 在二进制译码器中,若输入有5位二进制代码,则输出有( )个信号。
A. 32 B. 16 C. 8 D. 4
5. 同步RS触发器的“同步”时指( )
A. RS两个信号同步 B. Qn+1与S同步
C. Qn+1与R同步 D. Qn+1与CP同步
6. 不是最小项ABCD逻辑相邻的最小项是( )
A. BCD B. A CD C. B D D. AB D
7. 与 相等的为( )
A. B. C.
8. 测得某
逻辑门
输入A、B和输出F的波形如图1所示,则F(A,B)的
表达式
是( )
A. F=AB B. F=A+B C. D.
9. 某逻辑函数的
真值表
见表1,则F的逻辑
表达式
是( )。
10. 要实现 ,JK触发器的J、K取值应为( )。
A J=K=0 B J=K=1 C J=0 K=1
11. 可以用来实现并/串转换和串/并转换的器件是( )
A. 计数器 B. 全加器 C. 移位寄存器 D. 存储器
12. 下列触发器中没有计数功能的是( )
A. RS触发器 B. T触发器 C. JK触发器 D. Tˊ触发器
13. 某逻辑电路输入A、B和输出Y的波形如图2所示,则此电路实现的逻辑功能是( )
A. 与非 B. 或非 C. 异或 D. 异或非
14. 若两个逻辑函数相等,则它们必然相同的是( )
最近帮老师改作业,发现同学们交上来的作业里,同一个
表达式
有好几种写法,被搞得不胜其烦,干脆花了点时间写了个程序来判断这些
表达式
究竟是不是同一个意思。
基本上按照四则运算的写法,使用了一个数字栈,一个运算符栈。括号和非运算则采用了递归的方式来计算括号内核非运算内的值。
逻辑
表达式
中有4中运算符,+,*,#和[] 分别表示或,与,异或,非运算。其中,异或运算不推荐与其他运算混合。如果一定要混合的话,
(1)与项最少,即
表达式
中“+”号最少。
(2)每个与项中的变量数最少,即
表达式
中“· ”号最少。
1.逻辑函数式的常见形式一个逻辑函数的
表达式
不是唯一的,可以有多种形式,并且能互相转换。例如:
3.逻辑代数的基本公式
公式的证明方法:
(2)用
真值表
证明,即检验等式两边函数的
真值表
是否一致。
例 用
真值表
证明反演律
(1)用简单的公式证明略为复杂的公式。
例 证明吸收律
用代数法化简逻辑函数
(4)配项法。
(1)并项法。
(2)吸收法。
(3)消去法。
运用公式 ,将两项合并为一项,消去一个变量。如
运用吸收律 A
(7)通过小组讨论完成电路的详细分析及编写项目实训报告。
读一读:或逻辑及或门
或逻辑指的是:当决定一件事情的几个条件中,只要有一个或一个以上条件具备,这件事情就发生。我们把这种因果关系称为或逻辑。
(a)电路图(b)
真值表
(c)逻辑
真值表
(d)逻辑符号
图1-12或逻辑运算
或逻辑举例:如图1-12(a)所示,或运算的
真值表
如图1-12(b)所示,逻辑
真值表
如图1-12(c)所示。
若用逻辑
表达式
来描述,则可写为:L=A+B。 读作“A或B”。在逻辑运算中或逻辑称为逻辑加。在
数字电路
中能实现或运算的电路称为或门电路,其逻辑符号如图1-12(d)所示。波形图分别图1-13所示。或运算也可以推广到多变量: L=A+B+C+D ·····
图1-13 或门的波形图
与非门(英语:NANDgate)是数字逻辑中实现逻辑与非的
逻辑门
,功能见左侧
真值表
。若当输入均为高电平(1),则输出为低电平(0);若输入中至少有一个为低电平(0),则输出为高电平(1)。与非门是一种通用的
逻辑门
,因为任何布尔函数都能用与非门实现。
与非门工作原理
①、A、B输入均为低电平时,1、2管导通,3、4管截止,C端电压与VDD一致,输出高电平。
②、A输入高电平,B输入低电平时,1、3管导通,2、4管截止,C端电位与1管的漏极保持一致,输出高电平。
③、A输入低电平,B输入高电平时,情况与②类似,亦输出高电平。
④、A、B输入均为高电平时,1、2管截止,3、4管导通,C端电压与地一致,输出低电平。
或非门(英语:NORgate)是数字逻辑中实现逻辑或非的
逻辑门
,功能见右侧
真值表
。若输入均为低电平(0),则输出为高电平(1);若输入中至少有一个为高电平(1),则输出为低电平(0)。或非是逻辑或加逻辑非得到的结果。或非是一种具有函数完备性的运算,因此其他任何逻辑函数都能用或非门实现
或非门工作原理
①、A、B输入均为低电平时,1、2管导
if (infix[i] >= 'a' && infix[i] <= 'z') {
postfix[j++] = infix[i];
} else if (infix[i] == '!' || infix[i] == '&' || infix[i] == '|') {
while (!is_empty(&op_stack) && precedence(infix[i]) <= precedence(top(&op_stack))) {
postfix[j++] = pop(&op_stack);
push(&op_stack, infix[i]);
} else if (infix[i] == '(') {
push(&op_stack, infix[i]);
} else if (infix[i] == ')') {
while (top(&op_stack) != '(') {
postfix[j++] = pop(&op_stack);
pop(&op_stack);
while (!is_empty(&op_stack)) {
postfix[j++] = pop(&op_stack);
postfix[j] = '\0';
int evaluate_postfix(char *postfix, int *values) {
Stack value_stack;
init_stack(&value_stack);
int i = 0;
while (postfix[i] != '\0') {
if (postfix[i] >= 'a' && postfix[i] <= 'z') {
push(&value_stack, values[postfix[i] - 'a']);
} else if (postfix[i] == '!') {
int a = pop(&value_stack);
push(&value_stack, !a);
} else if (postfix[i] == '&') {
int a = pop(&value_stack);
int b = pop(&value_stack);
push(&value_stack, a && b);
} else if (postfix[i] == '|') {
int a = pop(&value_stack);
int b = pop(&value_stack);
push(&value_stack, a || b);
return pop(&value_stack);
void print_header(char *variables, int num_variables) {
printf("| ");
for (int i = 0; i < num_variables; i++) {
printf("%c ", variables[i]);
printf("| f |\n");
void print_line(int *values, int result, int num_variables) {
printf("| ");
for (int i = 0; i < num_variables; i++) {
printf("%d ", values[i]);
printf("| %d |\n", result);
void print_truth_table(char *postfix, char *variables) {
int num_variables = strlen(variables);
int num_rows = 1 << num_variables;
int values[num_variables];
print_header(variables, num_variables);
for (int i = 0; i < num_rows; i++) {
for (int j = 0; j < num_variables; j++) {
values[j] = (i >> j) & 1;
int result = evaluate_postfix(postfix, values);
print_line(values, result, num_variables);
int main() {
char infix[100], postfix[100], variables[100];
printf("请输入逻辑
表达式
:");
scanf("%s", infix);
infix_to_postfix(infix, postfix);
int num_variables = 0;
for (int i = 0; infix[i] != '\0'; i++) {
if (infix[i] >= 'a' && infix[i] <= 'z' && strchr(variables, infix[i]) == NULL) {
variables[num_variables++] = infix[i];
variables[num_variables] = '\0';
print_truth_table(postfix, variables);
return 0;
这个程序实现了将中缀
表达式
转换为后缀
表达式
的函数infix_to_postfix()、计算后缀
表达式
的值的函数evaluate_postfix()、以及输出
真值表
的函数print_truth_table()。在程序运行时,它会先读入一个逻辑
表达式
,然后将其转换为后缀
表达式
,并计算出
表达式
中出现的不同变量。然后,它会枚举所有可能的变量取值组合,并输出
真值表
。例如,如果输入的逻辑
表达式
是"a|b&!c",那么程序的输出应该是:
| a b c | f |
| 0 0 0 | 1 |
| 0 0 1 | 0 |
| 0 1 0 | 0 |
| 0 1 1 | 0 |
| 1 0 0 | 1 |
| 1 0 1 | 1 |
| 1 1 0 | 1 |
| 1 1 1 | 0 |