ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

用74LS00和74LS10搭建三人表决器:从逻辑推导到面包板避坑指南

用74LS00和74LS10搭建三人表决器:从逻辑推导到面包板避坑指南 第一次搭三人表决器就被一个“幽灵票”坑了明明没人按下开关LED却亮着。查到最后才发现74LS00的一个输入脚悬空TTL芯片的悬空输入默认就是高电平等于系统里总有一个人偷偷投了赞成票。这个很小的坑恰恰是理解TTL芯片输入特性的最好切入点。今天要分享的这个项目就是用74LS00和74LS10两颗芯片手把手搭一个三人表决器。它属于数字电路入门里最经典的组合逻辑案例三个人每人一票两人及以上同意输出结果亮灯。我会把完整的电路图、引脚连接和测试步骤都列出来也会把实操中容易翻车的地方专门拿出来说。1. 为什么三人表决器要选74LS00和74LS10门电路选型思路选芯片之前得先想清楚这个电路到底在算什么。三人表决器的规则是“多数通过”A、B、C三个人每人操作一个开关同意为逻辑1不同意为逻辑0当同意的人数大于等于2时输出F为1LED点亮。这个逻辑翻译成布尔表达式就是F AB AC BC这里 AB 表示 A 和 B 同时同意AC 表示 A 和 C 同时同意BC 表示 B 和 C 同时同意三个条件任意一个成立表决就通过。这个表达式不复杂但“用什么门实现”却有个讲究。1.1 表决器本质是“多数逻辑”很多人一开始想的是用与门和或门先用三个二输入与门分别算出 AB、AC、BC再用一个三输入或门把结果合并。听起来很直接但实际搭起来并不省事因为你需要两种不同类型的芯片。而用与非门实现则只需要两种芯片并且这两种芯片内部结构、引脚逻辑非常规整这就是教材和实验课都爱用它们的原因。这个电路的逻辑天生适合用“反相后再合并”的方式实现。先看关键一步F AB AC BC对表达式两边同时取反再用一次德摩根定律展开F ((AB AC BC)) ((AB) (AC) (BC))也就是说先分别产生 AB、AC、BC 的“与非”结果也就是 (AB)、(AC)、(BC)再把这三个中间信号送进一个三输入与非门输出正好就是 F。整个过程只需要二输入与非门和三输入与非门这两种门。1.2 与非门的组合能力与非门被称为“万能门”因为任何组合逻辑都可以只用与非门搭出来。二输入与非门可以做与、或、非三输入与非门则可以直接处理三个信号的“与非”关系。74LS00 是四重二输入与非门74LS10 是三重三输入与非门这两颗芯片组合在一起刚好覆盖这个表决器需要的所有门。再说选型逻辑。为什么不用 74HC00、CD4011 这些 CMOS 芯片不是因为不能用而是 74LS 系列在入门实验中有两个明显优势一是输出可以直接驱动 TTL 兼容的电路二是芯片本身便宜、好买、抗静电能力比早期 CMOS 强适合新手在面包板上反复插拔。当然 CMOS 版本逻辑相同后面避坑部分我会专门提一下替换时的注意点。2. 从真值表到门级电路逻辑推导和完整电路图这一节把整个设计过程走一遍。先列真值表再推导表达式最后画出完整的门级连接图。这样即使你之前没接触过布尔代数也能照着思路走通。2.1 真值表与逻辑表达式三个人 A、B、C每人一票1 表示同意0 表示反对。输出 F 为 1 时表示表决通过。真值表如下ABCF说明0000无人同意0010只有1人同意0100只有1人同意01112人同意1000只有1人同意10112人同意11012人同意11113人同意从真值表可以直接读出 F AB AC BC。这个表达式是“与或式”用与门和或门实现很直接但既然目标是只用与非门就要做一次等价变换。2.2 全部用与非门表示刚才已经做过变换F ((AB) (AC) (BC))。它的物理含义是74LS00 的第一个与非门计算 AB输出 (AB)74LS00 的第二个与非门计算 AC输出 (AC)74LS00 的第三个与非门计算 BC输出 (BC)74LS10 的一个三输入与非门接收这三个中间信号输出 F。这三个中间信号分别记为 nAB、nAC、nBC小写 n 表示“取反”。它们同时为 1 的情况只在某个两人组合“同时同意”时被打破比如 A 和 B 同时同意时nAB0三输入与非门输出立刻变 1完成表决。2.3 完整门级连接图用文本表示完整的门级电路如下A ──┤1 \ │ )── 74LS00 G1 输出 (AB) ──┐ B ──┤2 / │ ├── 74LS10 G2 2A (pin3) ──┐ A ──┤1 \ │ │ │ )── 74LS00 G2 输出 (AC) ──┤── 74LS10 G2 2B (pin4) ──┤ C ──┤2 / │ │ ├── 74LS10 G2 2C (pin5) ──┘ B ──┤1 \ │ │ )── 74LS00 G3 输出 (BC) ──┘ C ──┤2 /74LS10 的输出端是 2Ypin6这时的输出已经是表决结果 F。不过要驱动 LED还需要再经过一级反相器原因放在第4节和第6节详细讲。反相器用 74LS00 剩下的第四个与非门完成把两个输入短接输出就是输入的反相信号。F ──┤1 \ │ )── 74LS00 G4 输出 F ── LED负极 F ──┤2 /到这里门级电路已经完整3 个二输入与非门负责生成三个中间信号1 个三输入与非门负责合并1 个二输入与非门接成反相器负责驱动 LED。74LS00 四个门全部用完74LS10 只用了其中一个门正好是一颗芯片干一种活。3. 动手前准备工作元件清单、引脚识别和电源方案买齐元件之前先把每颗芯片的引脚搞清楚。这个项目最隐蔽的坑之一就是引脚图抄错尤其是 74LS10 和 74LS00 同为 14 脚 DIP 封装摆在一起特别容易看混。3.1 元件清单除了两颗芯片还需要以下元件元件规格/型号数量用途74LS00四重二输入与非门1生成中间信号和输出反相74LS10三重三输入与非门1合并表决结果拨动开关SPDT 单刀双掷3模拟每人投票直观可靠LED红色 5mm1输出指示电阻330Ω 或 470Ω1LED 限流面包板830 孔1搭建电路跳线若干若干连接线路5V 电源USB 供电或电源模块1给芯片供电拨动开关这里我特别说一下。很多人习惯用轻触按键但轻触按键只有“按下/松开”两个状态要让输入在 0 和 1 之间正确切换必须处理上拉或下拉电阻。TTL 芯片对下拉电阻非常敏感下面 3.3 会展开讲。而拨动开关是单刀双掷中间脚接芯片输入两边分别接 5V 和 GND拨到哪边输入就是哪个电平不存在悬空问题对新手最友好。3.2 74LS00与74LS10引脚对照14 脚 DIP 芯片的角上有一个半圆形凹口凹口朝左时左下角是 1 脚然后逆时针绕一圈到 14 脚。74LS00 的引脚功能如下引脚功能11A21B31Y42A52B62Y7GND83Y93A103B114Y124A134B14VCC74LS10 同样是 14 脚但引脚分布和 74LS00 完全不同这一版按常见封装排列如下引脚功能11A21B32A42B52C62Y7GND83Y93A103B113C121C131Y14VCC提示不同厂家的数据手册排版可能有细微差异动手前最好对着芯片丝印查一下手册。74LS10 的三个门功能完全一样如果你的引脚表和我写的不一致不用慌把每个门的输入输出找对换用另一组门连线即可。3.3 输入开关与TTL电平的配合TTL 芯片输入端的特性和 CMOS 差异很大。74LS 的输入端悬空时内部结构会让它默认表现为高电平而不是像 CMOS 那样逻辑不定。这就导致一个非常经典的问题如果你用轻触按键接 5V输入端再通过一个 10k 电阻下拉到 GND理论上松开按键应该是低电平但实际上 74LS 输入低电平时的输入电流有 1.6mA 左右这个电流流经 10k 电阻会产生 16V 的压降早就超过低电平阈值了输入根本拉不到 0。所以 TTL 输入不能靠“大电阻下拉”来定义逻辑。要绕开这个问题最简单的方法就是用 SPDT 拨动开关中间脚接芯片输入一头接 5V一头接 GND。拨到 5V输入就是高电平拨到 GND输入就是低电平。没有悬空也没有电平偏离问题。如果手头只有轻触按键也不是完全不能做但要把下拉电阻换得很小比如 330Ω确保输入低电平时电阻上的压降小于 0.8V。不过这种做法会让输入低电平状态多消耗几个毫安电流三个开关加起来十几毫安虽然 5V 电源扛得住但没必要。从教学和稳定性角度我都推荐直接用拨动开关。4. 面包板搭建全过程照接线表一步一步来电路原理清楚了接线就只是照着做。面包板中间有一条凹槽芯片要跨在凹槽两侧插这样才能让每个引脚独立不会左右导通。电源轨通常用面包板两侧的红色和蓝色长条红轨接 5V蓝轨接 GND。4.1 电源和地线先行先把两颗芯片插到面包板上凹口朝左。然后接通电源和地74LS00 的 pin7 接 GNDpin14 接 5V74LS10 的 pin7 接 GNDpin14 接 5V有条件的话在 5V 和 GND 之间并一个 0.1µF 瓷片电容靠近芯片放置可以滤掉电源线上的高频噪声。这里有个操作顺序上电之前先检查一遍 5V 和 GND 有没有接反尤其是 USB 线供电时红线是 5V黑线是 GND。74LS 芯片电源接反基本就是当场烧毁闷烧到看不出伤痕排查起来特别闹心。4.2 表决输入部分接线三个拨动开关分别代表 A、B、C。每个开关的中间脚接一根跳线到芯片输入端开关的一侧接 5V另一侧接 GND拨到 5V 表示“同意”拨到 GND 表示“反对”。信号线连接如下信号起点终点A开关1中间脚74LS00 pin1、pin4B开关2中间脚74LS00 pin2、pin9C开关3中间脚74LS00 pin5、pin10nAB74LS00 pin374LS10 pin3nAC74LS00 pin674LS10 pin4nBC74LS00 pin874LS10 pin5F74LS10 pin674LS00 pin12、pin13短接仔细看这个表A 信号同时接到 74LS00 的 1A 和 2AB 信号同时接到 1B 和 3AC 信号同时接到 2B 和 3B。这样安排是因为第一个门负责 AB第二个门负责 AC第三个门负责 BC每个输入信号都要参与两个门计算。如果漏接一条线对应的两人组合就不会触发。接线时可以按照“先接输入信号再接中间信号”的顺序来。比如先把 A、B、C 三个开关的跳线都接到对应引脚然后再接 nAB、nAC、nBC 到 74LS10。中途用不同颜色的跳线区分信号A、B、C 用三种颜色中间信号用第四种颜色调试时一眼就能分清。4.3 LED输出与限流电阻74LS10 的 pin6 是表决结果 F但 F 不能直接驱动 LED。原因在于 74LS 系列高电平输出时的拉电流能力很弱典型值只有 0.4mA 左右直接接一个 LED 到 GND点亮效果会很暗甚至完全不亮。而低电平输出时的灌电流能力可以达到 8mA所以正确的做法是把 LED 接成“输出低电平点亮”的形式。为了让逻辑符合直觉也就是“表决通过时 LED 亮”在 F 后面加一级反相器把 F 变成 F。74LS00 的第四个门就是干这个的pin12 和 pin13 短接在一起共同接收 Fpin11 输出 F。当 F1 时F0LED 导通点亮当 F0 时F1LED 截止熄灭。LED 的接法是LED 负极接 74LS00 pin11LED 正极串联一个限流电阻到 5V。电阻取值可以自己算一下。假设红色 LED 正向压降 1.8V74LS 低电平输出电压约 0.25V想让电流控制在 8mA 左右电阻为R (5V - 1.8V - 0.25V) / 8mA ≈ 368Ω取标准值 330Ω实际电流约 8.9mA取 470Ω电流约 6.3mA也完全够亮。没有特殊要求直接选 470Ω 更保守LED 寿命和芯片负载都更轻松。5. 上电验证与故障排查从测试表到万用表线全部接好之后不要急着通电。先肉眼检查一下有没有明显接错尤其是电源正负极。然后上电把三个开关都拨到 GNDLED 应该是灭的。如果此时 LED 就亮了很大概率是某个输入脚悬空TTL 把它当成高电平了。5.1 验证表决逻辑的测试表按照下面的表格依次拨动开关记录 LED 状态。开关拨向 5V 表示同意记为 1拨向 GND 表示反对记为 0。ABC预期FLED0000灭0010灭0100灭0111亮1000灭1011亮1101亮1111亮如果测试结果和表格一致说明电路搭对了。如果某一组合不对不要急着拆线按照下面的排查顺序来。5.2 常见故障排查顺序先量电源再量中间信号最后量输出。用万用表直流电压档黑表笔接 GND红表笔逐点测量。第一步测芯片供电。74LS00 和 74LS10 的 pin14 对地都应该是 5Vpin7 对地应该是 0V。电压不对就检查电源接入部分。第二步测输入信号。拨动 A 开关量 74LS00 pin1应该在 0V 和 5V 之间切换。三个输入信号都确认无误后再往下一级。第三步测中间信号 nAB。74LS00 pin3 的逻辑是 (AB)也就是说只有当 A 和 B 同时为 1 时pin3 才为 0其他时候都是高电平。很多人第一次测到这里会误以为“这个点怎么一直是高电平是不是芯片坏了”其实是逻辑本身如此。nAC 对应 pin6nBC 对应 pin8判断方法同理。第四步测 74LS10 pin6 的输出 F。当三人表决通过时这里为高电平不通过时这里为低电平。如果这里正确但 LED 不亮问题就在反相级或者 LED 连接部分。第五步测 74LS00 pin11 的 F。通过时应该是低电平。如果这里为低LED 还不亮检查 LED 方向、限流电阻以及 pin11 到 LED 负极的连线是否接触良好。面包板接触不良是另一个高频故障源。芯片引脚没有完全插进面包板孔、跳线松了、面包板内部弹簧片老化都会导致信号时断时续。遇到“某个引脚电压正常但后面没信号”的情况多半就是接触问题用跳线重新插一下或者换一个面包板孔位就好。6. 避坑清单这些坑我踩过你绕开就行这一节把我实际搭建中遇到过的坑集中写一遍很多都是网上教程不会提的细节。6.1 TTL输入悬空等于自动投赞成票这是整个项目里最常见的错误。74LS 芯片的输入端悬空时内部电路会把它拉到高电平结果就是没有拨动任何开关芯片也认为有人投了同意票。用拨动开关可以完全避开这个问题但如果你手里只有轻触按键一定要搞清楚上拉和下拉到底该怎么选。按键接 VCC输入脚接 10k 下拉到 GND这个方案对 CMOS 芯片可能没问题但对 74LS 芯片基本不工作。原因就是 74LS 输入低电平时的输入电流太大大电阻上产生压降拉不出可靠的低电平。如果非要用轻触按键下拉电阻要远小于 1kΩ比如 330Ω才能保证低电平有效。不过按下按键时这个 330Ω 电阻上会流过不小的电流功耗偏高所以还是那句话优先用拨动开关。6.2 LED不要直接挂在输出高电平上很多人第一次搭想着“输出高电平就点亮 LED”于是把 LED 正极接芯片输出负极串电阻到 GND。结果 LED 非常暗甚至只有很微弱的一点光以为是芯片坏了。其实不是芯片坏而是 74LS 的高电平拉电流能力太弱带不动常规 LED。正确的思路是让芯片输出低电平时点亮 LED也就是“灌电流”接法。为了让表决通过时点亮我特意在 F 后面加了一级反相器把 F 接 LED。这样逻辑和视觉一致同时充分利用了 74LS00 的第四个门。如果你不介意点亮逻辑相反也可以把 LED 直接接在 F 上但不建议因为项目语义会变成“表决不通过时亮灯”容易把人绕晕。6.3 74LS10引脚图不能套74LS00的两者都是 14 脚GND 都在 7 脚VCC 都在 14 脚但中间每个门的输入输出位置完全不一样。如果照着 74LS00 的引脚习惯去接 74LS10很容易把输入接成输出把输出接成输入结果就是整个电路表现随机。建议接线前先把两张引脚表并排放在面前用不同颜色的笔圈出自己用到的门。本项目只用到 74LS10 的第二组门即 2A、2B、2C、2Y中间信号全部接在这组门上输出在 pin6。其他门空着就空着不要觉得浪费。6.4 没有74LS10时的一套替代思路如果手上只有 74LS00想拼出三输入与非门也不是不行用二输入与非门加反相器就能实现先用一个二输入与非门算 X 和 Y 的与非再把结果反相得到 X 与 Y最后再和 Z 做一次与非得到 (XYZ)。但这个方案需要三个门才能凑出一个三输入与非功能整体连线复杂度明显上升加上本项目还需要三个中间信号和一级 LED 反相总共需要两片 74LS00对新手来说得不偿失。更现实的替代方案是换成 74HC00 和 74HC10或者 CD4011 和 CD4023它们逻辑功能相同但注意不能只换其中一颗。74LS 输出高电平典型值只有 2.7V 到 3.4V而 74HC 在 5V 供电时的输入高电平阈值约 3.5VTTL 驱动 CMOS 很可能达不到阈值。所以要换就整套更换电源电压也要重新确认。6.5 做完之后还能怎么扩展这个三人表决器做完可以继续往几个方向加功能。一种是改成四人和五人表决器逻辑表达式会变成多个三人组合的或门数增加但思路一样另一种是在输出端接一个三极管驱动蜂鸣器做成声光同时提示还可以把三个输入开关换成传感器信号比如红外对射或者光敏电阻做一个简单的“光电机抢答”原型。我个人在实际搭建中最深的体会是数字电路看着简单但很多问题都出在芯片数据手册不被重视上。把每颗芯片的引脚和电气特性查清楚比盲目插线快得多。这个电路整篇看下来真正核心的动作只有几个理解表决逻辑、正确选门、规范接线、按级排查。把这些做扎实后续做更复杂的组合逻辑思路也会顺很多。
返回列表