ARTICLE DETAIL

资讯详情

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

74LS48显示译码器详解:从BCD码到七段数码管的完整电路方案

74LS48显示译码器详解:从BCD码到七段数码管的完整电路方案 我第一次用74LS48这颗显示译码器是给实验室的小型抢答器做计分显示。当时单片机引脚不够也没想去做软件查表就用这颗芯片把BCD码直接翻译成七段码4根数据线进去7根段线出来干净利落。虽然现在很多项目直接用单片机IO口扫数码管但74LS48这种硬件译码方案在电子入门、数字电路教学和老式仪表改造里依然是绕不开的经典。这篇文章我就从这颗芯片的核心原理说起配合完整电路图和接线表手把手带你搭一个能复现的LED数码管显示电路无论你是刚接触数字电路还是想快速做一个BCD显示板都能直接用上。1. 为什么用显示译码器74LS48能解决什么问题1.1 直接用单片机驱动数码管的三个麻烦我见过不少新手一开始就直接用单片机IO口点亮数码管做法是把7个段分别接单片机引脚再写一个查表函数把数字转成段码。这种方式做一两位还行做到四位以上的时候问题就来了。第一个麻烦是IO占用太多。一位数码管要占7个引脚四位就要28个引脚普通单片机根本扛不住。第二个麻烦是驱动能力不足。单片机IO口直接点亮数码管经常出现亮度不够、数字一多就变暗的情况原因是IO口拉电流能力有限一般只有几毫安到二十毫安再多位数码管动态扫描时电流根本不够分。第三个麻烦是软件查表容易出问题。段码表写错一位某个数字就会显示成奇怪的样子排查起来相当痛苦。如果用74LS48这类显示译码器这些问题都可以绕开。74LS48只需要4个BCD码输入引脚输出端自带一定的驱动能力可以直接推动共阴数码管的段脚。硬件自动完成BCD到七段码的译码不需要软件维护真值表对数字电路入门和快速验证场景特别友好。1.2 74LS48和74LS47到底怎么选这是新手最容易买错的一步。74LS47和74LS48都是显示译码器看起来长得几乎一样但输出极性完全不同。74LS47是输出低电平有效和共阳数码管配合使用。共阳数码管的公共端接VCC段脚接低电平时对应的LED亮起正好用74LS47的灌电流来点亮。74LS48则是输出高电平有效和共阴数码管配合使用。共阴数码管的公共端接GND段脚接高电平时亮起用的是74LS48的拉电流。如果你把74LS48接到共阳数码管上通常的表现是完全不亮或者只有微弱的光。我遇到过很多次这种情况最后查来查去发现是极性不匹配。所以下单买芯片之前务必先确认你手里的数码管是共阴还是共阳。普通红色一位数码管型号里常见的5611AH是共阴5611BH是共阳但不同厂家命名规则不完全统一最稳妥的办法是拿万用表二极管档测一下。1.3 74LS48适合什么人、什么场景从应用场景来说74LS48适合这几类人正在学数字电路的学生需要理解“编码器—译码器—显示”这条经典链路74LS48就是最标准的教学样例。手头只有4根空闲IO的单片机开发者需要显示数字又不想做段码表的人用74LS48可以把译码工作丢给硬件。还有做老式仪表改造或者教材实验箱的工程师这类经典TTL芯片在维修和教学中存量巨大懂它会很有用。但74LS48也有局限。它只能显示数字和少量字母不能显示汉字、字母全表。它没有锁存器输入变化会立即影响输出做动态扫描显示的时候不如带锁存的芯片方便。如果你的项目只是静态显示0到9或者让单片机输出BCD码那74LS48完全够用。如果你需要多位动态扫描、字形更丰富建议去考虑CD4511或专用数码管驱动芯片。2. 芯片解剖74LS48的引脚、功能与真值表2.1 引脚定义速查表74LS48是16脚DIP封装电源电压建议5V属于TTL器件。面对芯片缺口朝上左下角是1脚按逆时针方向依次为1到16脚。引脚功能如下引脚号名称方向功能1B输入BCD码输入权值22C输入BCD码输入权值43LT输入灯测试低电平有效4BI/RBO输入/输出灭灯输入同时也是灭零输出5RBI输入灭零输入低电平有效6A输入BCD码输入权值17D输入BCD码输入权值88GND电源接地9d输出七段输出d段10c输出七段输出c段11b输出七段输出b段12a输出七段输出a段13g输出七段输出g段14f输出七段输出f段15e输出七段输出e段16VCC电源接5V电源这里有一个特别容易踩坑的细节BCD码的权值排列是D为最高位C次之B再次A为最低位对应8421码。接线的时候如果顺序搞错显示数字就是乱的。比如输入0001显示1如果D和A接反输入0001实际会显示8。我在搭电路的时候曾经把D和A接反测试0到9时数字错乱查了半天才注意到是高位低位顺序问题。2.2 三个特殊控制端LT、BI、RBI/RBO的含义74LS48除了基本的7段输出和BCD输入之外还有三个控制端初学者经常一头雾水这里把它们的逻辑讲清楚。LT是灯测试低电平有效。接低电平时无论BCD输入是什么7个段全部点亮用来测试数码管的每一段是否完好。正常显示时要把LT接高电平或者悬空处理悬空在TTL电路里尽量别用最好接高。BI/RBO是同一个引脚双向功能。当作输入用时BI是灭灯信号低电平有效接到低电平时所有段输出为低电平数码管全灭。当作输出用时RBO是灭零输出当本片处于灭零状态时这个引脚输出低电平用来通知下一位也执行灭零操作。RBI是灭零输入低电平有效。当RBI为低、BCD输入为0000时数码管显示为空白而不是0。这个功能在多位数码管显示中特别有用可以消除前导零。比如显示0123时我们希望显示“123”而不是“0123”就可以用RBI把最高位的零熄灭。如果RBI为高即使输入为0000也正常显示0。所以如果只是驱动一位数码管通常把RBI接高或通过上拉电阻接VCC避免它意外熄灭显示。2.3 从真值表看懂BCD到七段字的映射74LS48内部是一个组合逻辑电路输入DCBA四位BCD码输出abcdefg七段信号。为了让你有一个直观的印象我把0到9这十个数字的段状态列出来1表示该段亮0表示该段灭。BCD输入 DCBA显示数字abcdefg000001111110000110110000001021101101001131111001010040110011010151011011011061011111011171110000100081111111100191111011如果你是第一次看这张表可以这样理解七段数码管从上到下分别是a、b、c、d、e、f、g数字0显示时a到f亮g不亮所以g标0。这种“硬件查表”正是74LS48存在的最大意义——把这张真值表固化在芯片里我们就再也不用在软件里维护它了。当BCD输入大于1001也就是输入1010到1111时芯片会输出一些无标准数字意义的字形有的厂家显示类似字母E、H、L、P的图形有的直接熄灭不同批次可能不太一样。在实际计数显示中不建议把这些状态当成固定字形使用做0到9的显示才是最可靠的用法。3. 完整电路图详解从面包板到原理图3.1 接线总览与材料清单搭一个单数码管显示电路本质上就是把电源、BCD输入、数码管、限流电阻和控制引脚按正确的方式连到74LS48上。我建议你在面包板上完成第一个版本成本低排查也方便。需要准备的材料如下74LS48芯片一片共阴数码管一位330Ω电阻7个0.1μF陶瓷电容1个10kΩ电阻若干4位拨码开关一个5V电源一个面包板和杜邦线若干。这里的330Ω电阻是给七段输出用的限流电阻每个输出端串一个。如果你手里只有470Ω也能用显示亮度会略低一些。10kΩ电阻用来做控制引脚的上拉保证LT、BI等引脚处于确定的高电平状态。3.2 电源与去耦为什么必须加0.1μF电容74LS48是TTL器件典型工作电压5V。VCC接16脚GND接8脚注意正负不能接反。很多新手第一次搭电路芯片不工作第一反应是芯片坏了结果一查是VCC和GND接反了芯片已经烧掉了。动手之前最好用万用表确认一下面包板的电源轨正负极。在VCC和GND之间尽量靠近芯片的位置接一个0.1μF的陶瓷电容这就是去耦电容。它的作用是滤除电源线上的高频噪声同时为芯片瞬间电流提供就近储能。74LS48本身功耗不太高但这个电容是数字电路的基本习惯不加也能工作但加了一定更稳定。如果电源质量差或者旁边有继电器、电机等干扰源建议再并联一个10μF的电解电容。3.3 输入端的接法拨码开关和单片机两种方式BCD输入端D、C、B、A是普通的TTL输入端不能悬空。悬空时输入电平不确定可能造成显示乱码或闪烁。实际接法有两种。第一种是拨码开关方式。把四个拨码开关一端分别接D、C、B、A另一端接VCC同时每个输入脚加一个10kΩ下拉电阻到GND。开关闭合时输入为高电平开关断开时输入为低电平这样逻辑清晰。我在面包板上调试时习惯直接用这种方式因为不用写程序拨动开关就能验证每一个数字。第二种是单片机方式。如果你用5V单片机直接把4个IO引脚接D、C、B、A即可。如果用的是3.3V单片机需要注意TTL高电平阈值一般在2.0V左右3.3V高电平通常可以正常识别但如果单片机IO口驱动能力弱或者走线太长建议加一个简单的电平转换或缓冲。还有一个细节是BCD输入顺序。拨码开关从左到右按D、C、B、A的顺序排列也就是8421顺序这样拨码开关的数值才和显示数字直观对应。我见过有人把开关顺序接成A、B、C、D结果显示数字和开关位置完全对不上。3.4 输出端到数码管的连接与限流电阻输出端a到g分别通过330Ω电阻接到共阴数码管对应的段脚上数码管的公共端接GND。这里有一个关键点如果你用的是74LS48公共端必须接GND如果你误用了74LS47公共端要接VCC两者不能混。限流电阻怎么算红色LED的正向压降大概1.8V到2.0V74LS48输出高电平时不是严格5V在较大负载下输出高电平典型值大概3.4V左右。用欧姆定律估算流过LED的电流等于输出电压减去LED压降再除以限流电阻。如果限流电阻取330Ω电流大约在4到5毫安显示亮度在室内正常情况下够用。想更亮就换成220Ω想省电就保持330Ω或换成470Ω。实际操作中我的经验是先不着急确定电阻值把电阻插上后观察数码管的亮度如果数字显示清晰、没有刺眼感和明显发热这个阻值就合适。如果某个数字的段特别亮或特别暗优先检查对应段的电阻值和LED是否异常。3.5 控制引脚的连接LT、BI、RBI怎么接控制引脚的处理是很多人的盲区。正常显示时LT接高电平BI/RBO接高电平RBI接高电平。推荐每个控制引脚通过10kΩ电阻上拉到VCC这样逻辑电平明确抗干扰能力也更好。如果你不用灭零功能RBI直接接VCC让芯片在任何BCD输入下都正常显示。LT如果悬空TTL输入端可能会被噪声干扰导致偶发全亮所以老老实实上拉最稳妥。BI/RBO如果不用灭零级联也接VCC或上拉。这里还要提醒一个细节BI/RBO如果作为输出RBO使用它是开集电极结构必须外接上拉电阻才能保证输出高电平正常。这个我们放到多位数码管章节详细说。3.6 一个可以直接照着接的示意电路下面这个示意电路是按面包板逻辑画的不是真正的PCB图但照着这个思路连线完全没问题。VCC ──┬──────────────────────────────────────────┐ │ │ [10k] [10k] │ │ ├── 16脚VCC ├── 3脚LT │ │ │ 74LS48 │ │ ────────────── │ 拨码开关 ──┤── D ── 7脚 │ D a │──[330Ω]── a段 拨码开关 ──┤── C ── 2脚 │ C b │──[330Ω]── b段 拨码开关 ──┤── B ── 1脚 │ B c │──[330Ω]── c段 拨码开关 ──┤── A ── 6脚 │ A d │──[330Ω]── d段 │ │ e │──[330Ω]── e段 │ │ f │──[330Ω]── f段 │ │ g │──[330Ω]── g段 │ │ │ │ │ LT ← 3脚 │ │ │ BI ← 4脚 │ │ │ RBI ← 5脚 │ │ │ │ │ │ 8脚 GND │ ├── 8脚 GND ─┤ │ │ ────────────── │ GND 共阴数码管COM ── GND注意这个示意图里拨码开关另一端接VCC输入脚通过下拉电阻接GND图中为了简洁没有画出所有下拉电阻实际连线时每个输入脚D、C、B、A都要接一个10kΩ下拉电阻到GND。如果你的输入来自单片机而不使用拨码开关直接去掉下拉电阻把单片机GPIO接在对应引脚上即可。4. 手把手实操搭一个0到9拨码开关演示器4.1 第一步芯片定位与插线准备先把74LS48放到面包板上缺口朝上确定好1脚位置。然后把共阴数码管放在芯片旁边。插芯片的时候注意对准引脚不要插歪很多面包板接触不良都是芯片引脚没有完全压进面包板导致的。插好之后先用万用表确认一下面包板电源轨的正负极避免后面接错。5V电源的正极接到面包板的一侧电源轨GND接到另一侧电源轨。如果电源轨上有多个插孔建议用万用表直接测一下各插孔之间的连通性。4.2 第二步按接线顺序完成连接我习惯按“电源→控制引脚→输入→输出→数码管”的顺序逐步接线每完成一部分就用万用表或肉眼检查一下方便定位问题。先接电源。16脚VCC接5V正极8脚GND接GND。在VCC和GND之间接0.1μF陶瓷电容尽量靠近芯片。再接控制引脚。3脚LT通过10kΩ电阻接VCC。4脚BI/RBO通过10kΩ电阻接VCC。5脚RBI通过10kΩ电阻接VCC。这三个引脚全部上拉保证芯片处于正常显示状态。然后接输入。拨码开关的4个公共端分别接VCC另外4个输出端分别接D、C、B、A。每个输入脚接10kΩ下拉电阻到GND。注意顺序第一个开关对应D第二个对应C第三个对应B第四个对应A。最后接输出。12脚a通过330Ω电阻接数码管a段11脚b通过330Ω电阻接b段10脚c接c段9脚d接d段15脚e接e段14脚f接f段13脚g接g段。数码管的公共端COM接GND。4.3 第三步上电测试与验证全部插好后先不要急着拨开关检查一遍所有连线尤其是电源正负极和BCD输入顺序。确认无误后上电。初始状态四个开关全断开BCD输入全为0数码管应该显示0。如果显示不对第一步看电源指示灯第二步用手摸芯片温度第三步检查输入引脚电平。接下来依次闭合开关验证显示数字。只闭合A对应开关显示1。只闭合B对应开关显示2。同时闭合A和B显示3。按这个规律继续验证4到9。如果某个数字显示错误比如显示2变成了3多半是BCD输入顺序接错或某根导线插错位置。如果所有数字都不亮先检查数码管公共端是否接地再检查330Ω电阻是否真的接通了。4.4 第四步扩展成自动计数器或单片机联动拨码开关验证成功之后可以把输入从拨码开关换成74LS90十进制计数器或者直接接单片机GPIO。用74LS90时把74LS90的Q0到Q3分别接74LS48的A、B、C、D给74LS90一个时钟脉冲数码管就会自动循环显示0到9。时钟可以用555定时器产生也可以用一个按键手动触发。这样你就拥有一个最简单的数字计数显示系统非常适合理解“计数→译码→显示”的完整链路。如果用单片机则只需4个IO口输出BCD码。想显示几就输出对应的四位二进制。这种方案比直接用单片机七段扫描省了3个IO口也省了段码表适合对实时性要求不高的显示场景。5. 多位数码管显示与灭零功能的正确用法5.1 多位显示怎么接线单个数码管只能显示0到9想显示两位数或更多就需要多个74LS48并联工作。每一位数码管对应一个74LS48所有芯片的BCD输入并联到同一组数据线上但每一位的显示内容由这一位的BCD输入决定。显示两位数时把两个74LS48的D、C、B、A都并联到4根数据线上每一位的数据由这4根线共同控制。这意味着两位显示内容相同因为它们的输入完全相同。要让两位显示不同的数字需要分别为每一位提供独立的BCD数据比如用两个独立的4位输出端口驱动两位数码管。比较省IO的做法是使用动态扫描但74LS48没有锁存功能扫描频率不够高时容易显示闪烁所以我更推荐在需要多位静态显示时使用带锁存的译码器或者给74LS48外接锁存器。这只是多位数码管的一种方案具体取舍要看你的项目需求。5.2 RBI/RBO级联实现前导零熄灭多位数码管显示时如果数值不足位数比如显示0023我们一般希望显示成23前面的零自动熄灭。这就是灭零功能的用途。灭零级联的接法是最高位的RBI接低电平最高位的RBO接次高位的RBI依次往下。当最高位数码管的BCD输入为0且RBI为低时它不显示0同时通过RBO输出低电平让下一位也允许灭零。如果下一位输入也是0就继续把灭零信号传给再下一位。遇到第一个非零数字时RBO输出高电平后续位就正常显示0。这样说可能有点绕我举个三位显示的例子。显示“005”时最高位输入0且RBI为低灭零并输出低第二位输入0且RBI为低灭零并输出低第三位输入5且RBI为低但输入不是0所以正常显示5。最终看到的是“5”。显示“100”时最高位输入1不是0正常显示1同时RBO输出高第二位和第三位的RBI为高因此即使输入为0也正常显示最终看到“100”。这两个例子基本把灭零逻辑讲清楚了。5.3 RBO为什么需要外接上拉电阻我调试灭零功能时踩过一个坑RBO信号电平不正常级联灭零时好时坏。后来查资料才发现74LS48的RBO是开集电极输出必须外接上拉电阻才能输出正确的高电平。如果你把RBO直接接到下一级的RBI而不加上拉电阻那么RBO为高电平时实际上是开路状态下一级RBI的电平由漏电流决定可能被误判为低电平导致不该熄灭的位也熄灭了。解决方案很简单在RBO和VCC之间接一个2.2kΩ到10kΩ的上拉电阻然后再接到下一级RBI信号就稳定了。这里也提醒一下RBO和BI在同一个引脚上它是一个输入输出复用的引脚。做正常显示时把它当输入用接高电平做灭零级联时把它当输出用接上拉电阻。两种用法不要搞混。6. 常见问题与排查实录6.1 数码管完全不亮数码管一颗段都不亮优先检查电源、极性、公共端和芯片方向。用万用表测芯片16脚是否有5V8脚是否接地。如果VCC和GND接反芯片会发热这种情况下芯片可能已经损坏换一片再试。然后检查数码管公共端是否接GND。共阴数码管的公共端可能有多个引脚需要把公共端全部接到GND漏接一个也会导致部分段不亮。再用万用表二极管档直接测试数码管好坏黑表笔接公共端红表笔依次碰段脚对应段应该点亮。如果不亮说明数码管有问题。最后检查74LS48的LT引脚。LT接了低电平时无论输入是什么所有段都会亮。如果LT悬空也可能出现偶发全亮或不亮的情况。所以LT必须接高电平或通过上拉电阻接VCC。6.2 显示乱码、数字顺序错乱显示乱码最典型的原因是BCD输入顺序接反。D是最高位A是最低位如果D和A对调输入1会显示8输入2会显示4整个数字顺序全部打乱。建议用标签把D、C、B、A标在杜邦线上尤其是多路接线的时候。另一个原因是输入引脚悬空。TTL输入端悬空时电平不确定可能被人体或周围导线感应导致显示随机乱跳。解决方法是确保每个输入引脚都有确定的电平要么接开关和下拉电阻要么接单片机GPIO不要留空。如果只是某一段一直亮或不亮先查该段对应的输出引脚和限流电阻再用万用表二极管档测试数码管该段是否损坏。6.3 亮度不均匀或偏暗七段数码管显示亮度不均先检查限流电阻是否都一致。如果某个段的电阻和其他段不同该段亮度就会有差异。另外74LS48输出高电平时内部有上拉结构实际驱动电流有限如果数码管本身是低亮款式整体就会偏暗。更亮的做法是减小限流电阻阻值但不要小于100Ω否则电流过大可能损伤芯片和数码管。也可以换用高亮数码管或者给输出端加晶体管扩流。我在实际项目中一般会先用220Ω电阻测试如果亮度合适就用这个值不够就再调整。还有一点容易被忽略74LS48是高电平有效只能驱动共阴数码管。如果你手里是共阳数码管接上去几乎不亮不是电阻问题而是极性错误。换用74LS47或改接共阴数码管才能解决。6.4 段码微亮、鬼影闪烁显示数字时本该熄灭的段有一点点亮或者整个数码管闪烁多半是输入电平不稳定。74LS48是TTL器件输入端悬空或者上拉电阻过大时引脚电平容易被干扰导致输出端状态不稳定。解决方法是把上拉电阻值控制在10kΩ以内输入信号线尽量短不要和电源线长距离并行。拨码开关的触点氧化也会导致接触不良表现为数字偶尔跳变可以通过快速拨动几次或者更换开关来排查。如果闪烁发生在多位动态扫描场景说明扫描刷新率不够。74LS48没有锁存功能扫描频率最好高于60Hz而且每一位点亮时间要充足。不过我还是要再次建议动态扫描主推带锁存的CD451174LS48更适合静态显示。6.5 灭零功能失灵灭零功能接好后前导零不熄灭或者不该灭的零也灭了先检查RBO上拉电阻。RBO是开集电极输出不加外部上拉就会出现电平不确定这是最容易被忽略的坑。再检查级联方向。灭零信号是从高位向低位传递的最高位的RBI接低电平高位RBO接低位RBI接反了功能肯定不对。如果RBI悬空或者意外接低即使不是前导零也会出现0不显示的情况。6.6 快速排查表现象优先检查点常见原因全不亮电源、GND、公共端VCC/GND接反、公共端未接地全亮不变LT引脚LT接了低电平处于灯测试状态数字错乱BCD输入顺序D与A接反、输入引脚悬空某段不亮对应段输出电阻电阻虚焊、数码管段损坏亮度偏暗限流电阻阻值电阻太大、驱动电流不足闪断输入干扰、电源不稳引脚悬空、去耦电容缺失灭零失灵RBO上拉电阻开集输出未加上拉、级联方向接反7. 我的几点使用心得与建议每次搭74LS48电路我都会在拨码开关上贴好D、C、B、A的小标签这帮我避免了很多次顺序接反的低级错误。还有一个小技巧测试数码管之前先把LT引脚瞬间接一下GND如果7段全亮说明数码管和输出端基本正常后面排查输入逻辑就更有针对性。如果你打算长期做数字电路实验可以多备几片74LS48和74LS47两者引脚兼容只要注意共阴共阳的区别就能互换使用。限流电阻建议买整包的330Ω或220Ω厚膜电阻阻值稳定颜色统一后期排查也方便。最后再提一句做之前先用Proteus或Multisim仿真跑通一遍电路能省掉不少实物调试的时间尤其是验证灭零级联这类容易出错的逻辑。把这些细节处理好这颗老芯片用起来依然相当顺手。
返回列表