资讯动态

基于数字电路的出租车计价器设计与实现

发布时间:2026/10/5 4:54:22 来源:尧图企业网站定制
从数电课设抽到“出租车计价器”那一刻起很多人心里就开始打鼓这玩意儿不是单片机写几行代码就能收工吗但偏偏课程要求只能用 555、计数器、译码器、逻辑门这些“老古董”把系统搭出来。我当年做这个题从拿到题目到仿真跑通用了整整一周中间烧过芯片、接过反电平、也对着乱码数码管发过呆。但现在回头看这个题目其实是数电里少有的能把组合逻辑和时序逻辑揉在一起考综合能力的题型。做完它你对计数器、比较器、译码器、定时器的理解基本就盘活了。这篇文章我会按自己实际做过的方案来讲从计价规则的制定到模块拆分再到每一个模块的芯片选型和连线思路最后是仿真、实物焊接、常见问题排查和答辩避坑。目标很直接——你拿到这篇文章照着搭能做出一个能演示、能答辩、还能说出为什么这么设计的计价器。1. 先搞清楚计价器到底要“算”什么1.1 计价规则是设计的源头不是随便定的很多同学一上来就翻芯片手册这是本末倒置。数电课设的计价器第一步是先把计价规则定下来而且规则必须围绕“能不能用数字电路方便实现”来定。我当时和老师确认后采用了一套很经典的规则起步价 10 元包含 3 公里超过 3 公里后每公里加收 2.5 元车辆停车等待时每满 10 秒加收 1 元演示档位实际出租车一般按分钟计费这里是为了课堂演示缩短时间金额取整显示单位是元里程显示精度到 0.1 公里支持新单起步、行程中累计、停车复位。为什么这样定关键是所有收费都能通过“脉冲个数”映射成数字电路里的计数事件。里程用一个脉冲代表 0.1 公里起步里程就是 30 个脉冲超出后每 4 个脉冲产生一次“加 1 元”的动作正好对应 2.5 元/公里。等待计费用一个 1Hz 秒脉冲每 10 个秒脉冲产生一次“加 1 元”的动作。于是整个计价器就抽象成了两路脉冲各自计数、最后汇总到金额计数器的数字逻辑问题。1.2 把规则翻译成电路功能把上面规则拆开计价器需要完成下面几个功能产生稳定的时钟/脉冲源既能模拟车轮转动又能量化等待时间对里程脉冲计数并判断是否已经超过起步里程对等待时间计数达到阈值后产生一次加钱信号把起步价预置到金额计数器里之后每收到一个“加钱脉冲”就累加 1 元译码显示金额、里程以及可选的等待时间。换句话说整台计价器就几个字计数、比较、分频、累加、显示。只要沿着这条线走后面所有电路模块都是在回答“这个功能用什么芯片、怎么接”的问题。2. 整体方案与模块划分别一上来就焊板子2.1 用模块化思维拆解整机我在动手之前先把整机画了一张模块框图。这个习惯帮我省了很多事因为计价器一旦接错线是全系统互相牵连的没有模块化设计查错查到崩溃。整机被我拆成了六个模块模块核心功能建议芯片脉冲源与分频产生里程模拟脉冲和 1Hz 秒脉冲NE555、CD4060里程计数对 0.1km 脉冲计数并显示CD4518 或 74LS160起步里程判断判断里程是否超过 3km74LS85 比较器里程加钱脉冲每 4 个里程脉冲产生 1 个加钱脉冲74LS74 双 D 触发器等待计费每 10 秒产生 1 个加钱脉冲74LS192 可预置计数器金额累加预置起步价按加钱脉冲累加74LS192 级联译码显示显示金额、里程CD4511 共阴数码管模块化的第二个好处是调试顺序非常明确先电源再脉冲源再计数再比较/分频最后显示。哪一级出问题用万用表和逻辑笔一量就知道在哪。2.2 为什么选这些芯片而不是其他芯片这里有一个很现实的问题课设题目允许的芯片范围通常是 74 系列和 4000 系列那么怎么选我的选择原则是“优先选同步计数器、避开异步计数器”。以里程计数为例很多人第一反应用 74LS90因为它单芯片就能实现十进制计数。但 74LS90 是异步计数器输出存在明显的级联毛刺下一级如果直接用它做译码显示数码管容易闪出乱码。我最终选了 CD4518 双 BCD 同步加计数器一片能顶两个十进制位级联时毛刺小得多调试体验完全不一样。金额累加部分选 74LS192 则是因为它带异步预置端。起步价 10 元可以直接“打进”计数器后面的加钱脉冲只要不断触发 CPU 端就能实现逐元累加。如果你用 74LS160 做金额还得外加预置电路麻烦很多。3. 核心模块设计与参数计算3.1 脉冲源NE555 的频率到底怎么算计价器需要一个模拟车速的脉冲源也要一个 1Hz 的秒脉冲给等待计费用。最省事的方案是用两片 NE555 分别产生一片频率调到 12Hz 左右模拟“行驶”另一片用 32768Hz 晶振加 CD4060 分频得到精确 1Hz。如果嫌晶振麻烦第二片 NE555 也可以直接调出 1Hz。NE555 无稳态振荡频率公式是f 1.44 / ((R1 2*R2) * C)我当时要一个大约 1Hz 的秒脉冲取 C 10μFR1 1kΩR2 50kΩ 可调电阻代入算一下f 1.44 / ((1k 2*50k) * 10μF) 1.44 / (101k * 10μF) ≈ 1.43 Hz实际焊接后可以通过可调电阻微调到 1Hz。注意 555 的输出驱动能力虽然能带几个 TTL 门但如果你后面接了一长串计数器和数码管驱动建议在 555 输出端加一个 74LS04 非门做缓冲整形既提升驱动能力又能让波形更干净。3.2 里程计数一个脉冲代表 0.1km里程脉冲来源有两种一种是用 555 连续产生脉冲模拟车辆行驶另一种是手动按键每按一次产生一个脉冲方便演示“每按一下就是 0.1 公里”。我建议两个都做中间用开关切换演示时既可以用自动模式让它自己跑又可以用手动模式一块钱一块钱地加给老师看。里程计数我用两片 CD4518 级联成两位 BCD 计数器。第一片的 CLK 接里程脉冲输出作为“十分位公里”第一片计数到 9 后再来一个脉冲时通过外接的与门检测“个位计数器的 8 和 1 同时为 1”产生进位信号给第二片第二片代表“整公里”。第二片再往上可以加第三片代表十公里这样里程显示能做到 99.9 公里。这里要特别注意CD4518 是上升沿计数但它的 Enable 端用法和 74 系列不太一样。我在面包板上犯过的错是把 Enable 悬空结果计数器乱跳。正确做法是把 Enable 接高电平脉冲从 CLK 进。3.3 起步里程判断74LS85 比较器阈值设成 30起步价包含 3 公里折合 30 个里程脉冲。所以必须有一个电路来判断“当前里程是否已经超过 30”只有超过之后后续的里程脉冲才能触发加钱。最直接的方案是用两片 74LS85 四位数码比较器级联把里程计数器的 8 位 BCD 输出接到 A 端B 端固定接成 30也就是二进制 0x30。这里 B 端的高四位十位接 0011低四位个位接 0000。级联时低四位比较器的 AB、AB、AB 输出分别接到高四位比较器的级联输入端高四位那片的 AB 输出就是最终判断结果。为什么用比较器而不是用一大堆门电路去检测“十位等于3且个位大于0”因为后者的逻辑表达式很长稍微化简错一个与门整个系统就废了。比较器一片才十几根引脚级联关系清晰出了问题也容易量。还有一个细节74LS85 比较器的最低一级级联输入不能悬空必须把 I(AB) 接高、I(AB) 和 I(AB) 接低否则结果会莫名其妙。3.4 里程加钱脉冲为什么要模 4 分频计价规则里超出起步里程后是 2.5 元/公里。一个里程脉冲是 0.1 公里那么 4 个脉冲就是 0.4 公里对应 1 元。所以里程加钱脉冲就是一个 4 分频器每当收到 4 个里程脉冲就输出 1 个加钱脉冲。我用了两片 74LS74 双 D 触发器搭模 4 计数器。第一个 D 触发器 Q0 翻转频率是输入的一半第二个 D 触发器 Q1 再翻一半。在状态 3Q11Q01时用与门输出一个高电平脉冲这个脉冲就是“加 1 元”信号。为什么取状态 3因为模 4 计数器的四个状态是 00、01、10、11状态 3 只维持一个输入时钟周期正好输出一个单脉冲。有同学问能不能直接拿 Q1 的输出当 4 分频后的信号严格来说 Q1 的频率确实是输入的 1/4但 Q1 的波形占空比是 50%直接用它的上升沿会触发在输入的第二个脉冲上而不是第四个。所以要么用“状态 3 与门输出”取单脉冲要么用 Q1 的反相输出沿我建议用与门方案更直观也好跟老师解释。3.5 等待计费用 74LS192 做可预置减法计数器等待计费我的方案是用两片 74LS192 构成两位 BCD 可预置减法计数器。预置值是 10代表 10 秒秒脉冲从高位不对是低位片的 CPD减计数时钟输入每来一个秒脉冲减 1。当计数减到 0 后再来一个秒脉冲时74LS192 的借位输出 TCD 会产生一个低电平脉冲。这个低电平脉冲非常关键把它反相后一路作为“等待加钱脉冲”送给金额计数器另一路接到 74LS192 的 LD预置使能低电平有效在借位瞬间重新把 10 装入计数器。这样就实现了“每 10 秒自动加 1 元并自动重置”的循环完全不需要额外的比较器。这里有一个实操要点74LS192 的 TCD 是低有效接金额计数器之前必须经过一级非门把它变成上升沿信号。我第一次做的时候直接把 TCD 接到 74LS192 的 CPU结果金额计数器纹丝不动查了半天才发现是电平极性反了。另外等待计费需要加一个“等待开关”控制秒脉冲是否进入计数器。车在行驶时等待开关断开秒脉冲进不来等待费用不计一旦停车或拥堵拨到等待档秒脉冲开始减计数。3.6 金额累加起步价预置与逐元累加金额计数器是整个系统的“钱袋子”我用了三片 74LS192 级联实现 0999 元的显示范围。第一片是个位第二片是十位第三片是百位。级联关系是个位片的加计数进位输出 TCU 接到十位片的 CPU十位片的 TCU 再接百位片的 CPU。“起步价 10 元”的预置方法三片 74LS192 的预置数据端 D0D3 分别接成个位 0、十位 1、百位 0。用一个“新单”按键接到所有 74LS192 的 LD 端。按下按键时LD 为低10 被异步打入三片计数器松开后 LD 恢复高此后每来一个加钱脉冲个位片的 CPU 上升沿触发一次金额自动加 1十位和百位通过级联进位自动刷新。如果你细想会发现一个问题起步价预置时里程计数器和等待计数器也应该清零。所以我把“新单”按键同时接到所有计数器的复位端。按下新单按钮金额被预置成 10里程和等待时间全部清零整台计价器进入新的一单状态。这是整机设计里很关键的一个联动。3.7 译码显示CD4511 驱动共阴数码管的接法显示部分我用 CD4511 BCD 七段锁存译码驱动器驱动共阴数码管。每个数码管配一片 CD4511这样是静态显示亮度高、无闪烁比动态扫描适合课设演示。CD4511 的注意点有几个4 位 BCD 输入 D、C、B、A 分别接计数器的对应位输出输出是高电平有效直接接共阴数码管每个段输出串一个 330Ω 限流电阻否则数码管会过亮甚至烧坏LT灯测试和 BI消隐必须接高电平LE锁存使能接地否则显示会不正常。里程显示的小数点怎么做我的里程显示是“十位公里、个位公里、十分位公里”三只数码管也就是显示 12.5 这样的数值。中间那只数码管的 dp 引脚通过一个 330Ω 电阻接 VCC让小数点常亮视觉上就是“公里.十分位公里”。金额显示的三只数码管不需要小数点整数值直读。4. 仿真先行Multisim 验证逻辑的正确性4.1 仿真阶段该搭什么、看什么我习惯先用 Multisim 把整机搭一遍确认逻辑正确再焊实物。仿真阶段最大的优势是可以随时看波形、改连线不用承担烧芯片的风险。仿真搭机顺序和实物一样先搭脉冲源再搭里程计数和比较器看比较器输出是否在里程大于 30 之后变高再搭模 4 分频器用逻辑分析仪看状态 3 的输出脉冲接着搭等待计费观察 74LS192 借位输出最后搭金额累加和译码显示。有一个很实用的仿真技巧用 Multisim 的逻辑分析仪同时观察里程脉冲和加钱脉冲确认“每 4 个里程脉冲输出 1 个加钱脉冲”。如果发现加钱脉冲数量不对重点查 74LS74 的复位端和与门连接通常是复位信号没接对导致计数器没有从 0 开始。4.2 仿真能通过的陷阱实物也会踩仿真跑通不代表实物就能一次成功。我遇到过的最典型情况是仿真里一切正常面包板上电后金额计数器从 10 开始乱跳完全没有规律。后来排查发现是 5V 电源纹波太大加上 74LS192 的 LD 端悬空被噪声干扰导致计数器不断被预置。处理方法是给每片芯片的电源脚就近加 0.1μF 退耦电容LD 端不用时通过上拉电阻接 VCC问题立刻消失。所以从仿真切换到实物之前一定要把“所有不用的输入引脚不能悬空”这条铁律刻在脑子里。TTL 芯片悬空输入相当于接了高电平但抗干扰能力很差CMOS 芯片悬空则更危险可能直接导致芯片工作异常。无论哪种该上拉的上拉该下拉的下拉。5. 从面包板到万用板焊接布局与调试心得5.1 面包板阶段模块分区比好看重要面包板搭棚阶段我建议按模块分区排布电源区、脉冲区、计数区、比较区、显示区各自占一块区域。好处是排查故障时能快速锁定位点。电源线和地线用不同颜色区分信号线用同一色系飞线尽量横平竖直压线宁可多绕一点也不要斜插穿透。焊接前务必先给数字芯片的电源引脚统一接上退耦电容。我当时在每片芯片的 VCC 和 GND 之间就近焊了一个 0.1μF 瓷片电容整机稳定性好了很多。这个细节很多教程不会提但实物能不能稳定跑起来很大程度上取决于它。5.2 上电调试顺序先电源再脉冲再计数我一贯的调试顺序是“从电源到显示逐级点亮”先不上芯片用万用表检查电源电压确认 5V 输出正常、无短路插上 555用示波器或逻辑笔测试 555 输出波形确认脉冲频率正确接上里程计数器和显示用手动按键逐个输入脉冲观察数码管是否按 0.1km 递增接比较器和模 4 分频器观察超过 30 个脉冲后是否开始输出加钱脉冲接等待计费拨到等待档观察每 10 秒是否加 1 元最后接金额累加和起步价预置完整走一遍流程。这里有个很常见的问题手动按键产生脉冲时机械抖动会一次蹦出好几个脉冲导致里程一次跳好几格。解决方法是给按键加一个 RC 低通滤波加施密特整形或者用 74LS00 构成 RS 触发器消抖。如果只是演示用也可以用连续脉冲源代替手动按键省掉消抖问题。5.3 参数计算与元件选型的一点补充整机元件清单大概包括NE555×2脉冲源和秒脉冲CD4518×23里程计数CD4511×67三只金额数码管、三只里程数码管可选两只等待时间数码管共阴数码管若干74LS74×1模 4 分频74LS85×2起步里程比较74LS192×35金额累加、等待计费逻辑门若干74LS08、74LS32、74LS04按键、拨码开关、电阻、电容、晶振等。元件选型时尽量统一用 74LS 系列和 4000 系列混搭没问题但要注意电平兼容。74LS 的高电平输出约 3.4VCD4518 在 5V 供电下输入高电平阈值大约是 3.5V两者刚好卡在临界值。稳妥做法是 4000 系列也统一用 5V 供电必要时在关键信号线上加 1kΩ 上拉电阻提升高电平幅度。6. 常见问题与排查技巧实录6.1 问题速查表现象可能原因排查思路数码管不亮CD4511 的 LT/BI 接错、电源没到先测 VCC再逐个测 CD4511 的输入和输出数码管显示乱码计数器输出非 BCD 码或有毛刺用逻辑笔逐位检查计数器输出确认是否出现 A~F里程跳数/一次跳好几个脉冲按键抖动、555 频率过高加消抖电路或改用连续脉冲演示金额计数器一上电乱跳LD 悬空、电源纹波大LD 上拉芯片电源脚加退耦电容起步价预置不生效新单按键没接对或 LD 电平太短暂检查按键是否给到低电平必要时加 RC 延时里程超过 30 后仍不加钱74LS85 级联输入没接默认值检查 I(AB) 是否接高I(AB)、I(AB) 是否接低等待时间到了不加钱TCD 极性接反74LS192 借位输出是低有效必须反相后接 CPU金额到了 99 不往百位进位十位片 TCU 没接百位片 CPU检查级联方向是否正确6.2 三次翻车经历帮你避掉同样的坑第一次翻车是 74LS192 起步价预置不生效。我按下新单按键后金额一直从 0 开始而不是 10。查了很久发现是新单按键直接接 GND 形成低电平的瞬间太短芯片来不及完成异步预置。后来在按键两端并联了一个 100μF 电容利用电容放电拉长低电平时间问题解决。这个改法简单粗暴但非常有效。第二次翻车是里程计数到 30 后没有加钱信号。用逻辑笔量 74LS85 的 AB 输出一直是低。仔细一看两片比较器级联时我把低四位的输出接到了高四位的数据端而不是级联端。这个错误在仿真里不容易发现因为仿真模型对级联端的处理有时候比较宽容但实物电路就立刻露馅。所以搭实物之前一定要把数据手册上的级联图看仔细。第三次翻车更诡异等待计费无论怎么拨开关都不触发。最后发现是秒脉冲没接到 74LS192 的 CPD 端而是接到了 CPU 端导致它在“加计数”而不是“减计数”。看似只是 A/B 端互换实际上整个逻辑完全反了。所以拿到 74LS192 这类双时钟计数器第一件事就是分清 CPU加和 CPD减再查 TCU 和 TCD 分别对应哪个方向。7. 答辩加分项与扩展思路7.1 把“为什么这么设计”讲清楚答辩时老师不只听你讲“我做出来了”更想听“你怎么想到这么做”。所以准备几个关键问题很有必要为什么里程计费用 CD4518 而不是 74LS90答同步计数毛刺小级联简单显示稳定。为什么起步价用 74LS192 预置而不是用加法器累加答可预置计数器天然适合“固定起步价后续累加”的业务场景而且出租车调价只需要改预置数据不需要改电路。如果里程和等待同时触发加钱怎么办答实际场景中行驶和等待互斥等待时里程脉冲不产生所以不会同时触发如果要做更严格的系统可以把两路加钱脉冲送到加法器再统一加到金额计数器。这些问题的答案其实就是前面每一节里的“为什么”。平时搭电路时多想一步答辩时就不至于语塞。7.2 后续还能怎么改如果做完基础版还想再加分可以往这几个方向扩展增加金额小数点显示把“元”的显示精度提高到 0.1 元满足更精细的计价规则用 CD4060 加 32768Hz 晶振替代 555 产生精确秒脉冲提高等待计时的准确度增加“暂停”功能在等待时不显示里程和金额变化或者增加一个“多位显示”功能按一下切换显示总额/里程/等待时间把整机做成 PCB在 Altium Designer 里画原理图和版图焊接后整机体积更小演示效果也更专业。我个人始终觉得课设的价值不在于把电路焊得多漂亮而在于你能否从“需求”出发一步步翻译成“电路语言”。计价器这个题目之所以经典就是因为它把现实世界里的公里、秒、元变成了脉冲、计数器和译码显示。你把这个过程走通一遍再看其他数电题目会发现底层思路都一样。做完这一套后面无论遇到抢答器、密码锁还是电子钟你至少能一眼看出它大概由哪几个模块组成——这种感觉比焊接技术本身重要得多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑