【核心结论】数码管自己不会亮,得靠单片机往段脚送高低电平。位数一多,段脚加位选脚就把 IO 占满了,所以有了两条省引脚的路子。TM1637 用两根线走类 i2c 协议,自带扫描和限流,接上就能用。74HC595 是移位寄存器,一颗扩 8 路,级联能带更多,扫描程序得自己写。选哪个看你要几位、板子上已经用了啥。
)
前阵子一个做小电子钟的朋友找我,他把一块四位数码管段脚位选脚全接到 Arduino 上,数了数用了 12 个 IO,结果温湿度传感器、按键全挤不下了。我让他换 TM1637 模块,两根线接上,腾出一堆脚位给别的元件。他原以为 LED数码管就是直接怼 IO 长期点亮,其实那是给自己埋雷,段电流大了 IO 灌电流超规格,芯片迟早出问题。
新手常踩三个误区。误区一,数码管能直接长期接 IO 点亮。错,每段电流几毫安,多段一起亮 IO 扛不住,要么加限流要么上驱动。误区二,TM1637 和 595 是一回事。错得离谱,TM1637 内部把扫描和电流都管了,595 只是个扩 IO 的移位寄存器,扫描代码还得自己写。误区三,静态显示和动态扫描没差别。静态每位独立占脚,亮是亮但费 IO;动态扫描靠人眼余晖省脚,代码复杂容易出重影,这正是另一篇文章讲鬼影的由来。
TM1637 两根线,一根时钟一根数据,协议类似 i2c,模块内部自己逐位扫描、自己限流,亮度还能发命令调等级,网上现成库一大把,焊上四位数码管连时钟温度计最省事。74HC595 是 8 位串行入并行出的移位寄存器,三颗级联能出 24 路,配合单片机自己写扫描程序,灵活但代码量大。共阴共阳模块都行,看你怎么买。这类 LED数码管点亮的本质,就是单片机按段码表把对应段脚拉高或拉低,段码表错了全段乱跳。
两种路子没法套同一个接法。TM1637 只要两根线,自带扫描,适合四到六位的小表;595 要三根线,纯扩 IO,扫描自写,适合位数多或者板子已经用 595 链带别的东西顺手并一颗。七段数码管每位七段加小数点八路,用 595 刚好一颗管一位,级联下去位数想加就加。数显屏和大尺寸 188数码管因为电流大,往往要外挂驱动管,不能直接靠 595 拉。
真要落地选驱动,小项目图省事上 TM1637 模块,几块钱一颗带数码管,库一调就出数。要进正式产品又已经用 595 链带其他元件,就并一颗 595 管显示,不额外占单片机脚。段电流别超规格,TM1637 模块一般已带限流,595 方案要自己每路加电阻。四位数码管生产厂家出的带驱动模块越来越常见,买模块比自己焊排阻省心,也少返工。
问:TM1637 最多能带几位?答:常见模块四到六位,再多要看时序能不能撑住,一般六位以内稳。问:595 要占几个 IO?答:三颗级联也只要三根线,数据时钟锁存各一,单片机只出三根。问:共阴共阳模块程序能混用吗?答:不能,段码表要反一下,买模块先看清极性。问:亮度怎么调?答:TM1637 发命令设等级,595 方案靠改扫描占空比或换限流电阻。
数码管点亮的核心是单片机给对电平,省引脚的核心是少占 IO。TM1637 拿来即用,595 灵活可扩,按位数和现有板子挑一个,比硬怼 IO 稳当得多。让 LED数码管厂家随货给份段码表,自己写驱动时少绕弯路。