
自己手里那块做了一半的面包板可以说是我这几年搭过最啰嗦、也最“涨功力”的小东西。如果你觉得数字电子钟就应该是单片机定时器加数码管扫描那这套用 74LS390 和 CD4060 搭出来的纯逻辑方案可能会让你先皱眉头再真香。CD4060 负责把晶振的高频信号一级一级分频成秒脉冲74LS390 负责把这些脉冲按 60 进制和 12 或 24 进制累加最后用七段译码器把二进制数据变成数码管上的数字。全程没有一行代码你看到的每一毫秒都是硬件信号在引脚上真实流动。这篇文章就把整个设计拆开讲从时基、计数、显示到面包板接线和调试踩坑一次说完。1. 为什么是这两颗芯片不用单片机反而更麻烦也更值得做1.1 纯逻辑方案和单片机方案的分工差异很多人一听到“电子钟”三个字第一反应就是 STM32、ESP32 或者 51 单片机。写个定时器中断每秒让变量加一再查表刷新数码管半天功夫就能跑起来。这种方案的优势谁都不能否认但它把最关键的东西藏起来了时间到底是怎么变成“一秒”的单片机里你看到的是一个寄存器或一个变量底层振荡器、分频、进位这些东西对多数人来说是黑盒。74LS390 和 CD4060 这套方案的思路恰恰相反。CD4060 本身是一个带振荡器的 14 级二进制计数器你给它一个晶振频率它就能从不同输出脚得到不同频率的方波74LS390 则是双十进制计数器里面藏着可以独立使用的除 2 和除 5 计数器组合起来能实现除 10、除 6、除 60。你要做的事情就是把这些模块一级一级串起来让信号按你规定的节奏往下走。听起来更麻烦但正是这份麻烦让人学到东西。搭完以后你能指着板子上的某根线说这地方就是秒进位这地方就是分钟进位。单片机能给你的结果给不了这种对电路本身的体感。1.2 两个芯片的分工谁产生脉冲谁数脉冲这套电子钟可以拆成三块功能时基部分CD4060 配合 32.768kHz 晶振产生稳定的高频振荡再分频成低频脉冲计时部分若干片 74LS390 负责对秒脉冲计数满 60 秒向分进位满 60 分向小时进位显示部分把计数器里的 BCD 码送给译码器驱动六个数码管。如果你只想要一个能动的电子钟单片机显然更省事。但如果你想理解“进位”在硬件层面究竟是怎么发生的、为什么会有毛刺、为什么老电路图上要在某些地方加个电容——这套方案就是最好的实验场。而且这些芯片目前仍然很便宜几块钱一片电子市场或网购都很容易买到适合学生、爱好者和想补数字电路课的人。2. 时基电路CD4060 真正输出的是 2Hz不是 1Hz2.1 晶体振荡器输入为什么我不用 RC 振荡CD4060 内部自带振荡器支持两种接法一种是外接电阻电容也就是 RC 振荡另一种是外接 32.768kHz 晶振。很多入门教程为了省事直接用电阻电容来调接一个电位器慢慢拧拧到某级输出刚好 1Hz。这方法不是不行但时钟这东西有个致命问题RC 振荡频率会随着温度、电源电压和元件老化漂移。你今天调准了可能过两个小时一天就差好几秒。做个演示可以当计时工具不行。晶振方案就稳定得多。32.768kHz 是电子表里最常用的频率经过 15 次二分频正好得到 1Hz购买容易价格也低。我实际用的就是这种晶振两个脚分别接 CD4060 的振荡输入和振荡输出端每个脚再接一个 22pF 左右的负载电容到地。有些 CD4060 的版本在晶振两端还要并一个 1MΩ 到 10MΩ 的电阻帮助起振我的经验是接上更稳妥不起振的概率明显降低。2.2 CD4060 的分频关系Q14 输出是 2Hz不是 1HzCD4060 是 14 级二进制纹波计数器意思是从振荡输入开始每一级输出频率是前一级的二分之一。第 n 级输出的频率公式是f_out f_osc / 2^n14 级对应的就是 2^14 16384 分频。所以 32.768kHz 晶振经过 CD4060 之后Q14 脚输出的是32768 / 16384 2Hz这是很多人第一次搭的时候最容易懵的地方你以为 CD4060 能直接给出 1Hz实际上它给的是 2Hz。要从 2Hz 得到 1Hz还得再做一次二分频。这一步可以交给 74LS390。每片 74LS390 内部有两个独立计数部分每一部分都有一个除 2 计数器和一个除 5 计数器。取其中一个除 2 计数器把 CD4060 的 Q14 输出接到它的时钟输入输出端就能得到 1Hz 方波。这样做的好处是物尽其用反正后面计时也要用 74LS390顺带把分频的工作也做了。2.3 如何验证 1Hz 是否真的出来了在继续搭计数链之前强烈建议先验证时基。最笨也最直观的方法用三极管搭一个简单驱动或者直接用一个高阻耳机听1Hz 的信号会发出“嗒、嗒”的响声。如果你手头有示波器直接看波形一个 1Hz 方波高电平约 2.5V 以上边沿干净就行。如果没有示波器可以把 1Hz 信号接到一个 LED 上加个三极管或缓冲器肉眼应该能清楚看到每秒闪一次。这里有一个小坑CD4060 是 CMOS 芯片直接驱动 LED 的话电流能力有限加上限流电阻后亮度可能不够。我习惯用一个 10kΩ 电阻把信号接到 NPN 三极管基极三极管集电极接 LED效果稳定而且不影响后面计数电路。3. 计数链用 74LS390 搭出模 60 和模 12/243.1 一片 74LS390 里藏着两个十进制计数器74LS390 的型号里“LS” 代表低功耗肖特基 TTL“390” 是双十进制计数器。芯片内部有两个互不干扰的计数单元每个单元又分成两部分一个除 2 计数器输入时钟输出 QA一个除 5 计数器输入时钟输出 QB、QC、QD。如果把 QA 连接到后一级除 5 计数器的时钟输入端就变成了标准的 BCD 十进制计数器输出 QA、QB、QC、QD 正好是 8421 码也就是 0 到 9 的二进制数。这个结构非常灵活。你不用把它当成一个固定十进制的黑箱它可以按需组合单独的除 2、单独的除 5、级联成除 10。后面做模 6 和模 12 时全靠这个灵活性。3.2 秒和分的模 60两种可用的接法秒计数器和分计数器的结构完全相同都是 0 到 59 循环。最常用的做法是把 74LS390 的一个单元用作个位十进制计数另一个单元用作十位计数但十位不是直接数到 9而是到 6 就复位回 0。个位部分很容易1Hz 秒脉冲接到除 2 计数器的时钟输入QA 接到除 5 计数器的时钟输入这样 QA、QB、QC、QD 就形成一个 0 到 9 的计数器。十位部分就有讲究了。很多人以为把十位也接成十进制然后让它在 0 到 5 之间计数就够了实际上芯片自己不知道“到 5 就该停”。你要用一个逻辑门去检测它的状态当它等于 6 时产生一个瞬间的高电平或低电平把它清零。这就是所谓的模 6。具体接法可以这样理解十位同样先接成十进制计数器但它的清零端接一个“检测到 QB 和 QC 同时为高”的组合逻辑。因为二进制 6 是 0110QB 和 QC 都为 1 的时候就说明到了 6。把这两个信号用一个小型与门处理后接到清零端计数到 6 的一瞬间就会被拉回 0。由于这个 6 状态存在时间极短正常显示时你不会看到它。3.3 进位信号别乱接十位最高位不是一个好时钟这是我在调试中踩得最深的一个坑。秒个位和秒十位之间进位怎么接表面上看个位从 9 变 0 时最高位 QD 会从高电平变低电平这是一个下降沿可以用它去触发十位计数器的时钟。但十位向分钟进位的时候情况完全不一样。十位数的是 0 到 5如果它也走十进制然后强制复位它的最高位在 0 到 5 这个区间里根本不翻转。你不能指望从十位最高位拉一根线出来当分钟时钟那样分钟计数器会一动不动。正确的做法是把十位被复位时产生的那个短暂“6 状态”拿来当进位脉冲。当十位到达 6 被清零的瞬间复位信号线上会出现一个极窄的脉冲把这个脉冲送到分钟个位的时钟输入分钟就能每 60 秒进一次。但这个脉冲实在太窄而且异步复位过程中可能有毛刺直接接过去偶尔会丢脉冲。我在实际电路里会在进位线上加一个小阻容滤波或施密特整形比如串一个 1kΩ 电阻对地接一个 1nF 电容让脉冲稍微变宽变干净再送给下一级。这么处理后分钟计数基本不会乱跳。3.4 小时计数器12 小时制还是 24 小时制小时部分同样用 74LS390只是进制不同。12 小时制显示 1 到 1224 小时制显示 0 到 23。无论哪种检测和复位思路一致。24 小时制时小时个位是十进制小时十位只需要在 0、1、2 之间切换。当十位等于 2 且个位等于 4 时说明已经到 23:59:59 之后的下一个状态也就是 24:00这时把小时计数器全部清零回 0。检测“十位为 2 且个位为 4”需要一个与门常见做法是使用 74LS08 这类四重与门芯片或者自己用分立二极管搭一个。12 小时制则更复杂一点点。通常在 12:59:59 之后再走一秒应该是 01:00:00所以有些设计在检测到 12 点时会先复位到 1而不是 0。这个选择取决于你的个人习惯。我自己的板子用的 24 小时制因为复位到 0 的逻辑最简单不需要多处理一个“从 1 开始”的特例。下表是我搭的计数链信号流向可以作为接线时的速查信号从哪来接到哪去CD4060 Q14 输出74LS390 除 2 计数器输入变成 1Hz1Hz 秒脉冲秒个位 CLK秒个位 QD秒十位 CLK秒十位复位脉冲分个位 CLK分个位 QD分十位 CLK分十位复位脉冲小时个位 CLK小时十位 个位检测小时计数器复位端这个结构看起来简单实际接线时要注意每一条线的去向尤其不要把个位和十位的时钟接反否则秒表会以 10 秒而不是 60 秒为周期跳动。4. 显示与驱动BCD 到七段的那层“翻译”4.1 CD4511 和 74LS47到底选哪个计数器里保存的是 8421 BCD 码也就是四个二进制位分别代表 8、4、2、1。数码管则需要七段笔画来显示数字所以中间必须有译码器把 0000 到 1001 翻译成对应的段码。市面上最常见的七段译码器有两类。CD4511 是 CMOS 芯片输出高电平驱动适合共阴数码管也就是数码管公共端接负极、段引脚给高电平才亮74LS47 是 TTL 芯片输出低电平驱动适合共阳数码管公共端接正极、段引脚拉低才亮。选型的第一条准则就是看数码管是共阴还是共阳。这个搞错了显示效果不是暗就是段位全乱。比如你用 CD4511 去推共阳数码管LED 两端电压方向不对数字根本亮不起来。反过来用 74LS47 推共阴数码管也多半不工作。第二条准则是看驱动能力。CD4511 的段驱动电流通常不大直接接数码管时每段最好串一个 220Ω 到 470Ω 的限流电阻否则亮度可能偏暗。74LS47 的灌电流能力相对强一些但同样需要限流电阻阻值可以取得稍微小一点。4.2 共阴和共阳的接线差别以 CD4511 加共阴数码管为例接线大概是这样的CD4511 的 A、B、C、D 四个数据输入脚分别接 74LS390 输出的 QA、QB、QC、QDCD4511 的 LE 锁存端必须接地否则显示会被锁存住不更新CD4511 的 LT 灯测试端接高电平或悬空BI 消隐端接高电平七段输出 a 到 g 各串一个电阻接到数码管的对应段引脚数码管的公共端接 GND。如果是一块 6 位数码管那就是每个数码管都用一片 CD4511前面计数器的输出并行接到所有译码器相应位。比如所有秒个位的 QA 都接到第一片 CD4511 的 A所有秒十位的 QA 都接到第二片 CD4511 的 A以此类推。这里有个容易忽略的小问题CD4511 没有小数点驱动能力如果你要在时分秒之间显示两个冒号或小数点需要单独用 LED 和限流电阻接出来最好由 1Hz 信号驱动闪烁看起来更像真正的电子钟。4.3 为什么我建议静态驱动而不是动态扫描数字钟的显示有静态和动态两种方式。静态就是每位一个译码器接线多但稳定每一位都在持续点亮。动态扫描则是所有段线共用一套译码器靠快速轮流点亮每一位来骗过人眼接线少但单片机或专用扫描芯片更容易实现。在这套纯逻辑方案里我强烈建议用静态驱动。原因是 74LS390 的输出是并行 BCD 码每个时刻都有确定的值静态译码器直接就能显示。如果要做动态扫描还得额外加多路复用开关和扫描时序复杂度一下就上去了没必要。静态驱动唯一的缺点就是芯片数量多六位数码管需要六片 CD4511每个数字还有七个限流电阻面包板上会拉出很多线。但只要按顺序接稳定度非常高几乎不用调。5. 面包板接线参考从电源到显示器的完整信号流5.1 电源部分先保证 5V 干净整套电路用量比较大工作电压统一用 5V。最简单的方式是找一个 9V 或 12V 直流电源经过 7805 稳压得到 5V。7805 输入输出都要加电容输入端 100µF 电解电容并联 100nF 瓷片电容输出端同样加 100µF 和 100nF这样可以滤掉电源线上的低频纹波和高频噪声。更讲究一点在每个芯片的电源脚附近都放一个 0.1µF 去耦电容。这一点在纯逻辑电路里特别重要。计数器在翻转瞬间会有冲击电流如果去耦不足电源电压会出现瞬时跌落表现就是莫名其妙的进位丢失或数字乱跳。我刚开始图省事没加去耦结果秒计数经常从 5 直接跳到 9排查了很久才发现是电源噪声。5.2 分模块接线顺序先点灯再跑数面对一堆芯片和面包板最容易犯的错误是一口气把所有线都插上结果出了问题完全不知道从哪里查。我建议按下面顺序分开搭先搭 CD4060 时基确认 1Hz 输出再搭一个 74LS390 的秒个位用一个小按钮手动给脉冲看数字能不能从 0 走到 9加上秒十位看能不能走到 59 并自动归零分钟部分完全复制秒部分确认 60 秒进位小时部分单独搭先用手动脉冲测试 12 或 24 进制归零逻辑最后把所有显示译码器接上看最终六位数是否正确。这个顺序的好处是每一步都能单独验证。如果直接全部接完再上电一旦出错你就要面对几十根线排查难度指数级上升。5.3 文字版接线单和画电路图等效的参考下面是整机信号流向的核心接线单按这个接基本就能跑起来。具体芯片引脚编号以你手头数据手册为准我用功能名表示。CD4060 的两个振荡脚接 32.768kHz 晶振各脚再接 22pF 电容到地复位脚接地CD4060 的 Q14 输出接 74LS390-A 的除 2 时钟输入74LS390-A 的除 2 输出接到秒个位十进制计数器的时钟输入秒个位串联成十进制输出 QA、QB、QC、QD 同时接到秒十位时钟和第一片 CD4511 数据输入秒十位也接成十进制检测到 6 时产生复位和进位脉冲该进位脉冲接到分个位时钟分、秒结构相同小时部分独立搭模 12 或模 24所有译码器数据输入来自对应计数器 BCD 输出段输出串电阻后接数码管。这个接线单本质上就是电路图的另一种表达。你拿笔画图时也只需要按照这几条主信号线把各芯片串起来再在各芯片电源脚加上去耦电容即可。5.4 面包板走线的三个小技巧第一地线尽量用一根公共的粗线或面包板的地轨完整贯穿。不要东接一段西接一段否则很容易形成地环路导致信号参考电位不一致。第二时钟信号线和进位线不要和数码管的段驱动线并排走太长距离。段驱动线上的电流变化比较大容易耦合到时钟线上形成毛刺。如果不得不交叉尽量垂直交叉避免平行长距离。第三用颜色区分信号类型。我喜欢红色接电源、黑色接地、黄色走时钟信号、蓝色走 BCD 数据、绿色走显示段。时间一长你回头看板子就能知道哪里出了问题。6. 调试手记走线毛刺、进位丢失和“数字乱跳”的排查6.1 先看时基别急着查计数故障现象是数码管不走或者全部停在同一个数字。很多人会花很长时间检查计数器其实问题可能出在最前面的 1Hz 脉冲上。排查方法是把示波器表笔或逻辑分析仪探针直接点在 CD4060 的 Q14 输出上理论上应该看到 2Hz。如果这里没有信号大概率是晶振没起振检查晶振两脚有没有接反、负载电容是否过大或过小、复位脚是否被悬空。CD4060 的复位脚千万不能悬空噪声可能随机触发复位让输出完全乱掉。如果没有示波器就把 1Hz 信号临时接到 LED 上眼睛看闪不闪。如果 1Hz 正常但计数器不走再查 74LS390 的时钟输入和清零端。6.2 计数乱跳、进位丢失九成是电源和毛刺问题我遇到的另一个高频问题是秒个位从 0 一直跳到 9再到 0 的时候分钟没有进 1或者数字从 5 一下子跳到 9中间像穿过了一片噪声。这类问题基本可以按下面顺序排查检查每个芯片电源旁有没有 0.1µF 去耦电容检查进位线是否太长是否靠近段驱动线在进位线上加一个小 RC 滤波比如 1kΩ 串接、1nF 对地如果还是乱跳把 74LS390 的地线单独走一条避免和数码管回流地共用。这些看似不起眼的细节在纯逻辑电路里影响非常大。数字芯片对电平有明确的阈值但毛刺只要在阈值附近来回穿越就可能被当成多个时钟脉冲导致计数一次跳好几格。6.3 显示缺笔画或多位数先查译码器而不是数码管数码管显示缺笔画最常见原因是 CD4511 的某个段输出到数码管之间的电阻虚接或断路。如果是同一根段在所有数字下都不亮那问题在公共的段驱动线或译码器本身。如果是单个数字缺笔画那多半是这个数码管的某个段引脚虚接。还有一个容易被忽略的情况CD4511 的 LE 端如果不小心接到高电平它会把当前数据锁存住导致数字半天不更新看起来像卡死。记住把 LE 接低电平或直接接地。6.4 手动单步调试比上电跑数高效得多最后分享一个非常实用的调试方法别急着把 1Hz 直接接到计数器上先用一个自复位按钮做手动秒脉冲。每按一下计数器进一位。这样你可以慢慢观察个位从 0 到 9 的每一步检查进位是在哪一步丢的也能方便地测试分钟和小时逻辑。我搭这套电子钟时大部分时间都花在手动单步验证上。只要手动模式下跑得没问题接上 1Hz 后基本就是纯欣赏环节了。做了几次之后我最大的感悟是这种老式逻辑芯片方案虽然线多、芯片多但它把“时间计数”这件事变成了看得见摸得着的信号链。如果你也正好手里有 74LS390 和 CD4060或者单纯想体验一次不用固件做电子产品完全可以照着上面的思路搭一版。最后那一下六位数码管同时亮起、秒位稳稳跳动的时候那种满足感是单片机仿真软件给不了的。