74LS160与74LS161级联设计61进制计数器:Multisim仿真与同步清零原理详解

发布时间:2026/10/7 5:22:51
74LS160与74LS161级联设计61进制计数器:Multisim仿真与同步清零原理详解 最近在准备数字电路课程设计时又有人问起怎么用74LS160和74LS161搭一个61进制计数器。这个题目看起来简单但真上手在Multisim 14.0里仿真时反馈逻辑、级联方式、清零还是置数每一步都有讲究。我把自己搭这套电路的过程完整梳理一遍从原理到最终连线尽量让你看完就能自己复现出来。1. 项目拆解61进制计数器到底在做什么1.1 为什么要做61进制而不是常见的60进制很多人第一反应是既然有60进制数字钟的秒、分就是0到59循环为什么还要做61进制因为61进制计数器的计数范围是00到60一共61个状态。这种需求在角度测量、某些工业计数、仪表刻度等场景里会出现比如一个表盘需要从0转到60再回0六十一个刻度。数字逻辑课程里这种“非10非16”的任意进制计数器设计正好用来考察学生对芯片级联和反馈译码的理解。74LS160和74LS160/161这对芯片本身都是4位同步计数器区别只在模值160是BCD十进制计数器计数0到9161是十六进制计数器计数0到15。要得到61进制直接用任何一片都不行必须把芯片级联起来再用反馈逻辑截断。你可以用两片160也可以“一片160做低位、一片161做高位”。用160做低位是因为低位个位必须是十进制用161做高位是因为高位十位只需要出现0到6而161从功能上完全兼容160的引脚和同步控制方式。这个组合在硬件上比两片160更容易讲清楚“为什么这么选”。1.2 74LS160和74LS161的分工与引脚速览两片芯片的引脚定义几乎一样都有D0到D3并行预置数输入Q0到Q3计数输出CLK时钟输入上升沿触发CLR异步清零不对是同步清零低电平有效LD同步置数低电平有效ENT、ENP两个计数使能端高电平有效必须同时为高才会计数RCO进位输出这里有个特别容易搞混的点74LS160和74LS161的清零、置数都是同步的也就是说CLR或LD的信号即使已经有效也要等到下一个时钟上升沿才会真正清零或置数。很多教材里讲的“异步清零”芯片是另一类比如74LS192之类。设计61进制时这个同步特性直接决定了反馈译码该检测哪个状态后面我会专门讲。160和161的RCO条件也不同160在计数到91001且ENT为高时RCO输出高161在计数到151111且ENT为高时RCO输出高。这个差异会影响级联进位的接法但好消息是我们只需要把160的RCO接到161的使能端就能实现个位满十向十位进位161自己的RCO暂时用不上。1.3 先想清楚反馈该检测60还是61这是整个设计里最容易翻车的地方。如果按照“异步清零”的惯性思维可能会想去检测61状态也就是十位为6、个位为1让计数器到61后立刻跳回00。但74LS160和161是同步清零你检测61状态的话61这个状态会完整保持一个时钟周期到第62个脉冲才会被清零最后做出来是62进制。正确做法是检测60状态。因为当计数到60时反馈信号可以立即建立等到下一个时钟上升沿到来时计数器本应变成61但由于CLR或LD已经有效它会直接回到00。这样60状态保留了一个完整的时钟周期0到60一共61个状态第61个脉冲完成回零周期正好是61。打个比方同步清零就像闹钟响了之后你必须按一下按钮才停。你要让它在60响就得在60这一格就按下按钮等闹钟走到60的末端对应下一个时钟沿才停如果你等它走到61再按它就会多走一格。2. 级联与反馈电路的核心逻辑设计2.1 个位到十位的进位用使能级联而不是时钟级联两片计数器之间的进位方式有两种常见接法一种是“异步时钟级联”把低位RCO直接接到高位的CLK另一种是“同步使能级联”两片共用同一个时钟把低位RCO接到高位的UNT/ENT使能端。我强烈建议用第二种。原因很简单第一种接法里高位的时钟来自低位的进位信号而低位RCO的翻转本身又依赖于时钟级联之后会出现“时钟偏移”和“竞争冒险”在高速仿真或实际硬件中容易产生毛刺导致高位偶尔多计一次或少计一次。同步使能级联则没有这个问题因为两片完全同步低位是否进位只决定高位是否使能最终计数时刻由同一个时钟统一管理。连线方式如下时钟源同时接到74LS160和74LS161的CLK74LS160的ENT、ENP都接高电平5V让它始终允许计数74LS160的RCO接到74LS161的ENT74LS161的ENP接高电平这样当个位160计数到9时RCO变成高电平使能十位161下一个时钟上升沿到来时个位从9回到0十位同时加1。整个过程只有一个时钟域时序非常干净。如果你手头有示波器或者逻辑分析仪可以在Multisim里把这个RCO信号拖出来看它是和时钟严格同步的窄脉冲宽度刚好是一个时钟周期。2.2 反馈信号怎么生成检测十位等于6就够了之前说了要检测60状态。但60状态需要同时满足“十位6”和“个位0”。实际操作中有个更巧妙的简化只检测十位6就行。为什么可以只检测十位因为计数到60之前十位只有0到5不可能出现“十位6”的组合而一旦十位变成6当前一定处于状态60个位刚从9变0。反馈信号在60状态建立下一个时钟沿就会清零所以根本不会走到61到69这些状态。换句话说“十位6”这个条件和“状态60”在这个电路里是同时成立的检测前者就能达到后者的效果。74LS161的十位输出是二进制数6对应的四位输出是0110其中Q21、Q11Q30、Q00。所以只要把Q2和Q1接到一个二输入与非门的两个输入端当Q21且Q11时与非门输出低电平其他十位状态0到5时无论如何Q2和Q1不会同时为1输出高电平。这个低电平信号正好可以作为清0或置数信号。如果你手里只有三输入与非门74LS10也可以把第三个输入接高电平等同于二输入与非门。或者用74LS00里的任意一个与非门都行。2.3 清零法还是置数法两种方案对比同样的反馈信号可以接到两片芯片的CLR清零端也可以接到LD置数端。两种方法各有特点我做一个对比对比项清零法反馈接CLR置数法反馈接LD反馈信号低电平接到两片CLR低电平接到两片LD预置数D0-D3不需要悬空即可必须将D0-D3接固定值回零效果下一个时钟沿清零到00下一个时钟沿载入D输入灵活性只能回0想改成其他初值较麻烦可以预置任意初值比如预置1实现1到60的60进制实际稳定性在仿真中没问题硬件中可能因毛刺产生竞争相对更稳因为置数门限更宽我个人在实际调试中更推荐置数法。虽然清零法连线更少但同步置数法的时序边界更干净后续扩展也方便。这篇博文先用清零法搭通电路因为逻辑最直观如果你想用置数法只要把反馈接到LD再把两片D0到D3全部接低电平其他部分完全不变。3. Multisim 14.0完整实操搭建步骤3.1 元件准备与放置打开Multisim 14.0新建一个Schematic Capture文件。我用的元件清单如下元件在哪里找作用74LS160DPlace Component - TTL - 74LS个位十进制计数器74LS161DPlace Component - TTL - 74LS十位十六进制计数器74LS00D 或 74LS10DPlace Component - TTL - 74LS与非门生成反馈信号CLOCK_VOLTAGEPlace Component - Sources - SIGNAL_VOLTAGE_SOURCES时钟脉冲源VCC、GROUNDPlace Component - Sources - POWER_SOURCES电源和地DCD_HEXPlace Component - Indicators - HEX_DISPLAY数码管显示这里有个Multisim的细节74LS系列芯片的电源和地引脚默认是隐藏的软件会自动把VCC接到5V、GND接到0V不需要自己画。但如果你发现DCD_HEX数码管不亮先检查它有没有接上电源DCD_HEX通常也需要一个VCC引脚放一个VCC符号连过去即可。放置元件时建议把两片计数器并排放左边放74LS160右边放74LS161这样连线更清晰。时钟源放在最左边与非门放在两片计数器中间偏上的位置方便把反馈线引到两个芯片的CLR端。3.2 逐条连线说明对着接就能复现电路图下面这张表就是完整的电路连接关系相当于一份“文字版电路图”。你只要按照表里的网络名接线就能还原出完整的Multisim原理图。网络名需要连接在一起的引脚CLK_NET时钟源正极 - 74LS160的CLK - 74LS161的CLKVCC时钟源VCC - 74LS160的ENT - 74LS160的ENP - 74LS161的ENP - 74LS160的LD - 74LS161的LD - 74LS161的CLR如果用清零法则先断开 - 74LS10/74LS00电源GND时钟源GND - 74LS160的GND - 74LS161的GND - 74LS10/74LS00的GNDRCO_LOW74LS160的RCO - 74LS161的ENTFB_Q274LS161的Q2 - 74LS10或74LS00的1AFB_Q174LS161的Q1 - 74LS10或74LS00的1BFB_CLR74LS10/74LS00的1Y - 74LS160的CLR - 74LS161的CLRDISP_UNIT74LS160的Q0 - 个位DCD_HEX的AQ1 - BQ2 - CQ3 - DDISP_TEN74LS161的Q0 - 十位DCD_HEX的AQ1 - BQ2 - CQ3 - D如果你选择置数法改动只有两处把FB_CLR改成接到两片LD端而不是CLR端把两片D0到D3全部接到GND0V注意不管用哪种方案不用到的CLR或LD端一定要接高电平不要悬空。例如置数法里CLR不用就把CLR接VCC清零法里LD不用就把LD接VCC。悬空的控制端在Multisim里可能不会报错但实际硬件中会因为噪声导致芯片乱复位最好养成“不用的控制端都接确定电平”的习惯。3.3 参数设置与仿真运行时钟源需要设置一下。双击CLOCK_VOLTAGE在参数里将Frequency设置为1HzDuty Cycle设为50%Voltage Values设成V15V、V20V。1Hz的话数码管每秒跳一个字方便人眼观察如果你想快速验证整个循环可以临时改成10Hz或100Hz循环一圈只需要几秒钟。DCD_HEX的显示设置也有个小技巧双击数码管在属性里把“Digital Color”设成红色“Background Color”设成深色这样在看仿真动画时眼睛不容易疲劳尤其是在大屏幕上演示时会更清楚。设置完成后点击顶部工具栏的绿色运行按钮或者按F5开始仿真。你会看到两位DCD_HEX从00开始每次时钟上升沿加1依次显示01、02、03……一直到59、60然后下一个脉冲直接跳回00周而复始。这就说明61进制计数器工作正常。如果你想确认反馈信号的时序可以在Multisim里再加一个逻辑分析仪Logic Analyzer把时钟、RCO、FB_CLR这几路信号拉进去观察。你会看到FB_CLR在十位变成6之后立刻拉低持续一个时钟周期直到计数器回零后恢复高电平和理论的时序完全一致。4. 调试过程中踩过的坑4.1 常见问题速查表我在Multisim里搭建和调试这台电路时遇到过几个典型问题整理成一张表方便你对照排查现象可能原因解决办法计数到59后直接跳回00看不到60反馈逻辑误用了异步清零思路或CLR接错位置确认反馈信号来自十位Q2、Q1的与非门且接到两片CLR或LD同步芯片检测60状态是正确的如果你看的是“从59跳0”且中间没有60多半是连接问题显示到60后卡住不再跳变反馈信号没有成功接回两片芯片导致CLR或LD一直无效检查与非门输出网络是否真正连接到了CLR/LD引脚用万用表探针或逻辑分析仪看FB_CLR是否为低十位永远不变一直显示0xRCO到ENT的线没接对或者ENT/ENP悬空确认160的RCO接到161的ENT161的ENP接VCCENT和ENP必须同时为高才能计数数码管不显示任何数字DCD_HEX没有供电或芯片电源隐藏引脚没接好给DCD_HEX连接VCC确保电路中有VCC和GND符号仿真开始后计数器不停清零CLR或LD被误接到低电平反馈信号持续有效检查不用的控制端是否接高如果用与非门输入接错也可能导致输出常低4.2 同步和异步的误区再强调一遍这个问题值得再花一段讲。有些同学在别的教材上看过“反馈清零法”检测最高状态N就直接照搬到74LS160/161上结果做出来的周期要么少一个状态要么多一个状态。原因就在于同步与异步的差异。对于同步清零/置数芯片反馈信号只需要在目标状态期间保持有效它影响的其实是下一个时钟沿。因此要实现0到60共61个状态应该检测60状态让第61个脉冲把计数器拉回0如果你检测61状态那么第61个脉冲会让计数器正常进入61第62个脉冲才跳回0周期变成62。如果你用的真的是异步清零芯片比如74LS192情况会反过来检测到目标状态后芯片立即清零目标状态本身几乎看不到所以常常要检测N状态或N1状态。很多教材里两种方法混着讲抄作业时一定要先确认芯片的时序特性。4.3 仿真理想环境与现实硬件的差异Multisim里用的是理想数字器件门延迟极小竞争冒险很难观察到。但如果你把同一张电路图焊到面包板上就可能会碰到以下问题第一毛刺。反馈信号从十位Q2、Q1经过与非门产生门电路有延迟而清零信号作用于两片芯片的时间也有微小差异。如果门延迟不够均匀可能出现某一片先清零、另一片后清零的情况导致瞬间输出一个错误状态。实际硬件中可以在反馈输出端加一个小的RC滤波器或者改用同步置数法都可以缓解毛刺问题。第二上电初态。Multisim仿真时计数器默认从0开始但实际芯片上电后状态是随机的。如果上电时十位恰好是6反馈信号可能直接把计数器锁在0。解决办法是加一个上电复位电路把CLR或LD在上电瞬间拉低一次保证每次上电都从00开始。第三电源去耦。面包板上接芯片记得在电源和地之间接一个0.1uF的陶瓷电容尽量靠近芯片电源引脚。这个经验在仿真中永远用不上但到了实物电路里不接去耦电容很容易出现“数字电路乱跳”的诡异现象。5. 扩展玩法把61进制改成任意N进制5.1 通用设计公式搭完61进制你会发现这套方法可以推广到任意N进制。核心思路就一句话用m片计数器级联扩展计数能力在计数到N-1状态时产生同步清零或置数信号。比如你用两片74LS160级联最大能计到99想做成83进制那就检测状态82也就是“十位8、个位2”的组合。用与非门译码出这个状态反馈到两片CLR或LD下一个脉冲就会从82跳回00。只要N-1在芯片级联的计数范围内这个方法都成立。反馈译码的复杂度取决于N-1这个数的二进制形式。十位和个位分别输出4位BCD/二进制你可以用与非门、或非门、译码器来组合。原则上状态数量多的应用建议用74LS138等译码器状态少时用几个门电路就够了。5.2 实例60进制和100进制如果你想改成60进制也就是数字钟里常见的0到59循环那就检测59状态。59的表示是十位50101、个位91001。译码条件稍多一点十位Q21、Q01个位Q31、Q01。用两个二输入与非门分别译码十位5和个位9再合到一起生成反馈。如果你偷懒一点也可以检测十位5加个位9的组合。如果只是做100进制计数器更简单两片160按同步使能级联不需要任何反馈逻辑个位满9让十位加1十位满9且个位满9时RCO输出最高位进位。这就是一个标准的100进制计数器周期就是100。5.3 置数法预置非零初值的巧用置数法比清零法多一个自由参数预置数。这意味着你不一定从0开始循环。比如把预置数设为1那么计数序列会变成01、02、……、60、01一共60个状态变成了一个60进制计数器。这在某些需要“从1开始”的场景里非常方便比如某些仪表刻度就是从1到60。再比如你想让计数器显示带偏置的刻度比如从40开始到100再跳回40完全可以在两片芯片的D0到D3上接一个固定的二进制偏移量。这也是为什么我在前面推荐置数法的原因清0只能死板地回到0置数却能灵活调整起点。最后再分享一个小技巧。在Multisim 14.0里调试这种计数器电路别总盯着数码管看尤其是频率调高以后眼睛容易花。把CLOCK_VOLTAGE的频率改成1Hz看着数码管一格一格跳心里默数一遍00到60确认无误后再调回10Hz或者100Hz跑稳定性。我第一次搭这个电路时就是因为在10Hz下没看清“60”那一格还误以为反馈检测错了后来放慢速度才发现只是眼睛跟不上电路本身没问题。做数字电路仿真慢即是快。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询