一、模拟与数字:两种世界观
前面五课,我们处理的大多是模拟量:电压可以是 1.234 V,也可以是 1.2345 V,它是连续变化的。而数字电路把世界简化成两个状态:高(1)和低(0)。
📈
模拟量连续变化,像水银温度计的液柱,精度受噪声影响大
🔢
数字量只分高低两档,像电灯的开和关,抗干扰能力强
类比:模拟信号像一个可以随意滑动的音量旋钮,你能听出 37% 和 38% 的区别;数字信号像一个只有"开"和"关"的按钮,但正因为只有两种状态,即使有一点噪声,只要不超过"判断门槛",它的意思就不会变。这正是计算机、单片机、手机都用数字的原因。
1.1 数字电路的三个优点
- 抗干扰强:只要电压在"高"的范围内,无论有多少小噪声,都会被判为 1。
- 易于存储与复制:0 和 1 可以无损地保存、复制、传输。
- 可以用逻辑运算做复杂的事:加、减、判断、控制,都可以拆解为逻辑门的组合。
代价:数字系统必须把模拟世界"翻译"成 0 和 1,这要靠 ADC(模数转换);反过来要靠 DAC(数模转换)。我们前面学的运放、比较器,常常就是这座桥的一部分。
二、二进制:只用 0 和 1 数数
我们平时用的十进制,每一位有 10 种可能(0 到 9)。二进制每一位只有 2 种可能(0 和 1),所以逢二进一。
2.1 位权:每一位值多少?
二进制的每一位都有一个"位权",从右往左依次是 2⁰、2¹、2²、2³……
| 位 | 8 位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 位权 | 2⁷=128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | — |
例:二进制 1011 的值是 8 + 2 + 1 = 11(十进制)。
2.2 动手拨一拨:点击每一位
点击下面的位,让它在 0 和 1 之间切换,观察十进制值如何变化。
2.3 为什么电路偏爱二进制?
电路只需要区分"高"和"低"两种状态,用二进制最直接:一根线表示一位。如果用十进制,就需要区分 10 种电压档位,既复杂又容易出错。
位数决定范围:n 位二进制最多能表示 2ⁿ 个数,范围是 0 到 2ⁿ − 1。8 位能表示 0 ~ 255,16 位是 0 ~ 65535,32 位是 0 ~ 4294967295。这就是"8 位单片机""32 位单片机"名字的由来。
三、十六进制与 BCD:给二进制"瘦身"
3.1 十六进制:一位表示四位二进制
二进制太长,读起来费劲。十六进制用 0–9 和 A–F 共 16 个符号,每一位正好对应 4 位二进制:
| 十六进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 二进制 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 |
| 十六进制 | 8 | 9 | A | B | C | D | E | F |
| 二进制 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
例:0xA5 = 1010 0101 = 128 + 32 + 4 + 1 = 165。写程序时看到 0x 开头,就是十六进制。
常见误会:0x10 不是十进制的 10,而是 16。在单片机寄存器配置里,这一点错了整个外设都会出问题。
3.2 BCD 码:用二进制存十进制数字
BCD(Binary-Coded Decimal)是每一位十进制数字单独用 4 位二进制表示。例如十进制 25 写成 BCD 就是 0010 0101。它常用于数码管显示和时钟芯片,因为"看到的数字"和"存的数字"可以一一对应。
四、电平:0 和 1 在电路里长什么样
数字电路里,"0"和"1"并不是精确的 0 V 与 5 V,而是一个电压范围。电压落在哪个范围,就被判为哪一种状态。
4.1 判断门槛
VIH(输入高电平最小值):高于它,一定被认为是 1
VIL(输入低电平最大值):低于它,一定被认为是 0
中间区域:不确定,电路可能误判,必须避免
输出端同样有 VOH(输出高)与 VOL(输出低)的规定
4.2 动手拨一拨:电压落在哪个区?
拖动滑块设定输入电压,看它落在"低""不确定""高"哪个区间。切换 5 V 系统和 3.3 V 系统,观察门槛的不同。
输入电压-
判断结果-
门槛(VIL / VIH)-
| 系统 | 低电平(VIL 上限) | 高电平(VIH 下限) | 备注 |
| 5 V CMOS(如 74HC) | 约 1.5 V 以下 | 约 3.5 V 以上 | 门槛约为电源的 30% 与 70% |
| 5 V TTL(如 74LS) | 0.8 V 以下 | 2.0 V 以上 | 老式经典,门槛较宽 |
| 3.3 V 系统 | 约 1 V 以下 | 约 2.3 V 以上 | 单片机常用,门槛随电源变化 |
噪声容限:一个门的输出高电平(如 4.4 V)与下一个门的输入高门槛(如 3.5 V)之间的差,就是"噪声容限"。差得越大,电路越能容忍干扰。这就是为什么输出必须比门槛"更彻底"地拉高或拉低。
一个经典事故:3.3 V 单片机的输出,接到 5 V 系统的输入。3.3 V 的高电平对 5 V 系统来说可能达不到 VIH,导致通信失败。这种时候要做电平转换(如用三极管、电平转换芯片)。
五、基本逻辑门:数字世界的"积木"
逻辑门是对 0 和 1 做运算的最小单元。它的输入和输出都是 0 或 1,关系用真值表描述。
✖️
与门 AND所有输入都为 1,输出才为 1。像两个开关串联。
➕
或门 OR只要有一个输入为 1,输出就为 1。像两个开关并联。
🔁
非门 NOT输入取反:1 变 0,0 变 1。最简单的"反向器"。
5.1 动手试一试:选择门,切换输入
选择一种门,点击 A、B 切换输入,观察输出灯的变化。表格中当前的输入组合会高亮。
5.2 与门 AND:串联开关
想象两个开关串联接在电池和灯之间,只有两个开关都闭合,灯才亮。这就是与门。在单片机里,它常用于"条件同时满足才动作",例如:温度够高 与 按钮被按下,才启动风扇。
5.3 或门 OR:并联开关
两个开关并联,任何一个闭合,灯就亮。例如:报警按钮按下 或 温度超限,任一条件成立就报警。
5.4 非门 NOT:取反
非门把信号反过来。它常用于产生"反相"的控制信号,比如第4课讲过的 NPN 三极管驱动,输入高时输出低,就是一种非门的效果。
六、组合逻辑门:NAND、NOR、XOR
6.1 与非门 NAND:先与再非
NAND 就是 AND 的输出再取反。它的神奇之处在于:只用 NAND 门,就能搭出任何逻辑电路。这让它成为芯片设计里最常用的"通用门"。
6.2 或非门 NOR:先或再非
NOR 也是通用门,同样可以搭出任何电路。在一些 CMOS 结构和存储器里很常见。
6.3 异或门 XOR:两者不同才为 1
XOR(exclusive OR)的规则是:输入不同,输出为 1;输入相同,输出为 0。它是加法器的基础:一位二进制相加,本位和就是 XOR 的结果。
XOR 的小技巧:一个数与 1 异或会翻转它的最低位。这个性质在 LED 闪烁、奇偶校验、简单加密中都会用到。
6.4 同或门 XNOR:两者相同才为 1
XNOR 是 XOR 取反,常用于比较两个数是否相等。如果两个输入相同,输出为 1。
七、布尔代数与德摩根定律
逻辑运算有一套代数规则,叫布尔代数。它让我们能像化简数学式子一样,化简电路。
7.1 常用符号
| 运算 | 写法 | 含义 |
| 与 | A · B 或 AB | 两者都为 1 时为 1 |
| 或 | A + B | 任一为 1 时为 1 |
| 非 | Ā(A 上面一横) | 取反 |
| 异或 | A ⊕ B | 两者不同时为 1 |
7.2 几条基本规则
- A · 1 = A,A · 0 = 0,A + 0 = A,A + 1 = 1
- A · A = A,A + A = A,A · Ā = 0,A + Ā = 1
- 交换律、结合律、分配律:A(B + C) = AB + AC
7.3 德摩根定律:最有用的一条
¬(A · B) = Ā + B̄ (与非 = 非 A 或 非 B)
¬(A + B) = Ā · B̄ (或非 = 非 A 与 非 B)
"断开那根线、取反,与变或,或变与"——这就是德摩根定律的口诀
生活例子:"不是(又高又帅)" 等于 "不高 或者 不帅"。把"与"换成"或",两个条件各自取反,这就是德摩根。
7.4 化简例子
原式 F = A·B + A·B̄,提取公因子 A:F = A·(B + B̄) = A·1 = A。原本需要 3 个门的电路,化简后只剩一根线。
工程意义:化简能省门电路、省引脚、省电,还能减少出错的机会。芯片设计和 PLC 编程中,化简都是必修课。
八、用逻辑门解决实际问题
8.1 例子:三人表决器
三个人投票,两人及以上同意,议案通过。设 A、B、C 为 1 表示同意,输出 F 为 1 表示通过:
F = AB + BC + AC
只要任意两个同意,F 就为 1。可以用 AND 与 OR 门搭出来
8.2 例子:楼梯灯双控开关
楼上楼下两个开关都能控制同一盏灯。这就是 XOR 的典型应用:两个开关的状态"不同"时,灯亮;"相同"时,灯灭。
8.3 例子:按钮去抖与使能控制
单片机引脚接一个按钮,只有当"按钮按下"且"系统允许工作"两个条件同时满足,才执行动作。这就是 AND:
动作 = 按钮 · 使能
8.4 例子:用与门做"选通"
让一个信号 S 只在 EN 为 1 时才通过:输出 = S · EN。EN 相当于"闸门开关"。这在多路数据选择、总线控制中非常常见。
设计习惯:先用一句话写清楚"什么条件下输出为 1",再把它写成与或式,最后化简、选门。很多复杂的数字电路,都是这样一步步拆出来的。
九、输出结构:推挽、开漏与上拉
前面几课的三极管、MOS 管,在数字电路里有两种典型的输出结构,这是单片机 IO 口配置时经常遇到的问题。
9.1 推挽输出(Push-Pull)
输出端有一个上管和一个下管,轮流导通:输出高时上管导通、下管截止;输出低时反过来。它既能拉高也能拉低,速度快、驱动能力强,是大多数单片机 IO 的默认模式。
9.2 开漏输出(Open-Drain)
输出只有下管,没有上管。它只能拉低,或者"放开"(高阻态)。要得到高电平,必须外接一个上拉电阻到电源。
类比:推挽像一个会推也会拉的人;开漏像一个只会拉、松手后靠弹簧(上拉电阻)弹回来的人。好处是多个设备可以共用一根线(如 I²C),谁拉低,线就是低,互不冲突。
9.3 上拉与下拉
- 上拉电阻:把引脚拉到高电平,常用 4.7 kΩ 或 10 kΩ。按键一端接地、另一端接引脚加上拉,按下时为低电平。
- 下拉电阻:把引脚拉到低电平,防止悬空时乱跳(第4课讲过)。
悬空输入是大忌:数字输入脚悬空时,它会受到周围噪声影响,在高低之间乱跳,还会增加功耗。不用的输入脚,要接上拉或下拉,不能空着。
十一、本节小结
- 数字电路只用 0(低)和 1(高),抗干扰强,易存储,可用逻辑运算处理。
- 二进制逢二进一,位权为 2ⁿ;十六进制一位对应 4 位二进制,写作 0x 开头。
- 0 和 1 是电压范围,由 VIH、VIL 门槛判定;3.3 V 与 5 V 系统之间要注意电平匹配。
- 基本门:AND(全 1 出 1)、OR(任 1 出 1)、NOT(取反)。
- 组合门:NAND、NOR 是通用门;XOR 是加法和比较的基础。
- 德摩根定律:¬(AB) = Ā + B̄,¬(A+B) = Ā·B̄,用于化简电路。
- 输出有推挽和开漏两种结构;悬空的输入必须加上拉或下拉。
下一页:第6课(下):触发器、时钟与计数器