2026/11/2 19:35:34

74LS85与74LS192搭建1-9层电梯控制系统:数字逻辑课程设计避坑指南

74LS85与74LS192搭建1-9层电梯控制系统:数字逻辑课程设计避坑指南 简介围绕1-9层电梯往返运行与楼层自动显示这份数字逻辑课程设计文档面向电子信息、计算机及相关专业学生和EDA入门学习者可用于完成高楼电梯自动控制系统的方案设计、电路实现与课程设计报告撰写。压缩包内共1个doc文件约719KB集中呈现完整设计报告包含设计任务与基本要求、系统模块划分、74LS85数值比较器、74LS192十进制可逆计数器、七段译码显示及十进制至二进制编码器等关键器件的原理与用法并配有引脚功能、真值表和简化逻辑图。已有1307人学习读者可据此梳理A/B楼层比较、正反转与停机开门逻辑理解组合逻辑与时序逻辑的衔接也能参考报告中的器件选型、调试思路和总结反思快速形成可验证的课程设计框架。1. 从一次验收前夜说起1-9 层电梯系统真正难在哪用 74LS 系列芯片把一部 1-9 层电梯的逻辑搭出来验收那关其实不难难的是你搭到一半发现A 数和 B 数一比较灯亮得对电机时序却抖——回头查才发现是级联输入脚悬空。我前后搭过三次这类课程设计最深的体会是高楼电梯自动控制系统真正的门槛不在芯片本身而在你把输入、比较、计数、显示四段拼成闭环时每个环节的默认状态有没有交代清楚。这篇就按我当时踩过来的顺序把 1-9 层电梯从拆模块到验收的细节摊开讲给正在做数字逻辑课程设计的人一个能照着走的参照。2. 拆模块不是拆着玩输入、比较、计数、显示四段怎么对接刚开始做这个系统的时候很多人会一上来就画整张逻辑图结果连线越画越乱。我后来习惯先把它切成四段输入编码、数值比较、可逆计数、七段显示每段单独仿真通过之后再拼。分段的好处是出了问题能快速定位到段而不是对着一整张图瞪眼。下面按信号流的方向把每段的接口和默认状态说清楚。2.1 输入通路九个楼层键怎么变成四位二进制乘客在楼层里按下目标楼层本质是一组开关。要把“第几层”这个十进制概念送进比较器得先过一层十进制到二进制的编码器。1 到 9 层需要至少 4 位二进制因为 2 的 3 次方是 8不够2 的 4 次方是 16能覆盖 0 到 151-9 完全够用。具体接法上我把 9 个按键开关按高低位排好每按下一个键编码器输出对应的四位码。这里有一个新手常忽略的点编码器的输出必须直接送到比较器 A 端和七段译码器输入端中间不要串多余的门。原因是编码器输出本身就是稳定的组合逻辑结果串门只会引入不必要的延迟和竞争。原设计里没有做数据寄存器这一点要坦白说——这意味着系统一次只能记住一个目标楼层没法像真电梯那样排队处理多个请求。站在课程设计的角度这不算错但如果你想让系统看起来更完整可以在编码器和比较器之间插一个 4 位锁存器比如 74LS175按下按键时锁存电梯到达后再释放。我当时的做法是先用锁存器把 A 数锁住避免乘客中途又按别的楼层导致 A 数跳变验收的时候这个细节被问到了算是加分项。四位编码信号除了送比较器还要并行送到七段译码显示系统让 A 数以十进制形式显示出来。七段显示这块用的是译码/驱动器和共阴极数码管后面第 4 章单独讲。2.2 比较通路A 数和 B 数怎么对齐A 数是目标楼层B 数是电梯当前楼层两者都是 4 位二进制。把它们同时接到 74LS85 的 A3A2A1A0 和 B3B2B1B0比较器会从最高位开始逐位判A3 和 B3 不相等结果直接由这一位决定相等才把决定权交给 A2 和 B2以此类推。这里最容易翻车的地方是级联输入端。74LS85 有三个级联输入IAB、IAB、IAB设计初衷是把多片 74LS85 串起来比更长的数。只比 4 位的时候这三个脚不能悬空必须显式处理IAB 接低电平IAB 接低电平IAB 接高电平。这样比较器才会认为“本片就是最高位那一片高位相等的前提成立”把结果完全交给本片的四位输入。我见过不少同学把这三个脚空着上电之后三个方向灯全亮或者灯的状态和实际楼层完全对不上。原因在 TTL 电路里很好解释输入端悬空在电气上等效于高电平于是 IAB 和 IAB 同时为高比较器内部逻辑直接打架输出就成了玄学。B 数从哪来从可逆计数器的输出端取。也就是说 74LS192 的 Q3Q2Q1Q0 既要送七段显示也要送比较器的 B 端。这条线要接得干净中间不要再挂别的负载否则计数器的扇出能力会被吃掉显示和比较两边都可能出问题。2.3 输出通路方向灯、数码管和电机时序比较结果出来是三根线YAB、YAB、YAB。这三根线要做两件事第一驱动三个方向指示灯第二生成三相电机的正转、反转、停机信号。三个灯的逻辑很直接AB 时 lamp1 亮表示电梯要上升AB 时 lamp3 亮表示电梯要下降AB 时 lamp2 亮表示到达并开门。三条状态必须互斥任何时刻只能有一个灯亮。如果你发现两个灯同时亮基本可以断定是比较器输出有问题而不是灯接错了。电机时序这块原设计里简化成了“正转时序/反转时序/停机”三类输出实际落地时要注意互锁。三相电机正反转不能同时导通所以 YAB 和 YAB 要分别去打开正转通路和反转通路再用 YAB 把两路都关掉。这里我建议用与非门做互锁而不是直接用或门拼原因是上电瞬间所有芯片输出未定纯或门拼出来的逻辑可能一瞬间让正反转同时有效。还有一层容易漏掉每层电梯门外要有上升/下降指示。真电梯里这是方向箭头课程设计里就是每层一组灯由当前 A 与 B 的关系驱动。这部分逻辑不难但线多建议单独画一张小表把每层的灯和比较结果对应关系列清楚接的时候照着表走比在图上现找快得多。3. 74LS85 这一关级联端接错三个方向灯全亮74LS85 是整个系统里最容易出问题、也最值得花时间吃透的一片芯片。它本身不复杂4 位数值比较器真值表也就那么几行但真到接线的时候级联端、判等优先级、输出互斥这三件事但凡错一件现象都长得差不多——灯乱亮或者电机乱转。这一章把这三件事拆开讲。3.1 只比四位时级联端到底该怎么接先把结论摆出来IAB 0IAB 0IAB 1。三个脚一个都不能空。为什么这么接得从 74LS85 的设计目的说起。它本来是为了级联比更长的数而生的比如两片串起来比 8 位。串的时候低位片的比较结果要送到高位片的级联输入端高位片再结合自己的四位决定最终结果。所以级联端的语义是“比我更高的那些位它们比出来是什么结果”。现在你只用一片比 4 位相当于没有更高的位那“更高位相等”这个前提就必须人为置成成立也就是 IAB 给高另外两个给低。空着会怎样前面提过TTL 输入悬空等效高电平。于是 IAB1、IAB1、IAB1三个前提同时成立比较器内部的优先级逻辑就失效了。表现出来可能是三个灯全亮也可能是灯的状态和输入完全无关看起来像“芯片坏了”其实只是三个脚没接。我一般会在接线图上用红笔把这三个脚圈出来接完先拿万用表量一遍电平和预期是否一致再上电。这一步花不了一分钟但能省掉后面半小时的排查。级联输入仅比 4 位时的接法悬空时的实际电平后果IAB接 GND低高比较前提冲突IAB接 GND低高比较前提冲突IAB接 VCC高高前提成立但被前两者污染3.2 判等为什么要一路比到最低位两个 4 位数相等的定义是A3B3 且 A2B2 且 A1B1 且 A0B0。74LS85 内部就是按这个顺序逐位判的高位一旦分出胜负低位就不再影响结果只有高位全部相等才需要看最低位。这个机制对电梯系统很重要因为 AB 是“到达目标楼层、停机开门”的触发条件。如果判等不严格比如你图省事用“AB 不亮且 AB 不亮”来反推 AB那在级联端没接好、输入有竞争、或者上电瞬间电平未定的时候AB 会被误触发电梯在楼层中间就停了甚至根本不动。我踩过一次坑为了省一根线把 YAB 直接接到停机信号上结果电梯每到一层都停因为计数器和比较器的传播延迟不一致比较器在计数器跳变的瞬间会输出一个极窄的 AB 脉冲。后来在 YAB 后面加了一级由时钟同步的 D 触发器把这个毛刺滤掉问题才消失。这件事让我记住一个习惯异步组合逻辑的输出只要拿去驱动执行机构就得考虑毛刺不能直接上。比较结果输出端电平对应方向灯电机动作ABYAB1其余为 0lamp1 亮正转上升ABYAB1其余为 0lamp3 亮反转下降ABYAB1其余为 0lamp2 亮停机开门3.3 三种比较结果到三个方向灯的映射上面这张表就是三个灯和三种状态的完整映射。接的时候有一个细节三个灯的驱动电流不要从比较器输出直接取74LS85 的扇出能力有限直接带三个 LED 加限流电阻亮度会偏暗严重时还会把输出电平拉低影响后面电机逻辑的判断。稳妥的做法是每路加一级三极管或者用 74LS04 反相器做缓冲把灯的负载和比较器隔开。还有一个容易被忽略的点楼层门外的上升/下降指示逻辑上跟轿厢内的方向灯不完全一样。轿厢内看的是“我现在要去哪”门外看的是“这部梯接下来要往哪走”。原设计要求各层门外都要有上升或下降到乘客所在楼层的控制开关这意味着每层都有一个本层召唤按钮它要参与 A 数的生成而不是只点亮一个灯。这就带出一个设计取舍如果每层召唤都直接改 A 数那多个楼层同时召唤时系统就乱了因为原设计没有请求排队机制。我的处理是每层召唤按钮只点亮本层指示灯同时把召唤信号送进一个或门产生一个“有请求”的全局信号再由这个信号去触发 A 数锁存。这样至少保证了同一时刻只有一个目标楼层被系统接受虽然不完美但比让 A 数乱跳要稳得多。4. 74LS192 加减计数时钟门控和异步复位的实战接法计数这一段的职责很明确B 数要跟着电梯实际位置走。AB 时往上加AB 时往下减AB 时停住。听起来简单但 74LS192 有两个时钟输入还有预置和清零两个异步端接错任何一个现象都是“计数不动”或者“计数乱跳”。4.1 加计数和减计数的时钟从哪来74LS192 的加减是分开两个时钟的CPU 是加计数时钟CPD 是减计数时钟都是上升沿有效。看真值表就很清楚MRPLCPUCPD工作模式1XXX异步清零00XX异步预置0111保持01上升沿1加计数011上升沿减计数所以做加计数的时候CPU 给脉冲CPD 必须保持高做减计数反过来。两个时钟不能同时给脉冲否则芯片行为未定义你看到的就是计数乱跳。实际接法上我用比较结果做门控YAB 有效时把系统时钟放行到 CPU同时把 CPD 拉高YAB 有效时放行到 CPDCPU 拉高YAB 时两路都封住。门控用与门实现与门的另一个输入就是比较结果这样比较结果一变时钟通路立刻切换计数器就停在当前值。这里有个时序上的坑要提醒比较结果是组合逻辑输出计数器的输出又会反过来影响比较结果形成一个反馈环。如果门控做得太直接计数器跳变的瞬间可能引发比较器输出抖动再反过来多打一个脉冲表现为“多走了一层”。我一般的做法是在门控与门和计数器时钟脚之间串一个 RC 低通或者一级施密特触发器把边沿整干净。课程设计里不一定要上施密特但至少要在仿真里把这一步的波形看清楚。4.2 手动预置和异步复位怎么用PL 是异步预置低有效。它的用途是在系统启动时把 B 数直接设成初始楼层比如电梯停在 1 楼就在 Pn 端拨好 0001上电时给 PL 一个低脉冲计数器立刻变成 1不用等时钟慢慢加。MR 是异步清零高有效。它的用途是系统异常时回到初始状态。注意“异步”两个字的含义它不依赖时钟电平一到立刻生效。这也意味着 PL 和 MR 不能同时有效否则芯片内部谁优先是不确定的。我的接法是 MR 默认拉低复位按钮按下时给高PL 默认拉高只在预置时给低两个信号在物理上互斥用按钮的常开常闭触点保证不会同时出现。预置数据从哪来如果只是固定从 1 楼开始把 Pn 直接接固定电平就行。但更实用的做法是把预置数据也接到一组拨码开关上这样任意楼层都能作为起始点调试的时候方便很多。我当时的做法是预置端接拨码开关MR 接复位按钮验收时演示“把电梯放到 5 楼再开机”逻辑照样跑得通这个细节给演示加了不少分。引脚全称有效电平在本系统里的用途MR异步主复位高系统异常时回到初始状态PL异步并行负载低上电时把 B 数预置到指定楼层CPU加计数时钟上升沿AB 时放行系统时钟CPD减计数时钟上升沿AB 时放行系统时钟TCU进位输出高到 9 层时向上级联或做上限钳位TCD借位输出高到 1 层时向下级联或做下限钳位4.3 七段译码显示译码驱动器和共阴数码管的配合A 数和 B 数最终都要以十进制形式显示出来这一段用译码/驱动加共阴极数码管。资料里把译码器写成 75LS48这是笔误标准型号是 74LS48BCD 到七段译码/驱动器输出高电平有效正好配共阴极数码管。如果手头只有共阳数码管那就得换 74LS47它是低电平有效输出两者不能混用。接线的时候注意两点。第一74LS48 的灭灯测试脚和灭零输入脚要接对测试脚LT平时拉高拉低时所有段全亮可以用来快速检查数码管有没有坏段灭零输入RBI在不需要灭零时拉高。这两个脚悬空的话显示可能闪烁或者缺段。第二每段要串限流电阻一般 330 欧到 470 欧之间具体看数码管的额定电流电阻太小会烧段太大亮度不够。B 数的显示要跟着计数器实时变A 数的显示要跟着输入编码变。两路显示建议用两组独立的译码器和数码管不要试图用一套显示切换显示两个数切换逻辑会引入额外的时序问题得不偿失。器件输出有效电平配套数码管备注74LS48高共阴极资料里的 75LS48 是笔误74LS47低共阳极开漏输出需外接上拉5. 验收前一周的排查记录五类问题的现象、原因和解法这一段是我当时记在笔记本上的排查清单每一条都是实际遇到过、并且花了时间才定位到的问题。写出来是希望后来的人少走一点弯路遇到相似现象时能直接对号入座。5.1 数码管乱跳或者显示不全现象上电后 A 数显示正常B 数数码管偶尔缺段按键一按就闪。原因编码器输出没有锁存按键抖动直接传进了译码器同时译码器的测试脚悬空电平不定导致段选误动作。解决在编码器输出和译码器输入之间加一级 4 位锁存器按键按下时锁存测试脚和灭零脚按第 4 章说的接固定电平按键两端并一个 0.1μF 电容做硬件去抖。改完之后显示稳了按键也不再闪。5.2 三个方向灯同时亮现象上电后 lamp1、lamp2、lamp3 全亮按任何按键都不变。原因74LS85 的三个级联输入脚悬空TTL 输入等效高电平比较器内部前提冲突三个输出同时有效。解决把 IAB 和 IAB 接 GNDIAB 接 VCC。接完先量电平再上电三个灯立刻恢复互斥。5.3 计数到 9 之后不回 1继续往上走现象电梯从 8 楼往 9 楼走正常但目标设成 9 楼以上时计数器会跳到 0 甚至乱码。原因74LS192 是十进制可逆计数器9 之后自然回 0但电梯只到 9 层系统没有做上限钳位。解决把 TCU 进位输出反相后接到 CPU 的门控与门上计数到 9 时封住加计数时钟同时在比较器 A 端加一层判断A 数超过 9 时强制钳到 9。下限同理用 TCD 借位输出挡 1 楼以下的减计数。5.4 到达目标楼层不停机电机继续转现象A 数和 B 数在数码管上已经相等lamp2 也亮了但电机方向信号还在输出。原因YAB 只驱动了指示灯没有接进电机停机的与门或者接进去了但 YAB 上有毛刺被后级逻辑当成瞬时有效又释放了。解决把 YAB 接到正转和反转两路与门的封锁端同时用一级 D 触发器在系统时钟下同步 YAB滤掉组合毛刺。改完电梯到层即停不再冲过头。5.5 复位按钮按下去没反应现象按下复位计数器不归零数码管保持原值。原因MR 是高有效按钮接成了下拉或者 PL 在复位时同时为低预置优先级盖过了清零。解决量 MR 引脚电平确认按下时确实变高检查 PL 是否在复位期间保持高电平如果两个信号共用一组触点改成互斥接法。改完复位一次成功不再需要拔电重启。6. 先仿真后上电把三段波形对上了再插电如果只能给一条建议我会说别急着插电先把比较器、计数器、译码器分三段在 EDA 工具里单独仿真每段给激励、看波形全对上了再拼整机。我前两次做这个系统都是直接上电结果每次都要花大半天在“到底是芯片坏了还是线接错了”之间反复横跳第三次改成先仿真整个调试时间压缩到两个小时以内。下面这段是我当时用来验证 74LS85 行为的测试激励行为级写法不依赖具体器件库任何 EDA 工具都能跑。关键在三个级联端的初值以及四组覆盖大于、小于、等于、边界相等的用例。// 74LS85 四位数比较器的行为级激励仅用于 EDA 仿真验证 module cmp4_tb; reg [3:0] a; // 目标楼层 A reg [3:0] b; // 当前楼层 B reg ia_gt; // 级联输入高位大于 reg ia_lt; // 级联输入高位小于 reg ia_eq; // 级联输入高位相等 wire o_gt, o_lt, o_eq; cmp4 uut ( .a(a), .b(b), .ia_gt(ia_gt), .ia_lt(ia_lt), .ia_eq(ia_eq), .o_gt(o_gt), .o_lt(o_lt), .o_eq(o_eq) ); initial begin // 只比 4 位高位相等的前提必须人为置成立 ia_gt 1b0; ia_lt 1b0; ia_eq 1b1; a 4d5; b 4d3; #10; // 期望 o_gt1对应 lamp1 a 4d2; b 4d7; #10; // 期望 o_lt1对应 lamp3 a 4d6; b 4d6; #10; // 期望 o_eq1对应 lamp2 a 4d9; b 4d9; #10; // 边界9 层判等必须成立 a 4d1; b 4d9; #10; // 边界1 层到 9 层必须给出 o_lt $finish; end endmodule这段激励的用法是跑完之后对照波形看 o_gt、o_lt、o_eq 是否严格互斥任何时刻只有一根线为高。如果出现两根同时为高先别怀疑测试平台回去查级联端初值是不是写错。参数上a 和 b 是 4 位宽覆盖 0 到 15本系统只用 1 到 9仿真里把 0 和 10 以上的值也跑一遍没坏处能提前发现钳位逻辑的漏洞。计数器那一段的仿真重点是时钟门控给一个连续时钟手动切换 YAB 和 YAB看 CPU 和 CPD 是不是严格互斥计数器输出是不是单调变化。译码器那一段最简单把 0 到 9 的 BCD 码挨个输进去看七段输出对不对就行但别省这一步数码管缺段在整机上很难定位单独仿真一眼就能看出来。从那以后我每次做带反馈环的数字系统都强制自己先跑完三段仿真再上电哪怕课时再紧也不跳这一步。这个习惯本身比任何一片芯片都值钱。希望帮到你。本文还有配套的精品资源点击获取