☰
用74LS194移位寄存器搭建环形计数器:原理、电路与实操指南
2026/10/6 6:49:55 网站建设 项目流程

搞数字电路的朋友一定绕不开计数器和移位寄存器这两类基础器件。今天聊的这个电路,就是把它们俩放在一起用:拿一块74LS194四位移位寄存器,搭一个环形计数器,让一个“1”在四个输出端之间顺序循环。相比4518、4017这类专用计数芯片,用74LS194搭环形计数器有个天然优势——状态输出是充分展开的,每一位对应一个独立输出端,不用额外译码,直接就能驱动流水灯、步进电机四相时序脉冲,或者做一个数字系统的节拍发生器。这篇文章从原理、引脚一路讲到完整电路图和实操步骤,照着做就能跑起来。适合刚学完时序逻辑、想动手搭电路的电子爱好者,也适合做数字电路课程设计的同学参考。

1. 整体设计与思路拆解

1.1 为什么选74LS194而不是4017

很多人一听到“环形计数器”,第一反应是用CD4017,或者直接上单片机。CD4017是自带译码的十进制计数器,十个输出端分别对应0~9,拿来跑流水灯确实方便。但如果你想控制一个四相步进电机,或者做一个四拍节拍发生器,CD4017的十路输出反而是浪费,而且它的内部结构是约翰逊计数器加译码网络,并不是真正意义上的移位型计数器。

74LS194则完全是另一种路子。它是4位双向通用移位寄存器,既能右移、左移,又能并行装载数据,还能保持当前状态。用一片74LS194,通过简单的反馈接线,就能做出任意长度、任意初始状态的环形计数器。而4017的状态数是固定的、译码是固定的,灵活性差了不少。更关键的是,74LS194是TTL家族里的“钉子户”,价格便宜、库存遍地都是,DIP封装往面包板上一插就能调试,实测下来非常适合教学演示和课设。

另外,如果你以后想扩展成8位、16位的环形计数器,74LS194可以直接级联,一片接一片,串行输入串行输出,逻辑非常干净。4017想级联就要处理进位和译码,麻烦得多。

1.2 环形计数器到底是怎么“转”起来的

移位寄存器的核心动作很简单:每个时钟上升沿,数据往指定方向挪一位。以右移为例,数据从DSR脚进入Q0,原来的Q0跑到Q1,Q1跑到Q2,Q2跑到Q3,Q3的数据则会被“挤出去”。如果在芯片外面把Q3接回到DSR,那被挤出去的数据又会绕一圈回到Q0——这就成了一个环。

所以环形计数器本质上就是一个“自己给自己喂数据”的移位寄存器。给寄存器预先装载1000,那么时钟依次到来后,状态就是1000 → 0100 → 0010 → 0001 → 1000,四个状态反复循环。每个状态下只有一个输出端为1,也就是常说的“one-hot”编码。

用一句话概括:普通移位寄存器是直线流水线,把Q3接回输入端之后,流水线变成了环形传送带。就像四个人排队,只有一个人手里举着旗子,每吹一次哨,旗子往右传一个人,传到队尾后再传回队头,循环往复。

1.3 方案选型:移位方向、初值加载和反馈策略

搭这个电路之前,有三件事要先定下来:

第一,移位方向。我用右移,因为Q0是第一位,观察起来最直观。右移时串行输入端口叫DSR,反馈线要把Q3接到DSR上。如果你偏爱左移,那就把Q0接到DSL上,效果和右移是对称的。

第二,初始值怎么进去。移位寄存器本身不会自己变成1000,上电瞬间寄存器里的四个触发器可能随机出现任何状态。所以必须先“装载”一次:让S1=S0=1,芯片进入并行装载模式,此时D0接高电平,D1~D3接地,再给一个时钟上升沿,1000就被锁进寄存器了。

第三,反馈策略。最简单的反馈是Q3直接接DSR,但这有个坑:如果寄存器被清成0000,那DSR永远是0,整个计数器会锁死在0000。后面的“问题排查”部分我会讲怎么用一片74LS27做自启动改造,让电路从任何状态都能自动收敛到正常循环。

2. 核心细节解析与实操要点

2.1 74LS194引脚:16个脚各有各的活

74LS194是16脚DIP封装,面包板上很好认:芯片缺口朝上,左下角是1脚,逆时针绕一圈到左上角是16脚。引脚功能我整理成了表格,接线之前最好先对照看一遍。

引脚名称类型功能说明
1S1输入模式控制位1,配合S0选择工作模式
2D0输入并行数据输入第0位
3D1输入并行数据输入第1位
4D2输入并行数据输入第2位
5D3输入并行数据输入第3位
6Q0输出寄存器输出第0位
7Q1输出寄存器输出第1位
8GND电源接地
9Q2输出寄存器输出第2位
10Q3输出寄存器输出第3位
11CP输入时钟输入,上升沿触发
12S0输入模式控制位0
13MR输入异步清零,低电平有效,优先级别最高
14DSR输入右移串行数据输入
15DSL输入左移串行数据输入
16VCC电源接+5V

这16个脚里,最容易踩坑的是两个串行输入:DSR和DSL。如果只用右移,DSL绝对不能悬空,必须接到GND或者VCC。TTL芯片的悬空输入会像一根天线,把空间噪声耦合进来,导致寄存器莫名其妙多翻转一下。我见过有人做实验时状态乱跳,查了半天最后发现就是DSL悬空惹的祸。

2.2 模式控制表:别看只有几个状态,决定所有行为

S1和S0组合起来用,芯片就变成了一个“可以编程的寄存器”。这张表是整个电路的控制核心:

MRS1S0操作
0任意任意清零:Q0~Q3全部变0
100保持:输出不变
101右移:DSR→Q0,Q0→Q1,Q1→Q2,Q2→Q3
110左移:DSL→Q3,Q3→Q2,Q2→Q1,Q1→Q0
111并行装载:D0→Q0,D1→Q1,D2→Q2,D3→Q3

搭建环形计数器时,我建议把S0直接接高电平,这样整个电路只需要控制S1一个脚:S1为1时处于并行装载模式,S1为0时处于右移模式。开关拨到装载档,给一个时钟,初值进去了;再拨到运行档,计数器就开始循环。这个简化方法是我实际搭电路时验证过的,比两路控制都走开关省事,也减少接错线的概率。

还要提醒一句:模式信号和并行数据必须在时钟上升沿之前稳定下来,这就是时序电路里的建立时间概念。实际操作中,先拨好S1,再按时钟按钮,顺序不要反。

2.3 反馈接线:DSR接Q3,这是环形计数器的灵魂

没有反馈的移位寄存器只是一个数据延迟链,有了反馈才变成计数器。在右移模式下,Q3是队伍的最后一棒,它必须把手中的数据交还给队首,所以Q3接到DSR是整条反馈链路的关键一步。

接好反馈之后,再看看整个循环的状态表:

时钟序号Q3Q2Q1Q0
00001
10010
20100
31000
40001

看到规律了吗?单个“1”从右往左平移,到了最左边又跳回最右边。4位移位寄存器对应4个有效状态,这就是4位环形计数器的全部秘密。

如果你把反馈改成Q3取反后再接回DSR,就变成了约翰逊计数器,也叫扭环计数器。4位的约翰逊计数器有8个有效状态,输出波形像蛇一样扭动,适合做8步顺序控制。这块内容在后面扩展部分我再展开,现在先把最基本的环形计数器搭出来。

3. 实操过程与完整电路图

3.1 完整电路图与面包板连接清单

mock测试的时候很多人问我要“完整电路图”,其实数字电路这东西,一张引脚级连接清单比什么都管用。下面是完整的面包板接线表,照着逐脚接,基本一次成功。

74LS194引脚接法
16(VCC)+5V,并在VCC与GND之间就近接0.1μF去耦电容
8(GND)电源地
11(CP)时钟源输出(555电路或手动单步信号)
13(MR)10kΩ电阻上拉到+5V,再并一个按键到GND,实现复位
12(S0)直接接+5V
1(S1)接单刀双掷开关:LOAD档接+5V,RUN档接GND
2(D0)接+5V(装载初值“1”)
3(D1)接GND
4(D2)接GND
5(D3)接GND
14(DSR)接Q3(第10脚),这是反馈线
15(DSL)接GND,不用的串行输入必须接地
6(Q0)经330Ω电阻接LED0,LED另一头接+5V
7(Q1)经330Ω电阻接LED1,LED另一头接+5V
9(Q2)经330Ω电阻接LED2,LED另一头接+5V
10(Q3)经330Ω电阻接LED3,LED另一头接+5V,同时引线到DSR

这里有一个很重要的接线细节:LED必须是“+5V → 电阻 → LED → Q输出”这种接法,而不是大多数人习惯的“Q输出 → 电阻 → LED → GND”。原因是74LS系列芯片的低电平灌电流能力强(约8mA),高电平拉电流能力却很弱(只有0.4mA左右)。接成第一种方式,输出为低电平时LED才会亮;如果接成第二种方式,LED会非常暗甚至完全不亮。

至于S1的模式切换,如果手头没有单刀双掷开关,也可以用两根跳线手动实现:一根跳线把S1接到+5V是装载,拔掉改接GND就是运行。只是操作起来麻烦一点,实验效果一模一样。

3.2 时钟源:555自激振荡和手动单步两种方案

环形计数器必须有时钟才能动。我强烈建议你在面包板上同时准备两种时钟:一种用555搭自动脉冲,另一种用手动按键单步触发。自动脉冲用来观察连续循环效果,手动单步用来检查每一个状态的转移是否正确。

555自动脉冲电路很经典。取R1=1kΩ、R2=10kΩ、C1=100μF,输出频率约为0.7Hz,也就是大概1.5秒翻一次,LED的移动效果非常清楚。频率计算公式是:

f = 1.44 / ((R1 + 2×R2) × C1)

把数值代进去:1.44 / ((1kΩ + 20kΩ) × 100μF) ≈ 0.69Hz。如果你想更快或更慢,把R2换成10kΩ电位器就行,边调边看效果。

手动单步时钟的核心是去抖。按键是机械触点,按下瞬间会来回弹跳几十毫秒,如果直接接到74LS194的CP脚,一次按键可能触发好几个时钟,状态一下就跳飞了。解决办法是用一个RC低通滤波器加施密特触发器:按键一端接+5V,另一端经过10kΩ下拉电阻到地,并在该节点接0.1μF电容到地,产生的信号再经过74HC14的反相器整形后接到CP脚。这样按一下只会产生一个干净利落的上升沿。

如果你没有74HC14,也可以用常见的555单稳态电路代替,但RC加施密特触发器是最省器件的方案。实际测下来,74LS194对时钟上升沿的宽度要求不高,施密特整形后的信号完全够用。

3.3 实操步骤:从上电到看到循环效果

接线完毕之后,按下面的顺序操作,基本不会迷路:

第一步,检查电源。用万用表确认芯片第16脚是+5V,第8脚是0V。这一步看着简单,但电源接反烧芯片的惨案我见过太多次了。

第二步,把S1拨到LOAD档,S0保持高电平。此时芯片处于并行装载模式,D0上的“1”已经等在门口了。

第三步,按一次手动时钟按钮。在时钟上升沿瞬间,D0~D3的数据被锁存,Q0变成1,Q1~Q3变成0。如果LED是低电平点亮接法,你会看到Q1、Q2、Q3对应的三盏灯亮,Q0那盏灭。

第四步,把S1拨到RUN档,芯片进入右移模式。这时候再按时钟按钮,那盏“灭”的灯会依次往Q1、Q2、Q3移动,然后再绕回Q0。

看到这个循环,说明环形计数器已经工作正常了。很多第一次搭这个电路的人会困惑:为什么一开始有三盏灯亮,只有一盏灭?这就是LS系列LED低电平点亮的代价——你看到的其实是“0”在跑,而不是“1”在跑。如果你更希望看到单灯跑的效果,可以换成74HC194(HC系列高电平驱动能力强),或者用逻辑取反电路把Q输出翻转一下。但从工作原理上说,两种现象是等价的。

如果你用的是555自动时钟,上电后不需要手动按键也会自动循环。但第一次调试我建议手动单步,一步一停,方便观察和排错。

4. 常见问题与排查技巧实录

4.1 上电后不走、卡死在全0或者乱码

我自己带学生做实验时,这个电路的故障基本集中在三种现象上。

现象一:上电后四个LED全灭,或者全亮但没有反应。先别怀疑芯片烧了,大概率是MR被拉低了。MR是异步清零端,低电平有效,如果这个脚直接接地,芯片就会一直处于清零状态,任何时钟都没用。正确接法是MR通过10kΩ电阻上拉到+5V,需要清零时才按键接地。

现象二:状态乱跳,不是1000→0100→0010→0001的顺序。这种十有八九是初值没装载成功。可能是S1没拨到LOAD位置就按了时钟,也可能是D0~D3的接线松了。把模式开关拨到LOAD,再按一次时钟,确认Q0为高后再切换到RUN。

现象三:卡在0000完全不动。如果反馈线Q3→DSR接好了,但寄存器一开始是0000,那么DSR永远是0,数据永远进不来,计数器就锁死了。解决方法是重新装载初值;如果想让电路一上电就自动恢复正常,可以试试后面说的自启动改造。

排查这类数字电路问题,我习惯按“电源→地→复位→模式→时钟→反馈→初值”这个顺序来,从“芯片能不能活”查到“数据往哪走”,基本能覆盖90%的故障点。

4.2 抖动、毛刺、电源噪声这些看不见的敌人

手动按键不接去抖电路,一次按键跳好几个状态,这是新手最头疼的问题。RC去抖的原理很简单:按键抖动产生的毛刺被电容吸收,施密特触发器再把缓慢变化的电压整形为陡峭的边沿。电容取0.1μF、电阻取10kΩ时,时间常数约1ms,对付机械按键几十毫秒的抖动足够。

555自动时钟模式下,如果LED干扰明显或者状态偶尔跳变,多半是电源没处理好。TTL芯片对电源纹波比较敏感,我建议在面包板的电源轨和芯片电源脚附近都加上0.1μF去耦电容。有些人不加这个电容也能跑,但加了之后稳定性明显提升,尤其是周围还有继电器、电机等大功率器件时,这个电容几乎就是救命稻草。

还有一点要特别提醒:CP时钟线尽量短,不要和LED的驱动线并排走太长距离。面包板上的长飞线之间会形成寄生电容和互感,时钟信号被污染后,寄存器会在错误的时刻采样。遇到这种问题时,把时钟线换成跳线帽那样的短连线,或者把反馈线和时钟线拉开距离,症状往往就消失了。

4.3 扩展玩法:8位环形计数器与自启动改造

电路跑通后,可以往三个方向扩展,每一个都很有价值。

方向一:级联成8位环形计数器。两片74LS194的时钟CP并联,第一片的Q3接到第二片的DSR,第二片的Q3反馈回第一片的DSR。装载初值时,两片都要进入LOAD模式,给其中一片的对应数据位装1,其他位装0。级联之后,那盏灭的灯会在8个LED之间循环移动,效果非常壮观。

方向二:改成约翰逊计数器。把反馈线从Q3直接接到DSR,改成Q3取反后接DSR,就变成了扭环结构。4位的约翰逊计数器有8个有效状态,输出变化更丰富,步进电机八拍驱动正好用到这个逻辑。取反可以用一个反相器,比如74LS04或74HC04,非常方便。

方向三:自启动改造。为了解决0000锁死问题,我推荐用一片74LS27(三输入或非门),把Q0、Q1、Q2接到或非门的三个输入,输出接到DSR。这个逻辑的意思是:只要Q0~Q2不全为0,DSR就是0;只有它们全为0时,DSR才为1。这样寄存器从任何状态出发,经过几个时钟都会自动收敛到正常的单灯循环。这个方法是教科书上自校正环形计数器的标准做法,我实际焊板子验证过,效果稳定、成本极低,强烈建议试试。

实际操作中,自启动电路有奇效。有一次我做演示前忘记手动装载初值,一上电就乱了,但因为提前改了NOR反馈,两三拍之后自己就恢复正常循环。台下观众还以为是程序故意设计成自动校正的,其实是硬件电路自己“修”回来的。

这个内容后续还可以这样扩展:把74LS194的输出Q0~Q3接到ULN2003达林顿管阵列,直接驱动四相六线步进电机,一个环形计数器就变成了完整的步进电机驱动器。或者把时钟换成传感器脉冲,做成分拣传送带的循环工位信号。74LS194这类老芯片虽然看起来“过时”,但它在顺序控制上依然是教科书写进骨子里的可靠方案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询