
1. 为什么六进制和六十进制计数器值得单独拿出来讲数字电路实验里计数器是最基础也最容易翻车的模块之一。很多人第一次接触74LS161觉得它就是个四位二进制加法计数器接上时钟、给个使能就能跑没什么难度。但真正动手做六进制或者六十进制的时候问题就来了反馈清零到底该从哪个输出端取信号同步清零和异步清零差在哪里为什么仿真里数码管显示乱跳这些问题在教材上往往一笔带过实际调试时却能耗掉一整个下午。这篇内容面向的是正在学数字电路、准备做课程设计或者需要快速用Multisim验证计数器方案的人。我会把74LS161和74HC390这两个芯片在六进制、六十进制计数器中的用法拆开讲清楚包括反馈逻辑的设计思路、Multisim仿真的具体搭建步骤、以及我在实际仿真中踩过的那些坑。关键词里的74LS161、74HC390、Multisim、六进制计数器、六十进制计数器都会在对应的实操环节里落到具体操作上。先说结论性的判断六进制计数器用74LS161做反馈清零是最直观的方案而六十进制计数器用74HC390做级联更省事。但这两条路各有各的细节陷阱下面逐个展开。2. 74LS161做六进制计数器反馈逻辑的取法决定成败2.1 74LS161的基本工作逻辑回顾74LS161是一个四位同步二进制加法计数器输出端是QA、QB、QC、QD对应二进制权值1、2、4、8。它有几个关键控制端CLR清零端低电平有效、LOAD置数端低电平有效、ENT和ENP两个使能端都要为高电平才计数、CLK时钟输入端。还有RCO进位输出端在计数到1111时输出高电平。这里最关键的一点是74LS161的清零方式是异步清零。什么意思只要CLR端变成低电平输出立刻清零不需要等时钟脉冲。这个特性直接决定了反馈清零信号的取法。2.2 六进制计数器的反馈清零设计六进制计数器需要六个状态0000、0001、0010、0011、0100、0101然后回到0000。也就是说当计数器输出到0110十进制6的时候要让它立刻清零。因为74LS161是异步清零反馈信号应该在计数器刚到达0110的瞬间就产生。0110对应的输出是QB1、QC1QA0、QD0。所以反馈逻辑就是把QB和QC接到一个与非门与非门的输出接到CLR端。具体接线QB第12脚和QC第13脚分别接到74LS00与非门的两个输入端与非门输出接到74LS161的CLR端第1脚ENT和ENP都接高电平CLK接时钟信号源QA、QB、QC、QD接数码管或者逻辑分析仪这里有个容易搞混的地方为什么用与非门而不是与门因为CLR是低电平有效只有当QB和QC同时为1时与非门输出低电平才能触发清零。如果用与门输出是高电平反而不会清零。注意有些教材上写的是用74LS10三输入与非门把QA、QB、QC都接进去。那种做法是针对同步清零芯片的用在74LS161上会导致计数到0111才清零变成七进制。这个区别一定要分清楚。2.3 Multisim仿真搭建的具体步骤打开Multisim新建一个空白电路。从元件库中调出以下器件74LS161在TTL库的Counter分类下搜索74LS16174LS00在TTL库的Logic Gates分类下找2输入与非门时钟源在Sources库的Signal_Voltage_Sources里选Clock_Voltage频率设为1kHz数码管在Indicators库的HEX_Display里选DCD_HEX或者带译码的七段数码管电源VCC和GNDTTL器件需要5V供电接线的时候注意几个细节。时钟源的输出接到74LS161的CLK脚第2脚。VCC接到第16脚GND接到第8脚。ENT第10脚和ENP第7脚都接VCC。LOAD第9脚接VCC因为我们不用置数功能。CLR第1脚接与非门的输出。数码管的连接如果用的是DCD_HEX它自带译码功能直接把QA、QB、QC、QD按顺序接到数码管的A、B、C、D输入端就行。注意顺序不要接反QA是最低位QD是最高位。仿真设置里把仿真时间调长一点比如10ms这样能看到完整的计数循环。运行仿真后数码管应该显示0、1、2、3、4、5、0、1、2……循环。2.4 实测中容易出现的两个问题第一个问题是数码管显示跳变太快看不清。这是因为时钟频率设得太高1kHz意味着每秒计数1000次人眼根本反应不过来。解决办法是把时钟频率降到1Hz或者2Hz这样能清楚看到每个状态的切换。在Multisim里Clock_Voltage源的Frequency参数直接改成1Hz就行。第二个问题是清零瞬间有毛刺。异步清零的一个固有缺陷是当QB和QC同时跳变的瞬间与非门的输出可能会产生一个窄脉冲导致清零不可靠。在仿真里可能看不出来但实际搭电路的时候这个问题很致命。解决办法是在与非门输出和CLR之间加一个RC滤波或者改用同步清零的方案。不过在Multisim仿真阶段这个问题通常不会暴露可以先不管。3. 74HC390做六十进制计数器级联方案的选择与对比3.1 74HC390的内部结构特点74HC390和74LS161完全不是一个路子。74HC390是双十进制计数器内部集成了两个独立的十进制计数单元每个单元又分成二分频和五分频两部分。也就是说一个74HC390芯片里实际上有四个计数模块两个二分频器和两个五分频器。每个十进制计数单元有两个时钟输入端CP0和CP1。如果把信号从CP0输入QA输出就是二分频如果把QA接到CP1信号从CP0输入那么QD、QC、QB、QA就组成一个8421码的十进制计数器。这个内部结构决定了74HC390特别适合做级联计数。3.2 六十进制计数器的两种实现路径六十进制计数器需要两个十进制位个位计数0到9十位计数0到5。用74HC390实现的时候有两种方案。方案一用一片74HC390的上下两个独立计数单元。下半部分做十位六进制上半部分做个位十进制。个位的进位信号接到十位的时钟输入端。这个方案只需要一片芯片接线最简洁。方案二用两片74HC390一片做个位十进制一片做十位六进制。这个方案浪费了半片芯片但接线更直观适合初学者理解级联逻辑。我推荐方案一因为74HC390的设计初衷就是让两个计数单元可以独立使用级联起来正好做六十进制。3.3 具体接线与反馈设计以方案一为例详细接线如下个位计数单元假设用下半部分CP0接时钟信号QA接到CP1清零端MR接低电平正常工作QD、QC、QB、QA输出到数码管十位计数单元上半部分CP0接个位的QD输出或者接个位的进位逻辑QA接到CP1清零端MR接反馈逻辑QD、QC、QB、QA输出到数码管十位的六进制反馈十位需要计数0到5当计数到6的时候清零。6对应的二进制是0110QC1、QB1。所以把QC和QB接到与非门输出接到十位的MR端。但这里有个关键问题74HC390的MR是异步清零还是同步清零查手册可以知道74HC390的MR是异步清零高电平有效。所以反馈逻辑要用与门而不是与非门。当QC和QB同时为1时与门输出高电平触发清零。提示74HC390的MR是高电平有效这和74LS161的CLR低电平有效正好相反。接线的时候如果搞混了计数器要么一直清零不计数要么计数到15才回零。3.4 个位到十位的进位信号怎么取个位计数从9回到0的时候需要给十位一个时钟脉冲。最直接的做法是把个位的QD输出接到十位的CP0。但这样有个问题QD在计数到8和9的时候都是高电平从9回到0的时候QD从1变0这个下降沿才能触发十位计数。74HC390的CP0是下降沿触发还是上升沿触发查手册可知CP0是下降沿触发。所以个位从9回到0的时候QD从高变低正好产生一个下降沿十位计数加一。这个逻辑是对的。但如果你把个位的QA接到十位的CP0那就错了。QA是二分频输出每来一个时钟脉冲就翻转一次频率是时钟的一半不能作为进位信号。4. Multisim仿真六十进制计数器的完整流程4.1 元件选取与参数设置在Multisim里搭建六十进制计数器需要以下元件74HC390两片或者一片取决于你选哪个方案74HC00或者74HC08与非门或与门用于反馈清零时钟源Clock_Voltage频率设为2Hz数码管两个DCD_HEXVCC和GND74HC390在Multisim的CMOS库里有搜索74HC390就能找到。注意不要选成74LS390两者的引脚兼容但电气特性不同仿真时区别不大但养成选对型号的习惯很重要。4.2 分步接线与调试第一步先接个位计数单元。把时钟源接到个位的CP0QA接到CP1MR接GND。数码管接QD、QC、QB、QA。运行仿真确认个位能从0计数到9再回到0。第二步接十位计数单元。把个位的QD接到十位的CP0十位的QA接到CP1。十位的MR先接GND让它自由计数。数码管接十位的输出。运行仿真确认十位能从0计数到9。第三步加反馈清零。把十位的QC和QB接到与门与门输出接到十位的MR。再运行仿真观察十位是否在计数到5之后回到0。第四步整体联调。把两个数码管放在一起观察个位从0到9循环每循环一次十位加1十位到5之后整体回到00。4.3 仿真速度与显示效果的调整Multisim默认的仿真速度可能偏快数码管跳变看不清。有两个办法调整一是降低时钟频率二是调整仿真设置里的Maximum Time Step。在Simulate菜单里选Interactive Simulation Settings把Maximum Time Step设小一点比如1e-5秒这样仿真精度更高数码管的显示更稳定。但设得太小会拖慢仿真速度需要根据电脑性能权衡。另外数码管的显示类型也要注意。DCD_HEX显示的是十六进制0到9显示正常但10到15会显示A到F。如果你只想看十进制可以用带译码的七段数码管或者用逻辑分析仪看波形。5. 两个方案的核心差异与选型建议5.1 74LS161方案与74HC390方案的对比对比项74LS161方案74HC390方案清零方式异步清零低电平有效异步清零高电平有效反馈逻辑用与非门用与门芯片数量六进制用1片六十进制用2片六十进制用1片接线复杂度中等较低适用场景需要二进制计数的场合需要十进制计数的场合仿真难度容易观察状态需要处理级联进位从表格可以看出六进制计数器用74LS161更直接因为它的输出就是二进制反馈逻辑简单。六十进制计数器用74HC390更划算一片芯片搞定两个十进制位接线也清爽。5.2 什么时候该选哪个方案如果你只是做一个六进制计数器比如课程设计里要求用74LS161实现那就老老实实用74LS161。它的反馈清零逻辑清晰仿真起来也容易观察。如果你要做六十进制计数器而且手头有74HC390那就优先用74HC390。它的双十进制结构天生适合做六十进制级联逻辑也符合十进制计数的直觉。如果两个芯片都有想对比学习那就两个方案都做一遍。74LS161方案能帮你理解二进制计数的反馈逻辑74HC390方案能帮你理解十进制级联的进位处理。两个都做下来对计数器的理解会上一个台阶。6. 仿真文件的使用说明与常见问题排查6.1 仿真文件的打开与运行仿真文件是Multisim的.ms14格式双击就能打开。打开后先检查几个地方电源是否接好、时钟源频率是否合适、数码管是否连接正确。如果打开后数码管不亮先检查VCC和GND有没有接。运行仿真的时候如果数码管显示乱码或者不变化按以下几个步骤排查检查时钟源是否正常工作用示波器或者逻辑分析仪看时钟输出检查使能端和清零端的电平是否正确检查反馈逻辑的门电路输出是否正常检查数码管的输入顺序是否接反6.2 Multisim数据库访问错误的解决办法很多人用Multisim的时候会遇到“数据库无法访问”的报错尤其是在安装后第一次运行或者换了电脑之后。这个问题的根源通常是数据库文件路径不对或者权限不够。解决办法分几步首先找到Multisim的安装目录通常在C盘的Program Files下。然后找到Database文件夹检查里面的.mdb文件是否存在。如果文件存在但还是报错右键点击Multisim的快捷方式选择“以管理员身份运行”。如果还是不行在Multisim的设置里找到Database选项手动指定数据库文件的路径。还有一个常见原因是Windows的用户账户控制权限太严导致Multisim无法写入数据库文件。可以尝试把Multisim的安装目录添加到杀毒软件的信任列表或者临时关闭杀毒软件再运行。6.3 仿真速度慢的优化方法Multisim仿真大规模电路的时候会变慢尤其是计数器级联之后。优化方法有几个一是减少不必要的显示元件比如数码管可以换成逻辑分析仪二是降低时钟频率频率越低仿真越快三是调整仿真设置里的RelTol和ABSTol参数适当放宽精度要求。如果仿真还是卡可以分段仿真。先单独仿真个位计数单元确认没问题后再接十位。这样每次仿真的电路规模小速度会快很多。7. 从仿真到实际电路的注意事项仿真跑通不代表实际电路就能正常工作。我在实际搭电路的时候遇到过几个仿真里不会出现的问题。第一个是按键抖动。如果用按键作为时钟源按键的机械抖动会产生多个脉冲导致计数器多计数。解决办法是加一个RS触发器或者RC滤波做消抖。第二个是电源噪声。TTL和CMOS芯片对电源噪声都很敏感尤其是级联的时候。在每片芯片的电源脚旁边加一个0.1uF的瓷片电容能有效滤除高频噪声。第三个是扇出问题。74LS161的输出驱动能力有限如果直接驱动数码管可能会因为电流不够导致显示暗淡。加一个74LS48译码驱动器就能解决。第四个是时钟信号的边沿质量。如果时钟信号的上升沿或下降沿太缓计数器可能会误触发。用施密特触发器整形一下或者选择边沿陡峭的时钟源。这些经验在仿真阶段通常不会暴露但实际搭电路的时候一定会遇到。提前知道这些坑能省下不少调试时间。8. 我个人的一些实操体会做计数器仿真这些年我最大的体会是反馈逻辑的取法比芯片选型更重要。很多人花大量时间纠结用74LS161还是74HC390却忽略了反馈信号从哪个输出端取、用与门还是与非门这些细节。实际上只要反馈逻辑对了用哪个芯片都能做出正确的计数器。另一个体会是仿真的时候一定要把时钟频率降下来。我见过太多人把时钟设成1kHz甚至更高然后抱怨数码管看不清。把频率降到1Hz到2Hz慢慢观察每个状态的切换才能真正理解计数器的工作过程。最后说一个Multisim的小技巧在仿真设置里把“Pause after each screen”勾上这样每次数码管变化的时候仿真会自动暂停方便你记录状态。这个功能在调试计数器的时候特别有用比盯着快速跳变的数码管强多了。