资讯动态

74HC161/390计数器设计:清零信号与级联进位避坑指南

发布时间:2026/10/17 21:45:29 来源:尧图企业网站定制
简介计数器是数字电路的重要时序逻辑部件承担计数、定时、分频等核心功能。这份资源为《数字电子线路基础》课程中“2-5 计数器逻辑功能和设计”实验的配套教学文档面向数字电子技术课程学生及需要复习该模块的学习者。文档以74HC161四位二进制计数器与74HC390二-五-十进制计数器为对象系统讲解同步与异步计数、加减法计数、反馈归零法与反馈置数法等任意进制计数器设计方法并以数字钟设计为综合案例串起六十进制、二十四进制计数器的级联设计思路帮助读者掌握芯片功能测试、逻辑图绘制与系统联调方法。资源为单个docx文档大小约207KB内含实验目的、仪器说明、原理讲解、芯片结构图与功能表、实验步骤及思考题结构完整可直接对照使用。已有288人学习适合本科生实验预习或考前复习参考。1. 计数器逻辑功能和设计最翻车的地方藏在清零信号里做数字电子线路基础实验计数器这一节最容易让人产生“我好像懂了但一上电就乱跳”的感觉。明明功能表都背熟了74161 和 74390 的管脚也核对过结果搭六进制计数器时数码管不是从 0 到 5而是突然冒出 6 又闪回 7这种问题十有八九出在清零信号的引导方式上。这份实验指导把四位二进制计数器、二-五-十进制计数器和任意进制设计全串在一起最终落到数字钟的级联实现。对正在做课程实验的同学来说它帮你少走一半弯路对需要补硬件基础的从业者它也是一份可以直接照做的计数器设计参考。接下来我按“先摸芯片 → 再算反馈 → 后搭级联 → 最后排坑”的顺序把这条线拆开。2. 先分清芯片脾气74HC161 与 74HC390 的触发边沿、清零与置数把计数器实验做顺的前提不是急着画反馈线而是先弄清楚每颗芯片的触发边沿、清零有效电平和置数方式。这三项直接决定你用什么门去引导也决定计数到哪个状态该截停。很多同学一上来就把 74161 当“普通计数器”用结果清零端和置数端都是低电平有效这件事没记牢反馈信号取反取错整条逻辑链就断了。2.1 74HC161异步清零、同步置数、双使能74HC161 是同步四位二进制计数器提到“同步”是指计数输出在时钟上升沿统一更新但它的两个控制端口性质完全不同清零端是异步的置数端是同步的。两者都低电平有效这是最容易记混的一组参数。异步清零意味着清零信号一到输出立刻变 0000不需要等时钟同步置数则要等下一个时钟上升沿才把并行数据端 D3~D0 装进去。这带来一个工程上的关键差异清零路径短响应快但毛刺风险高置数路径有时钟把关抗毛刺能力强代价是多等一拍。芯片还有两个使能端 ENP、ENT两者同时为高才正常计数进位输出 RCO 在计数到 15 且 ENT 为高时输出高电平用于多片级联。做实验时经常有人只接 ENP 忘记接 ENT结果高位片不走这种问题查芯片手册最快。我用一个简短的功能测试步骤来说明怎么确认这颗芯片的脾气1) 清零端 CR 接低电平观察 Q3~Q0 是否立即变 0000与时钟无关。 2) 置数端 LD 接低电平并行输入 D3~D0 设 0011等一个上升沿后确认输出变 0011。 3) ENP、ENT 同时接高输入脉冲观察 0000 - 0001 - ... - 1111 循环。 4) 观察 RCO计数到 1111 且 ENT 为高时输出高电平持续一个时钟周期。第 2 步能直接区分同步置数和异步清零的差别如果 LD 拉低后输出没立刻变而是等时钟来了才变说明“同步”二字没白叫。第 4 步的 RCO 是后面级联六十进制、二十四进制时拿进位信号的关键先确认它确实只在 1111 状态输出高电平后面接下一级时钟才不会多计或少计。2.2 74HC390双二五十进制两种接法对应两种码制74HC390 内部有两组独立的二-五-十进制计数器每组又拆成二进制计数器Q0和五进制计数器Q1~Q3。手册里那句“二-五-十进制”常让人摸不着头脑翻译过来就是你可以把两部分拼成十进制也可以不拼分开当二进制或五进制用。拼法不同输出码制不同。最常见的拼法是 Q0 接 CP1时钟从 CP0 进此时按 Q3Q2Q1Q0 读数是 8421 码的十进制计数输出序列 0000 到 10010~9到 9 之后回 0。另一种拼法是 Q3 接 CP0时钟从 CP1 进得到 5421 码的十进制计数实验里基本用不上但功能表测试时老师可能会拿这个考你。这颗芯片的清零端 CR 是高电平有效跟 74HC161 正好相反。所以同样做反馈归零74HC161 要用与非门取低电平清零74HC390 要用与门取高电平清零。如果拿 74161 的接线习惯去接 74390清零永远不触发。还有一点实验中被问得最多74HC390 的时钟是下降沿触发的。这意味着你要把上一级的进位信号接到本级 CP 之前得想清楚上一级输出是哪一种边沿变化。比如十进制个位从 9 变 0Q3 会从高变低这一个下降沿恰好可以作为十位的时钟脉冲这就是六十进制级联能成立的硬件基础。2.3 功能表先测后设计别跳步骤实验指导里要求自行完善 74HC161 和 74HC390 的功能表这一步看着简单却能滤掉大半低级错误。我一般建议按下面顺序走一遍1) 芯片插到实验箱先确认 VCC 和 GND 供电正常用万用表量管脚电压。 2) 清零、置数、使能分别做“悬空/高低电平”的组合记录输出。 3) 手动脉冲输入记录输出变化确认触发边沿。 4) 把观察到的结果整理成真值表跟芯片手册对照。第 2 步有个常见误区TTL 芯片悬空管脚有时会被识别成高电平74HC 系列则不一定悬空状态是未定义的。不要把“悬空能计数”当成芯片特性规范做法是使能端直接接高电平不用时也不要留空。第 4 步如果发现输出序列跟手册对不上先别怀疑芯片坏了检查手动脉冲是不是有抖动或者数码管驱动是否占用了输出负载。功能表测完再画反馈线能省掉后面大量排查时间。3. 任意进制计数器不玄学反馈识别码的计算与引导门选型用中规模集成计数器搭任意进制核心就一句话让计数器在走完 N 个有效状态后被一个“识别信号”拉回起点。至于拉回方式是清零还是置数决定了你截取的是哪一个状态这就是反馈归零法和反馈置数法的本质区别。很多同学栽在这里是因为背了公式却不知道公式里的 N 和 N-1 是怎么来的。3.1 反馈归零法异步清零用 N 做识别码反馈归零法的思路是让计数器自由往上走走到第 N 个状态时强行清零。因为清零是异步的识别信号一到输出立刻归零所以这个“第 N 个状态”本身几乎不显示它存在的意义就是触发清零。用 74HC161 做六进制计数器正常循环是 0~5 共 6 个状态。异步清零端的识别码取 N6也就是当 Q3Q2Q1Q0 变成 0110 时产生清零信号。这里要注意74161 清零端低电平有效所以识别电路要能输出低电平通常用与非门把状态 6 的特征位引出来清零信号 (Q2 与 Q1) 的非因为二进制 6 是 0110Q21、Q11这两个位同时为高就能唯一识别状态 6。用与非门接到 CR 端状态 6 出现时拉低 CR计数器立刻回 0000。有效循环状态就是 0~56 是瞬时状态数码管上基本看不到。换到 74HC390清零端是高电平有效识别电路就要用与门输出高电平去触发。同样是六进制如果个位用 74HC390你得找状态 6 的特征位做“与”运算输出接 CR。引导门的选型不是拍脑袋而是由清零端有效电平决定的这一点实验报告里最好写清楚。3.2 反馈置数法同步置数以 N-1 为识别码反馈置数法的差别在于清零变成“预置一个起始状态”。74HC161 的置数端是同步的识别信号到达后要等下一个时钟上升沿才把并行数据装进去。所以你不能等到状态 N 才触发而要在状态 N-1 触发让 N-1 这一拍结束、时钟再来时正好变成起点。还是六进制同步置数法的识别码取 N-15也就是 0101。当计数器走到 0101 时用与非门把 Q2 和 Q0 的特征位引出来输出低电平接到 LD 端。等下一个上升沿并行数据端 D3~D0 上预置的值被装入。若想让输出从 0000 重新开始就把 D3~D0 全部接地这样有效循环状态仍是 0~5但中间多了一个时钟周期的缓冲清零毛刺问题被天然规避。这个方法在实验指导里被特别推荐原因是六进制计数器用异步归零时经常出现竞争冒险而预置数法因为识别信号和装载动作之间隔着时钟边沿毛刺不容易传播到输出端。缺点是并行数据端占用了更多管脚接线略显复杂。3.3 用脚本先算识别码减少拍脑袋出错反馈识别码的选择本质上是“找状态特征位”。状态多的时候人眼看二进制容易漏位我习惯在上板之前先跑一段小脚本把所有候选状态的位组合打印出来再决定用哪几个 Q 端做与非门或与门def find_feedback_targets(N, modeclear): 计算 N 进制计数器需要的反馈识别码。 modeclear 对应异步清零识别码 N modeload 对应同步置数识别码 N - 1 返回识别码的十进制值与二进制位组合。 if mode clear: target N else: target N - 1 bin_str format(target, 04b) ones [i for i, ch in enumerate(bin_str[::-1]) if ch 1] return target, ones for N in [6, 12, 24, 60]: for mode in [clear, load]: target, ones find_feedback_targets(N, mode) print(fN{N:2} {mode:6} 识别码{target:2} 二进制{format(target, 04b)} f取1的位Q{ones})这段脚本的逻辑很简单异步清零的识别码是 N因为状态 N 只用来触发清零不进有效循环同步置数的识别码是 N-1因为装载动作发生在识别码这一拍的末尾要把起点装进去。ones 列表里输出的位编号就是你要接入与非门低有效或与门高有效的 Q 端。参数说明mode 参数决定公式用 N 还是 N-1输出二进制是四位对应 74HC161 的 Q3Q2Q1Q0如果目标状态超过 15需要改成多片级联后的更多位。运行结果里 N6 的 clear 模式会告诉你取 Q1、Q2load 模式会告诉你取 Q0、Q2正好对应前面手算的非门输入。这个脚本不替你做硬件接线但能让你在画逻辑图之前就确定哪些输出位参与反馈避免在实验箱上一边量电平一边猜。4. 数字钟级联实战六十进制、二十四进制的进位走向与信号兜底数字钟是这次实验的最终集成题。它的本质是三个计数器串在一起个位十进制、十位六进制组成六十进制分钟部分再和二十四进制的时钟部分级联。级联的关键不在计数器本身而在“进位信号从哪取、接到下一级的哪个时钟端、边沿对不对”。4.1 六进制先行置数法比清零法更稳实验指导明确建议先搭一个六进制计数器它可以作为钟的“分十位”或“时十位”。六进制如果直接套反馈归零识别状态是 60110清零信号瞬间把输出拉回零但异步清零路径上任何一个门的传输延迟不一致都可能让电路出现极短暂的 7 状态再被清零。数码管显示上表现为“5 之后闪一下 6 或 7”。用同步置数法做六进制识别状态取 50101识别信号到达后计数器保持 5 到下一个时钟上升沿然后装载 0000。整个过程中输出不会出现 5 以外的非法状态竞争冒险问题从根源上被绕开。代价是并行数据端四个输入全部接地还要占用 LD 端但实验箱上接线多几根远好过之后查毛刺查到怀疑人生。4.2 六十进制个位十进制下降沿进位给十位六十进制由个位十进制和十位六进制组成。个位用 74HC390 的 8421 十进制接法Q0 接 CP1时钟从 CP0 输入。十位用 74HC161 做六进制接受个位的进位信号。这里有个决定成败的细节个位计数到 9 时输出 1001下一个脉冲到达后变成 0000此时 Q3 从 1 掉到 0产生一个下降沿。74HC390 本身是下降沿触发而 74HC161 是上升沿触发如果把 Q3 直接接给 74HC161 的 CP触发边沿是反的十位会在个位从 8 变 9 的上升沿处提前动作数字钟秒位会错乱。常见做法是加一级反相器把 Q3 下降沿转成上升沿再送给 74HC161。也有的实验箱把 74HC161 换成下降沿触发的芯片来匹配。设计报告里写清楚“个位的进位信号取自 Q3 的下降沿经反相后作为十位时钟”导师基本不会再追问。这个反相器可以用 74HC04实验指导的器件清单里没单独列但 7400 与非门把两个输入短接也能当反相器用我习惯这么省事。4.3 二十四进制整体复位法截住 24 状态二十四进制计数器由十位二进制0~2和个位十进制0~9组成难点在于十位到 2 之后不能出现 3而且时间走到 23:59 再加一秒要整体回 00:00。实验指导里提到“整体复位法”做法是识别“24”这个状态并让整个计数器复位。这个状态在正常计时中不会停留它就是 0~23 之后的额外一拍一旦出现就触发清零。识别 24 状态要同时看十位和个位十位 Q11代表 2个位 Q41代表 4两个条件相与后给出复位信号。因为这个复位是异步的信号一出现分钟和小时的十位、个位全部归零。接线时要把复位信号同时接到所有计数器的清零端任何一级漏接都会导致 23:59 之后变成 23:00 而不是 00:00。需要提醒的是时十位只用 74HC161 的 Q1 一个输出就够了其他输出悬空即可但并行数据端和使能端不能悬空否则芯片可能进入未定义状态。实验中最常见的奇怪现象——小时显示 29、30 之类——基本都是这个原因造成的。4.4 级联之后的信号走向要画清楚六十进制和二十四进制级联时分钟部分的六十进制每走 60 分钟产生一次进位这个进位送给二十四进制计数器的时钟端。分钟十位用 74HC161 做六进制当十位从 5 回到 0 的那一拍本来应该产生一个“小时进位”信号。但 74HC161 的进位输出 RCO 只在输出 1111 时才有效而六进制根本走不到 1111所以不能直接拿 RCO 当小时进位。正确做法是从六十进制十位的输出取识别信号十位为 5、个位为 9 时下一个脉冲到达后整个分钟部分归零此时由识别电路产生一个时钟给小时部分。这个识别信号本质上就是“最小状态组合”比如十位 0101、个位 1001 相与输出。建议在设计图上把这类跨级信号标注为 TEN_MIN_CARRY 和 HOUR_EN方便实验时对着示波器或万用表定位。5. 避坑与排查清零毛刺、级联错位和显示乱码的三类处理这一章的内容不是从手册里抄的而是做这类实验时最容易反复折腾的三类问题。每一条都按“现象 → 原因 → 解决”的顺序写排查时直接对照你自己的板子。5.1 现象六进制计数时偶尔闪出 7现象数码管显示从 0 到 5 循环但有时能看见 6 或 7 一闪而过甚至卡在 7 不走。原因用了反馈归零法清零识别码为 60110。异步清零信号经过与非门产生不同 Q 端到达与非门的时间有微小差异导致清零动作发生前Q2、Q1 先变成高而 Q0 还来不及变化瞬间出现 01117或其它组合或者清零信号毛刺宽度不够没有真正触发 CR 端。解决改用同步置数法识别码取 50101让输出在 5 状态停留到下一个时钟上升沿再装载 0000。这个改动只动一条反馈线和四个并行数据端实验箱上十分钟能完成但能彻底绕开异步清零毛刺。5.2 现象60 进制级联后十位不走或一次跳两位现象个位从 9 回到 0 时十位没有加 1或者十位一次加了 2。原因进位信号取错位置或触发边沿不匹配。个位 Q3 在 9→0 时是下降沿如果直接接给 74HC161 的上升沿时钟端十位会在这个边沿不动作如果误把个位 Q3 在 8→9 的上升沿当成进位十位就会在个位还没到 9 时提前起步。解决确认进位信号取自 Q3 的 9→0 下降沿再经过反相器转成上升沿给十位或者把十位芯片换成下降沿触发类型。测试时用慢速手动脉冲逐个观察每按一下确认个位变化后再看十位状态。5.3 现象24 小时制在 23:59 之后变成 23:00 或 00:10现象分钟正常进位但小时部分走到 23:59 后没有整体归零而是显示 23:00或者小时归零但分钟没有。原因整体复位信号没有覆盖全部计数器。24 状态出现时复位信号只接到了小时十位和小时个位分钟部分没有清零或者复位信号遇到了阻塞导致分钟仍停留在 0~9 的某个状态。解决把 24 识别信号同时接到所有 74HC161 和 74HC390 的清零端不要只接小时显示部分。用万用表在 23:59→00:00 跳变瞬间量每个清零端电压确认全部收到了高电平74161或低电平视芯片而定的复位脉冲。5.4 现象手动脉冲乱跳数码管显示无规律现象用手动脉冲源给电路加时钟数码管显示根本不是计数序列时而 0 时而 8像抽风。原因手动脉冲源没有消抖按键按下和松开瞬间产生多次上升沿计数器在一个“人为动作”里走了好几拍。解决测试时不要用手动脉冲做精细计数验证改用实验箱自带的 1Hz 或 10Hz 方波源。如果只能用按键按一次等一秒再观察显示不要连续按。这个方法算得上血泪经验很多人浪费半小时查线路最后发现只是按键抖得厉害。5.5 现象芯片发热且输出全是高电平现象某颗芯片手摸发烫输出端全部为高读数固定不变。原因最可能是电源接反或输出端打架。TTL 和 CMOS 混用时输出高电平驱动能力不一致两根输出线直接短接会造成过流其次是管脚对错把输出引脚接到了 VCC 或 GND。解决先断电用万用表二极管档量芯片 VCC 和 GND 之间是否存在短路再逐个检查有没有两个输出端同时接在同一根连线上的情况。排查后将芯片换新重新按管脚图核对一遍再上电。这类问题不要靠换芯片硬试必须找到短路点。6. 上板前先跑一遍状态模拟识别码自查脚本与习惯养成设计任意进制计数器时最浪费时间的不是接线而是“觉得自己算对了反馈识别码上板却发现序列不对”。我后来养成了一个习惯任何 N 进制设计先跑一遍状态序列模拟确认识别码落到哪个状态、装载或清零发生在哪个时序点再动手画逻辑图。这一步能提前发现识别码选择错误比如该用 N-1 却用了 N该在 0101 置数却在 0100 就触发了。下面是一段很小的状态序列模拟跑完能直接看到识别码触发点和有效循环覆盖def simulate_sequence(N, trigger, load_value0): 模拟同步置数法下的计数器状态序列。 trigger: 触发置数的识别码 load_value: 置数时装入的并行数据 state 0 seq [] for _ in range(N * 2): seq.append(state) if state trigger: state load_value else: state (state 1) % 16 return seq for N in (6, 24, 60): trig N - 1 seq simulate_sequence(N, trig) covered sorted(set(seq)) print(fN{N:2}, 识别码{trig:2}, 覆盖状态数{len(covered)}, f首尾状态{seq[0]}-{seq[-1]})这段代码把 74HC161 的同步置数行为抽象成“识别码触发装载”没有模拟硬件延迟所以它验证的是逻辑设计而不是物理时序。参数说明N 是目标进制trigger 按同步置数法应取 N-1load_value 是并行数据端预置的起点默认 0。运行结果中“覆盖状态数”应等于 N且序列首尾能对得上说明有效循环完整。如果覆盖数不足或超出回头检查触发码是不是多算了 1。从那以后我每次做计数器实验都强制自己先算反馈识别码、再用脚本模拟一段状态序列、最后才去实验箱上接线。这个习惯帮我省下的排查时间远多于写脚本那几分钟。希望帮到你。本文还有配套的精品资源点击获取

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

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

免费获取报价 →
↑