ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

74LS47驱动数码管:从真值表到Multisim仿真的0-8显示电路

74LS47驱动数码管:从真值表到Multisim仿真的0-8显示电路 1. 为什么74LS47驱动数码管值得单独拿出来讲数码管这玩意儿搞电子的没人不认识。但真要让你从零搭一个稳定的显示电路很多人第一反应还是“上个单片机吧几行代码的事”。单片机确实省事可如果你连数码管怎么被点亮的、段码是怎么译出来的都说不清楚那本质上你只是调了个库不是懂了电路。74LS47这颗芯片有意思的地方在于它把“译码”这件事从软件搬回了硬件。你给它4位BCD码它直接吐出7段驱动信号中间不需要任何程序参与。这种纯硬件译码的思路在工业仪表、老式计数器、教学实验箱里至今还在用原因很简单稳定、不跑飞、不怕死机。单片机程序可能因为干扰跑飞但74LS47只要供电正常、输入正确输出就是确定的。这篇文章面向的是刚接触数字电路的学生、需要带实验课的助教、以及想从“调库”回到“懂原理”的嵌入式初学者。我会用Multisim14把整个电路搭一遍从74LS47每一根引脚干什么、共阳共阴到底怎么选、真值表怎么读一直讲到0到8循环显示怎么连。中间会穿插我自己踩过的坑比如为什么你的数码管死活不亮、为什么显示的数字缺胳膊少腿。注意本文所有操作基于Multisim14仿真环境实物搭建时需额外考虑限流电阻和电源去耦仿真里可以偷懒实物上偷懒会烧管子。2. 74LS47和数码管的基础认知扫盲2.1 74LS47到底是个什么芯片74LS47是TTL系列里的BCD-to-7-segment decoder/driver中文叫BCD七段译码驱动器。名字拆开看就明白了输入是BCD码也就是0到9的二进制表示4根线输出是7段数码管的驱动信号加上小数点就是8段但74LS47只管7段小数点它不管。它和74LS48长得很像区别在于输出极性。74LS47输出是低电平有效专门驱动共阳极数码管74LS48输出高电平有效驱动共阴极。这个区别是初学者最容易翻车的地方买错管子或者接错芯片现象就是全亮或者全灭怎么调都不对。74LS47的引脚排列DIP16封装从左下角逆时针数引脚号符号功能说明1BBCD输入B位2^12CBCD输入C位2^23LT灯测试低有效4BI/RBO消隐输入/行消隐输出5RBI行消隐输入6DBCD输入D位2^37ABCD输入A位2^08GND地9e段e输出10d段d输出11c段c输出12b段b输出13a段a输出14g段g输出15f段f输出16VCC电源5V记住几个关键点A是最低位D是最高位输入范围0000到1111但只有0000到1001对应0到91010到1111在74LS47上会输出一些奇怪的段组合这是它和74LS48不同的地方74LS48会消隐74LS47不会。2.2 共阳数码管和共阴数码管的本质区别数码管内部就是8个发光二极管7个组成8字形1个做小数点。共阳的意思是所有LED的阳极连在一起接到VCC阴极单独引出来。你要点亮某一段就把那一段的阴极拉低。共阴反过来阴极共地阳极拉高点亮。为什么74LS47配共阳因为74LS47输出低有效正好匹配共阳数码管“拉低点亮”的逻辑。如果你手头只有共阴数码管那就得用74LS48或者加反相器但加反相器会增加延迟和成本不如直接换芯片。实操心得买数码管的时候型号里带“A”的通常是共阳带“K”的是共阴但这不是绝对标准。最靠谱的方法是拿万用表二极管档测红笔接某脚黑笔依次碰其他脚如果有一段微亮红笔那个就是公共阳极。2.3 真值表怎么读才不会晕74LS47的真值表在datasheet里是一张大表初学者一看就头大。其实你只需要关注三列输入DCBA、输出abcdefg、以及显示的数字。| D | C | B | A | a | b | c | d | e | f | g | 显示 | |---|---|---|---|---|---|---|---|---|---|---| | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 2 | | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 3 | | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 4 | | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 5 | | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 6 | | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 7 | | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 8 | | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 9 |注意表里的0和1是芯片输出引脚的实际电平。因为74LS47是低有效所以输出0表示该段点亮输出1表示该段熄灭。比如显示“0”的时候g段输出1其他段输出0意思是g段灭其他段亮合起来就是个0。这个表不用背搭电路的时候对着看就行。但你要理解一件事真值表描述的是理想逻辑关系实际接线还要考虑数码管本身的段序。不同厂家生产的数码管a到g对应的引脚顺序可能不一样这个后面会细说。3. Multisim14仿真环境准备与元件选取3.1 Multisim14的安装与数据库问题Multisim14是NI出的电路仿真软件版本号14.0之后改叫Multisim 14.0再往后就是14.1、14.2。网上流传的“安装后无数据库”问题多半是因为安装路径里有中文或者破解文件没覆盖到位。数据库文件默认在C:\Users\Public\Documents\National Instruments\Circuit Design Suite 14.0\database如果这个文件夹是空的元件库就加载不出来。解决办法很简单卸载干净用英文路径重装安装完成后先别急着破解打开一次让软件生成默认数据库再覆盖破解文件。如果已经装了但没数据库可以手动把备份的master.mdb和corporate.mdb拷回去。注意Multisim14在Win10/Win11上偶尔会有兼容性问题右键属性里勾选“以兼容模式运行”和“以管理员身份运行”能解决大部分闪退。3.2 在Multisim里找到74LS47和数码管打开Multisim14新建一个Blank电路。元件库在左侧工具栏的“Place Component”按钮或者快捷键CtrlW。74LS47的位置Group: TTL→Family: 74LS→ 在搜索框输入74LS47。你会看到74LS47D这是DIP16封装的模型直接选它。数码管的位置Group: Indicators→Family: SEVEN_SEG_DISPLAY。这里有好几种SEVEN_SEG_DECIMAL_COM_A是共阳十进制数码管SEVEN_SEG_DECIMAL_COM_K是共阴。我们要选共阳的也就是带COM_A的那个。如果你找不到可以在搜索框直接输7SEG出来的列表里看描述选Common Anode的。3.3 电源和地的处理Multisim里TTL芯片需要VCC和GND。74LS47的VCC是5VGND接地。在元件库里找Power Sources→VCC和GROUND分别放到电路里。这里有个细节Multisim的数字电路仿真VCC和GND是隐含连接的也就是说你不需要把VCC引脚和电源符号连起来软件会自动处理。但为了电路图清晰建议还是显式连上方便检查。输入端的BCD码我们用Interactive Digital Constant或者Word Generator来给。简单起见用4个单刀双掷开关一端接VCC一端接GND中间接输入引脚。这样手动拨开关就能改变输入码。4. 从零搭建0-8显示电路的完整实操4.1 第一步放置芯片和数码管并连线先把74LS47D拖到工作区中间数码管放在它右边。然后开始连线74LS47的引脚7A接开关1引脚1B接开关2引脚2C接开关3引脚6D接开关4引脚16VCC接VCC符号引脚8GND接GROUND符号引脚3LT接VCC灯测试无效正常译码引脚4BI/RBO接VCC消隐无效引脚5RBI接VCC行消隐无效输出端引脚13a接数码管的a段引脚12b接数码管的b段引脚11c接数码管的c段引脚10d接数码管的d段引脚9e接数码管的e段引脚15f接数码管的f段引脚14g接数码管的g段数码管的公共端接VCC。实操心得Multisim里数码管的段引脚标注可能和74LS47的输出引脚号不对应连线的时候看网络标号不要看位置。如果连错了显示的数字会缺段或者多段这时候对照真值表逐段排查。4.2 第二步设置输入开关和仿真参数四个开关分别控制A、B、C、D。开关一端接VCC一端接GND中间抽头接输入引脚。这样开关拨到上输入是高电平1拨到下输入是低电平0。在Multisim里开关的默认状态可能是开的你需要双击开关设置初始状态。为了演示0到8我们按顺序设置显示数字DCBA十进制000000100011200102300113401004501015601106701117810008仿真设置里把Simulate→Analyses and Simulation→Interactive Simulation打开然后点运行按钮。拨动开关数码管应该跟着变。4.3 第三步验证0到8的显示效果逐个拨开关验证0000显示0所有段除了g都亮0001显示1b和c亮0010显示2a、b、d、e、g亮0011显示3a、b、c、d、g亮0100显示4b、c、f、g亮0101显示5a、c、d、f、g亮0110显示6a、c、d、e、f、g亮0111显示7a、b、c亮1000显示8所有段都亮如果某一段不亮或者常亮先检查连线再检查数码管是共阳还是共阴。共阳数码管接74LS47公共端必须接VCC如果误接地整个管子都不亮。注意Multisim里数码管的亮度是模拟的低电平驱动时可能会显示为灰色而不是亮红色这是正常的看段的状态就行。4.4 第四步加入自动循环计数功能手动拨开关只能验证译码逻辑要让它自动从0数到8需要加一个计数器。74LS160是十进制同步计数器输出正好是BCD码可以直接接74LS47的输入。把74LS160的Q0到Q3分别接74LS47的A到D74LS160的CLK接一个脉冲源比如Function Generator或者Clock Voltage Source频率设1Hz。74LS160的ENT和ENP接VCCLOAD和CLR接VCC这样它就会在0到9之间循环计数。但我们要的是0到8不是0到9。74LS160是模10计数器到9之后回0。如果你只想显示0到8可以在9的时候让RCO输出触发一个逻辑把计数器复位。不过对于演示来说0到9循环也能接受9的显示是a、b、c、d、f、g亮e段灭。实操心得74LS160的RCO在计数到9时输出高电平可以用这个信号经过一个非门去控制CLR实现模9计数。但74LS160的CLR是异步的会有毛刺实际工程里更推荐用74LS162同步清零。5. 常见问题排查与避坑指南5.1 数码管完全不亮怎么办先查三件事电源有没有接、公共端有没有接对、LT和BI引脚有没有接高电平。74LS47的LT是灯测试低有效。如果你把它接地了所有段都会强制点亮显示一个“8”。BI是消隐低有效接地的话所有段熄灭。RBI是行消隐输入接地的话在输入为0000时会消隐显示空白而不是0。所以正常工作时LT、BI/RBO、RBI都应该接高电平。很多人从datasheet上看到这些引脚就懵了其实记住一句话不用这些功能就全部拉高。5.2 显示的数字缺段或者多段这种情况九成是段线接错了。74LS47的a到g输出对应数码管的a到g段但数码管的引脚排列不一定是按顺序来的。比如3611BS数码管它的引脚图里a段可能在左上角g段在中间和芯片输出的物理位置不对应。解决办法拿万用表测数码管找出每个段对应的引脚然后对照74LS47的输出重新连线。在Multisim里直接看数码管模型的引脚标号标号a就接芯片的a输出。5.3 输入超过9会怎样74LS47对1010到1111的输入不会消隐而是输出一些无意义的段组合。比如1010会显示一个类似“d”的形状1011显示“E”的变体。这是74LS47和74LS48的一个关键区别74LS48在这些输入下会全部熄灭。如果你需要消隐功能要么换74LS48配共阴数码管要么在输入超过9时用逻辑门强制BI拉低。5.4 Multisim仿真报错“Timestep too small”这是Multisim数字电路仿真常见的问题通常是因为电路里有悬空节点或者反馈环路。检查所有输入引脚有没有确定电平不能悬空。74LS47的LT、BI、RBI如果没接Multisim会报错。另外数码管的模型如果设置不对比如共阳的接了共阴的驱动也会导致仿真不收敛。把数码管换成正确的模型或者加一个1kΩ的上拉电阻。5.5 实物搭建时数码管亮度不均仿真里看不到亮度问题实物上很常见。因为74LS47的输出电流有限每个段大约8mA如果数码管段压降不一致亮度就会有差异。解决办法是在每个段输出串一个限流电阻通常220Ω到470Ω根据数码管额定电流算。计算过程假设数码管段压降2V74LS47输出低电平0.4V电源5V那么电阻上的压降是5 - 2 - 0.4 2.6V。如果想要的段电流是10mA电阻就是2.6V / 10mA 260Ω取标准值270Ω。注意74LS47的输出是开集电极结构可以吸收较大电流但拉高能力很弱。所以它只能驱动共阳数码管不能直接驱动共阴数码管除非加下拉电阻但那样亮度会很差。6. 从0-8显示电路延伸出去的几个实用方向6.1 用74LS160加74LS47做0-9循环计数器把74LS160的Q0-Q3接74LS47的A-D74LS160的CLK接555定时器产生的脉冲就能做一个0到9的循环计数器。555的频率决定计数速度公式是f 1.44 / ((R1 2R2) * C)。比如R110kR2100kC10uF频率大约是0.68Hz差不多1.5秒跳一次。这个电路在数字钟、计时器、产量计数器里都是基础模块。74LS160负责计数74LS47负责译码数码管负责显示三颗芯片各司其职比单片机方案更抗干扰。6.2 多位数码管的动态扫描思路单个74LS47只能驱动一位数码管。要显示多位有两种方案一种是每位配一个74LS47成本高但简单另一种是动态扫描用74LS138译码器选择位74LS47输出段码轮流点亮每一位利用视觉暂留形成多位显示。动态扫描的关键是刷新频率要大于50Hz否则会闪烁。假设4位数码管每位刷新时间1ms一轮4ms频率250Hz完全够用。但74LS47的响应时间大约100ns远快于扫描速度所以没问题。6.3 和单片机方案的对比用STM32或者51单片机控制数码管优点是灵活可以显示任意字符、做动画、调亮度。缺点是占用CPU资源程序跑飞了显示就乱了。74LS47方案是纯硬件上电就工作不需要初始化不怕死机。在工业现场很多老设备还在用74LS47因为维护简单坏了直接换芯片不需要重新烧程序。学单片机的人也应该懂这个不然遇到老设备就抓瞎。6.4 在Logisim里复现这个电路Logisim是另一个数字电路仿真软件更轻量。在Logisim里搭74LS47电路需要手动用逻辑门实现译码逻辑因为Logisim的库里没有74LS47。你可以根据真值表用与门、或门、非门搭出a到g的输出表达式然后接7段数码管。这个过程很锻炼逻辑化简能力卡诺图化简之后每个段大概需要3到5个门。虽然麻烦但能让你彻底理解译码器内部是怎么工作的。7. 我个人在实际操作中的几点体会搭这个电路最大的坑不在芯片本身而在数码管的选型和引脚识别。我见过太多人买了共阴数码管配74LS47然后问我为什么不亮。datasheet上写得清清楚楚但初学者就是不看或者看了不理解“低有效”和“共阳”之间的对应关系。另一个坑是Multisim的元件库版本差异。14.0和14.2的74LS47模型引脚号可能不一样有的版本把A和D的顺序标反了。遇到这种情况不要怀疑自己的电路先查模型文档或者用逻辑分析仪看输入输出波形。最后说一个实用技巧在Multisim里搭好电路后用Simulate→Analyses→DC Operating Point分析一下各节点电压。如果某个输出引脚电压在2.5V左右说明它处于高阻态或者冲突状态正常应该是0V或5V。这个分析方法比肉眼观察数码管靠谱得多。实物搭建的时候电源去耦电容不能省。74LS47的VCC和GND之间并一个0.1uF的瓷片电容能滤掉大部分高频干扰。我试过不加电容数码管在电机旁边会乱跳加了之后就稳了。这个细节仿真里体现不出来但实物上很关键。
返回列表