数码管和 LED 灯珠驱动芯片介绍
作者:江访 | 最后修改:2026-07-06
面向读者:有基本编程基础(没基础也可以问 AI),但不了解 LED 显示驱动芯片的开发者 目标:读完本文,你能回答以下问题——
- LED 显示芯片是干什么的?
- 市面上有哪些厂商?哪些类型?
- 我们在做的 7 个型号是什么?有什么不同?
- 如何根据产品需求来选择?
- 芯片内部怎么工作的?软件怎么驱动它?硬件怎么接?
第一章:LED 驱动芯片是什么?
1.1 一个生活中的例子

你看到一块电子时钟,上面跳动着白色的数字"14:56"。 这个数字是由 7 段数码管 显示的——每一段是一个 LED(发光二极管),拼成"8"的形状。 问题是:主控的 GPIO 引脚有限,不可能每个 LED 都直接连一个引脚。 LED 显示驱动芯片 就是来干这个的——用最少的引脚,控制最多的 LED。
打个比方:
- 主控是老板,只下指令(通过 2~3 根信号线)
- 驱动芯片是工头,收到指令后去控制几十个 LED 的亮灭
- LED 是工人,干活发光
1.2 它解决什么问题
| **问题** | **驱动芯片的方案** |
| GPIO 引脚不够用 | 2~3 根通信线控制几十个 LED |
| LED 电流太大 | 芯片内置恒流驱动,不烧 主控 |
| 多个 LED 同时亮 | 芯片自带扫描刷新 |
| 按键检测 | 部分芯片集成按键扫描 |
1.3 两种主要的芯片类型
类型一:数码管驱动芯片
驱动 8 段数码管,主要显示数字和简单字符。
例子 1:TM1637(最多支持:8 段 ×6 位 + 16(8x2bit)按键)

例子 2:TM1640(最多支持:8 段 ×16 位)

类型二:RGB 灯珠驱动芯片
驱动 RGB 全彩 LED 灯带,灯带中包含很多个灯珠,每一个灯珠可以被单独控制颜色。
例子 1:WS2812(单线控制灯带)

例子 2:WS2801(双线控制灯带)

第二章:市场上的厂商和产品类型
2.1 LED 驱动芯片有哪些厂商?
大陆厂商
| **厂商** | **主要做什么** | **和我们规划的关系** |
| 天微电子(Titan Micro) | 数码管驱动 + LED 显示屏驱动 + LCD 驱动 | ✅ 规划中(TM1637/40/50/38/TM1829) |
| 华彩微/华彩威(World-Semi) | 单线 RGB LED 驱动(WS2812 发明者) | ✅ 规划中(WS2801、WS2812) |
| 富满微(Fuman) | LED 显示驱动 + 电源管理芯片,和天微有部分重叠产品 | ❌ 暂不涉及 |
| **明微电子** | LED 显示屏驱动 + 智能景观灯驱动,偏大屏 | ❌ 暂不涉及 |
台湾厂商
| **厂商** | **主要做什么** | **和我们规划的关系** |
| 聚积科技(Macroblock) | LED 大屏恒流驱动芯片,Mini LED 背光 | ❌ 暂不涉及,偏大屏和舞台屏 |
| 点晶科技(Sitronix) | LCD 驱动 + LED 驱动,ST16xx 系列和 TM16xx 类似 | ❌ 暂不涉及 |
国外厂商
| **厂商** | **主要做什么** | **和我们规划的关系** |
| **TI(德州仪器)** | TLC59xx 等 SPI 控制 LED 驱动,通用型但价格高 | ❌ 暂不涉及 |
| **Maxim(美信)** | 汽车/高端工业 LED 驱动 | ❌ 暂不涉及 |
| **NXP** | I²C 控制的 PCA9685 LED 驱动器 | ❌ 暂不涉及 |
2.2 以天微和华彩为例介绍
天微电子(Titan Micro)
国内 LED 驱动芯片老牌厂商,芯片覆盖非常广,产品分为四大类:
| **产品线** | **说明** | **代表型号** |
| **数码管驱动** | 驱动段式/点阵式 LED 显示,多用于家电、仪表 | **TM1637、TM1640、TM1650、TM1638、**TM1620… |
| **LED 显示屏驱动** | 驱动户外/室内 LED 大屏(行扫描+列驱动) | TM5020、TM74HC595 |
| **LCD 显示驱动** | 驱动液晶段码屏 | TM1621、TM1721 |
| **RGB 灯珠驱动** | 驱动灯带、护栏管、点光源 | TM1804、TM1912、TM1824、TM512 系列 |
我们目前做的 4 个型号(TM1637、TM1640、TM1650、TM1638)都属于第一类——LED 面板显示驱动。
华彩微 / 华彩威(World-Semi)
全球最知名的单线 RGB LED 驱动芯片厂商,WS2812 的发明者。产品线:
| **产品线** | **说明** | **代表型号** |
| **数字 LED 系列** | 灯珠和驱动芯片合封,单线控制 | **WS2812、**WS2813、WS2815、WS2816 |
| **灯饰 芯片 系列** | 单独的驱动芯片,外接 LED | **WS2801、**WS2811、WS2814 |
| **新品系列** | 特殊功能 | WS1138、WS1238 |
我们目前做的 3 个型号(WS2801、WS2812、TM1829)都属于装饰驱动类,其中 WS2801 和 WS2812 是华彩微的,TM1829 是天微的(在官网没找到相关资料,如果没有资料后续改成TM1824)。
2.3 芯片类型详解
类型一:数码管驱动芯片
我们规划内的芯片(带 ✅ 标记):TM1637、TM1640、TM1650、TM1638 不在规划内的芯片:天微还有大量其他型号,下面举例时一并列出,方便你以后选型参考。
工作原理:
LED 数码管内部有很多个 LED 小段拼成一个"8"字,每一段(segment)是一个 LED。多个数字排列在一起,每个数字就是一个"位"(digit)。
驱动芯片通过段(SEG) 和位(GRID/COM) 两根总线来寻址:
- 段(SEG):控制每一段亮灭(a~g + dp 小数点)
- 位(GRID):选择哪一位数字亮(第 1 位、第 2 位…)
段 a ───
┌──┐
段 f│ │段 b ← f段亮=a段亮=… 拼成"8"
├──┤
段 e│ │段 c
└──┘
段 d ● dp(小数点)
关键参数:段数 × 位数 例如 8×6 表示可控制 8 段 × 6 位 = 共 48 个 LED。
常见型号对号入座("带按键"一列打 ✅ 的意思是:按键直接接到驱动芯片上,芯片检测到后通过 1 根中断线告诉主控,不用占用主控多个 GPIO):
| **段数×位数** | **驱动点数** | **通信线数** | **带按键(省主控GPIO)** | **典型封装** | **对应芯片** |
| 8×4(4位) | 32 | 2 线 | ❌ | SOP16/DIP16 | TM1616(❌ 不在规划内) |
| 8×4(4位) | 32 | 2 线 | ✅ 支持最多 28 个按键(7×4 矩阵),只需主控 1 个中断脚 | SOP16/DIP16 | ✅ TM1650(规划中) |
| 7×4(4位) | 28 | 2 线 | ✅ 支持 7 个按键 | SOP16/DIP16 | TM1651(❌ 不在规划内) |
| 8×6(6位) | 48 | 2 线 | ✅ 支持 16 个按键(8×2 矩阵) | SOP20/DIP20 | ✅ TM1637(规划中) |
| 10×8(8位) | 80 | 3 线 | ✅ 支持 24 个按键(8×3 矩阵) | SOP28 | ✅ TM1638(规划中) |
| 8×8(8位) | 64 | 3 线 | ✅ 支持 4 个按键 | SOP24/QSOP24 | TM1639(❌ 不在规划内) |
| 7×10(10位) | 70 | 3 线 | ✅ 支持 10 个按键 | SOP28 | TM1668(❌ 不在规划内) |
| 8×16(16位) | 128 | 2 线 | ❌ | SOP28/SSOP28 | ✅ TM1640(规划中) |
| 16×8(8位+更多段) | 128 | 3 线 | ✅ 支持 8 个按键 | QFP44 | TM1629(❌ 不在规划内) |
选型规律一看就懂:
- 数字越大(1637→1640→1650),功能越强,管脚越多,封装越大
- 尾数带 0 的(1640)通常无按键,带 5/8 的(1650/1638)带按键
- 需要更多位数:TM1638(8 位)> TM1637(4 位)
- 需要更多段(显示复杂符号):TM1640(16 段)> TM1637(8 段)
- 需要按键:TM1650(4 位 + 按键)或 TM1638(8 位 + 按键 +LED)
类型一(续):按键扫描(把按键接到驱动芯片上,省主控 GPIO)
有些驱动芯片(TM1650、TM1638)在管显示的本职工作之外,还额外集成了按键检测电路。
它的设计思路:
本来你想做带按键的产品,按键需要接到主控的 GPIO 上——接几个按键就要占几个引脚:
┌─────────┐
│ 主控 │── GPIO ─────────────┼────── 按键 1
│ │ ├────── 按键 2
│ │ ├────── 按键 3
│ │ ├────── 按键 4
└─────────┘ └── ...
说明:
1. 按键直接挂载主控GPIO
2. 每增加1个按键就占用1路主控GPIO
3. 按键越多,消耗主控IO资源越多
集成按键扫描的芯片则把按键接到驱动芯片上:
┌─────────┐ ┌────────────────────────┐
│ 主控 │ │ TM1638 驱动芯片 │
│ │── CLK ─────────────▶│ │
│ │── DIO ───────────────┤ 内置8×3按键扫描矩阵 │
│ │── INT ───────────────┤ 最大支持 24 路按键 │
└─────────┘ │ │
│ KEY1 ─────────────────┼── 按键 1
│ KEY2 ─────────────────┼── 按键 2
│ KEY3 ─────────────────┼── 按键 3
│ ... ┼── ...
└────────────────────────┘
说明:
1. 通信链路:主控与芯片仅需 CLK / DIO / INT 三根连线
2. 按键资源:24个按键全部外接至TM1638,节省主控IO口
这样一来:
- 主控只需要 2~3 根通信线接驱动芯片,外加 1 个中断引脚
- 按键全部接在驱动芯片上,不管 4 个还是 8 个,主控那边无需增加任何引脚
- 主控不用轮询按键状态,芯片检测到按键按下会自动通过中断通知
中断来了以后,怎么区分是哪个按键按下,以及是按下还是弹起?
当芯片检测到按键事件时,会拉低 INT 引脚通知主控。主控收到中断后,通过 CLK+DIO(或 CLK+DIO+STB)通信总线发送"读取按键寄存器"指令,芯片会返回一个代表按键状态的数值:
- 对于 TM1650:返回的数值中每一位对应一个按键,通过读回的数据位可以知道哪个按键被按下,以及是按下(1)还是弹起(0)
- 对于 TM1638:芯片内部有按键寄存器组,主控 通过读命令一次性获取所有按键状态,然后按矩阵位置解析出具体是哪个按键。TM1638 可以检测到 8×3 共 24 个按键的状态,并且能区分按下和弹起
简单来说:INT 管脚负责"有人按了"的通知,通信总线负责"谁按了、什么状态"的查询。
省了多少引脚?
| **方案** | **4 位数码管 + 4 个按键** | **8 位数码管 + 8 个按键** |
| 不用按键芯片(直连主控) | 4(显示2+按键4)= 6 个 GPIO | 按键本身就要 8 个 GPIO |
| 用 TM1650 / TM1638 | 2(通信)+ 1(中断)= 3 个 GPIO | 3(通信)+ 1(中断)= 3 个 GPIO |
结论:按键越多,省得越多。
类型二:RGB 灯珠驱动芯片
我们规划内的 芯片(带 ✅ 标记):WS2801、WS2812、TM1829 不在规划内的 芯片:天微和华彩微还各有一大堆兄弟型号
每个芯片内置 PWM 控制,可以独立控制连接的 RGB LED 各通道的亮度。
灯带与灯珠的关系: 一条灯带由多个灯珠串联而成,每个灯珠内部集成了驱动芯片(如 WS2812 为合封方案)或者外接一颗独立驱动芯片(如 WS2801)。主控 向灯带发送数据时,每个灯珠的驱动芯片会自动提取属于自己的那部分数据,然后把剩余数据转发给下一颗灯珠。这样,主控 就可以通过一根信号线依次设置每一个灯珠的颜色,实现流水灯、跑马灯等效果。
通过级联(Daisy Chain) 方式连接:第一个芯片的 DOUT 接到第二个的 DIN,以此类推。主控 只需要 1 根(单线协议,如 WS2812)或 2 根线(双线协议,如 WS2801)即可控制一整条灯带。
单线协议(WS2812 / TM1829): 只有 1 根 DATA 线,靠脉冲宽度区分 0 和 1
发送数据时,主控 在 DATA 线上依次发出每个灯珠的 24 位颜色数据:
┌───┐ ┌───┐ ┌───┐
DATA ──────────────────────→│ ① │────→│ ② │────→│ ③ │
└───┘ └───┘ └───┘
主控 发: [灯珠3数据][灯珠2数据][灯珠1数据]
第 1 颗芯片吃掉前 24 bit(灯珠1),剩余往后传
第 2 颗芯片吃掉接下来 24 bit(灯珠2),剩余往后传
第 3 颗芯片吃掉最后 24 bit(灯珠3)
- 靠高低电平的持续时间来区分数据 0 和 1(T0H≈350ns,T1H≈700ns)
- 每颗灯珠需要 24 位(RGB 各 8 位),数据从最后一颗往前发送
- 芯片自动整形转发,级联级数不受信号衰减限制
双线协议(WS2801): CLK + DATA 两根线,兼容 SPI 时序
CLK ████ ████ ████ ████ ████ ████
主控 ──────────→│
DATA ████████ ████ ████████ ████ │
└────────────────────────────────┘
┌───┐ ┌───┐ ┌───┐
CLK ─────────────────────────→│ ① │────→│ ② │────→│ ③ │
DATA ────────────────────────→│ │────→│ │────→│ │
└───┘ └───┘ └───┘
- CLK 提供时钟节拍,DATA 在每个时钟上升沿发送 1 bit
- 每颗灯珠需要 24 位数据(3 字节 R/G/B),按顺序发送
- 时序宽松(最高 25MHz),纯 Lua 软件模拟即可
- 所有芯片同时接收 CLK+DATA,各自提取属于自己的那 24 位
级联示意图(两种协议通用):
主控 ──DIN──→ [芯片1] ──DOUT──→ [芯片2] ──DOUT──→ [芯片3] …
控制灯珠1 控制灯珠2 控制灯珠3
一颗灯珠坏了,整条灯带都不能用了吗? 上图是串联关系——数据是从第一颗依次传到最后一颗的。如果某一颗芯片内部的信号通路损坏(DOUT 无法转发数据),则它后面的所有灯珠都会失去信号,表现为"后面全灭"。 不过有两种情况不一样:
- 灯珠的 RGB LED 灯坏、但驱动芯片的逻辑电路正常:数据仍能正常转发,只是那一颗不发光,后面的灯珠不受影响
- 带"断点续传"功能的芯片(如 WS2813、WS2815):即使某一颗芯片损坏,数据也能自动绕过损坏的节点,后面的灯珠继续正常工作 普通型号(WS2812、TM1829、WS2801)不支持断点续传,但只要驱动芯片的逻辑电路完好(只是 RGB 部分损坏),数据仍能通过。
常见型号对号入座:
| **通信方式** | **通道数** | **特色功能** | **典型封装** | **对应芯片** |
| 2 线 SPI | 3 路 RGB | 支持恒流/恒压,25MHz 时钟 | SOP14 | ✅ WS2801(规划中) |
| 2 线 SPI | 3 路 RGB | 信号双线,天微版本 | SOP8 | TM1803、TM1804(❌ 不在规划内) |
| 1 线 NRZ | 3 路 RGB | 灯珠驱动一体,默认 12mA | 5050 灯珠 | ✅ WS2812(规划中) |
| 1 线 NRZ | 3 路 RGB | 断点续传,坏一颗不影响后面的 | 5050 灯珠 | WS2813(❌ 不在规划内) |
| 1 线 NRZ | 3 路 RGB | 12V 供电,断点续传 | 5050 灯珠 | WS2815(❌ 不在规划内) |
| 1 线 NRZ | 3 路 RGB | 恒流驱动 + 错误检测 | SOP8 | ✅ TM1829(规划中) |
| 1 线 NRZ | 3 路 RGB | 低成本 | SOP8/DIP8 | TM1903(❌ 不在规划内) |
| 1 线 NRZ | 4 路 RGBW | 带白光通道 | SOP8 | TM1824(❌ 不在规划内) |
| 1 线 NRZ | 12 路 | 单芯片带 12 颗 LED | SOP16 | TM1912 / TM1812(❌ 不在规划内) |
| DMX512 | 3~4 路 | 差分并联,抗干扰强,专业舞台用 | SOP16/SOP8 | TM512 系列(❌ 不在规划内) |
选型规律:
- WS2801 = 双线,时序宽松,Lua 随便写,适合稳定控制
- WS2812 = 单线,灯珠一体,最便宜最普及,但时序严格
- TM1829 = 单线,带白光通道(RGBW),恒流驱动,但时序更严苛
- WS2813/15 = 断点续传——灯带上一颗坏了不影响后面的继续跑
- TM512 系列 = 专业舞台灯光的 DMX512 协议,差分信号几百米都没问题
2.4 怎么选择?(选型指南)
| **你的需求** | **推荐型号** | **原因** |
| 显示 6 位数字,简单时钟 | TM1637 | 6 位数码管显示,兼顾 16 个按键输入,2 线通信 |
| 显示数字+按键输入(多达 28 个按键) | TM1650 | 自带按键扫描,省主控 GPIO,最多 28 个按键 |
| 需要 8 位数字+多个按键+LED 指示灯 | TM1638 | 功能最全,10段×8位+24按键+8LED |
| 控制大量 LED 做面板显示(最多 16 位) | TM1640 | 8段×16位=128个灯点 |
| 全彩 RGB 灯带,用 SPI 通信 | WS2801 | 双线稳定,时序宽松 |
| 全彩 RGB 灯带,单线通信 | WS2812 | 最常见,灯珠/驱动一体 |
| 大功率 RGBW 灯带,恒流驱动 | TM1829 | 4通道恒流(含白光),18mA,6~24V |
| 只需要几个灯简单流动 | TM1637 / TM1640 | 成本最低 |
更多型号:可以查看显示外设资料整理
第三章:我们在开发的 7 个型号
3.1 总览一览表
| 序号 | 型号 | 厂商 | 功能 | 通信线 | 封装 | 资料 |
|---|---|---|---|---|---|---|
| 1 | TM1637 | 天微 | 8 段×6 位数码管 + 16(8x2bit)按键 | 2 线 CLK+DIO | SOP20/DIP20 | 下载 |
| 2 | TM1640 | 天微 | 8段×16位 位数码管 | 2 线 CLK+DIN | SOP28/SSOP28 | 下载 |
| 3 | TM1650 | 天微 | 8段×4 位/7 段×4 位 位数码管 + 28(7x4bit)按键 | 2 线 CLK+DIO | SOP16/DIP16 | 下载 |
| 4 | TM1638 | 天微 | 10段×8 位数码管 + 24(8×3bit) 按键 | 3 线 CLK+DIO+STB | SOP28 | 下载 |
| 5 | WS2801 | 华彩微 | 级联 RGB LED(SPI 型) | 2 线 CLK+DATA | SOP14 | 下载 |
| 6 | WS2812 | 华彩微 | 级联 RGB LED(单线型) | 1 线 DATA | 5050 灯珠封装 | 下载 |
| 7 | TM1829 | 天微 | 级联 RGB(W) LED(单线型) | 1 线 DATA | SOP8 | 暂无 |
3.2 TM1637 — 8 段 ×6 位数码管 + 16(8x2bit)按键
长什么样? SOP20(贴片)或 DIP20(直插)封装,20 个引脚。

能干什么? 驱动 8 段 ×6 位数码管 + 16(8x2bit)按键,8 级亮度可调。可显示数字 0~9、少量字母(A、b、C、d、E、F 等)、小数点。自带增强型抗干扰按键识别电路。
典型应用场景:
- 电子时钟、计时器
- 温度显示(数字温度计)
- 电压/电流表头
- 小家电面板显示

核心电气参数:
- 工作电压:5V(4.5V~5.5V)
- 段驱动电流:30mA(典型,最大 50mA)
- 位驱动电流:120~140mA(典型,最大 200mA)
- 通信时钟:最高 500kHz
- 内置 RC 振荡频率:450kHz
- 工作温度:-40℃~+85℃
芯片引脚: SEG1~SEG8(段输出)、GRID1~GRID6(位输出)、CLK(时钟)、DIO(数据)
3.3 TM1640 — 8 段 ×16 位 位数码管
长什么样? SOP28 或 SSOP28 封装,28 个引脚。

能干什么? 8 段 × 16 位 = 可以独立控制 128 个 LED。8 级亮度可调。相比 TM1637,TM1640 更擅长驱动多个数码管位(最多 16 位),适合大量数字或灯点的场合。这是 TM1637 的"老大哥"——支持更多的 LED。
典型应用场景:
- 16 个独立 LED 指示灯面板
- 8 位 ×8 段点阵显示(显示更多复杂信息)
- 家电功能状态面板(洗衣机、空调)

核心电气参数:
- 工作电压:5V(3.0V~5.5V)
- SEG 段拉电流:55~70mA(典型)
- GRID 位灌电流:140mA(典型,最大 200mA)
- 通信时钟:最高 1MHz
- 内置 RC 振荡:450kHz
- 工作温度:-40℃~+85℃
和 TM1637 的区别:
- TM1637:8 段 ×6 位 = 最多 48 个 LED
- TM1640:8 段 × 16 位 = 最多 128 个 LED,能力更强
3.4 TM1650 — 8 段 ×4 位/7 段 ×4 位 位数码管 + 28(7x4bit)按键
能让你少占几个 GPIO? 如果不带按键的芯片(比如 TM1637),你要做 4 个按键就得额外占 4 个 GPIO。TM1650 把按键接在它自己身上,只需 1 个中断脚通知主控,省 3 个 GPIO。
长什么样? SOP16 或 DIP16 封装,16 个引脚,比 TM1637 小。还有 TSSOP16 和 QFN16 等更小的封装选项。

能干什么? 4 位数码管显示(可选 8 段 ×4 位 或 7 段 ×4 位 两种模式)+ 支持最多 28 个按键。按键通过 KP 中断引脚通知 主控,主控 读取按键编号就知道是哪个键。8 级亮度可调。支持 3V~5.5V 宽电压。
典型应用场景:
- 带按键的温控器(显示温度 + 调温度)
- 烤箱/微波炉控制面板
- 密码锁输入面板

核心电气参数:
- 工作电压:5V(3.0V~5.5V)
- 段输出电流:最大 30mA
- 位输出电流:最大 150mA
- 推荐通信速率:100kHz 以下
- 工作温度:-40℃~+85℃
和 TM1637 的区别:
- TM1637 只管显示,想做按键还得另加芯片或占用主控 GPIO
- TM1650 自带按键扫描,按键接在 1650 上,不占主控引脚
3.5 TM1638 — 10 段 ×8 位数码管 + 24(8×3bit) 按键
能让你少占几个 GPIO? 如果不带按键的芯片,你要做 8 个按键 + 8 个指示灯 + 8 位数码管,总共需要 8(按键)+8(LED)+2(显示通信用)= 18 个 GPIO。TM1638 一个芯片全包了,通信只占 3 个 GPIO + 1 个中断脚,帮你省下 14 个 GPIO。
长什么样? SOP28 封装,28 个引脚。

能干什么?
这是天微数码管驱动芯片中功能最丰富的一个:
- 8 位数码管显示(10 段 ×8 位,比普通 8 段多两个段,可以显示更多特殊符号)
- 8 颗独立 LED 控制
- 24 个按键检测(8×3 矩阵,支持组合键)
- 8 级亮度调节
- 内置 LED 反偏漏电优化——解决了 LED 微弱暗亮的问题

典型应用场景:
- 工业控制面板(显示参数 + 按键 + 状态灯)
- 多功能仪表
- 嵌入式系统的调试面板
核心电气参数:
- 工作电压:5V(3V~6V,比 TM1637 范围更宽)
- SEG 段拉电流:25~30mA(典型,最大 40~50mA)
- GRID 位灌电流:140mA(典型)
- 通信时钟:最高 1MHz
- 内置 RC 振荡:500kHz
- 工作温度:-40℃~+85℃
核心优势:一个芯片搞定显示 + 按键 + 指示灯,省 PCB 面积省成本。
3.6 WS2801 — 双线 RGB LED 驱动
长什么样? SOP14 封装,14 个引脚。

能干什么? 控制单颗或级联的 RGB LED,每颗 24 位色(R/G/B 各 8 位 0~255)。通信使用 SPI 风格的双线(CLK+DATA),时序宽松,纯 Lua 软件模拟完全可行。
典型应用场景:
- LED 装饰灯带(室内氛围灯)
- 舞台灯光效果
- 全彩指示灯
- LCD 电视背光控制

特点:
- 双线通信,时序比 WS2812 宽松,软件好实现
- 最高 25MHz 时钟频率
- 支持恒流和恒压两种驱动模式
- 通道恒流:5~30mA(恒流模式),最高可达 200mA
- 工作电压:5V(3.3V~5.5V)
- 级联时信号再生,不会衰减
3.7 WS2812 — 单线 RGB LED(灯珠一体)
长什么样? 5050 封装(5mm × 5mm),灯珠和驱动芯片合封在一起,看起来就是一颗普通的 RGB LED,实际上里面住着驱动芯片。也有 3535、2020、2427 等更小的尺寸。

能干什么? 单线控制一整条灯带,每一颗灯珠可以独立设置颜色(R/G/B 各 0~255)。
典型应用场景:
- 智能灯带(客厅氛围灯、圣诞装饰)
- 电脑/键盘 RGB 光效
- 广告发光字
- 像素屏、透明屏

特点:
- 1 根信号线就能控制无数个灯珠(级联即可)
- 芯片内置稳压,24V 以下只需串电阻,不需要额外稳压管
- 信号整形功能:级联远了也不会失真
- 数据速率:800Kbps
- 扫描频率:2KHz(刷新率高,拍视频不闪烁)
- RESET 时间:>280μs(不容易误复位,便宜 主控 也能用)
- 工作电压:5V(3.3V~5.5V)
- 市面上最常见、最便宜的 RGB LED
特别注意:
- 时序非常严格(T0H(350ns,T1H)700ns)
- 纯 Lua GPIO 翻转仅适用高频 主控(≥480MHz)
3.8 TM1829 — 单线 RGB(W) 恒流 LED 驱动
长什么样? SOP8 封装,8 个引脚,非常小巧。

能干什么? 单线级联控制 4 通道(R/G/B/W,含白光)LED,每通道 18mA 恒流输出,256 级灰度可调。VDD 内置 5V 稳压管,外部串电阻后支持 6V~24V 宽电压供电。OUT 端口耐压高达 32V。数据传输速率 800KHz。
典型应用场景:
- 需要白光混色的场景(RGBW 四通道灯带)
- 户外高亮度装饰灯(护栏管、点光源)
- 6~24V 宽电压供电的产品
核心特性:
- 4 通道恒流驱动,通道间电流误差仅 ±3%
- 内置 5V 稳压管,外围器件少(DIN 需串 1KΩ 电阻)
- 信号整形转发:级联不会失真衰减
- 上电默认全灭(不会上电闪烁)
- 数据速率:800KHz
- OUT PWM 输出频率:1KHz
- 工作温度:-40℃~+85℃

与 WS2812 的区别:
| **对比项** | **WS2812** | **TM1829** |
| 通道数 | RGB 3 通道 | RGBW 4 通道(多一个白光) |
| 驱动方式 | 恒压 | 恒流 18mA(亮度更均匀) |
| 供电电压 | 3.3V~5.5V | 6V~24V(VDD 内置 5V 稳压管) |
| 端口耐压 | — | **OUT 耐压 32V** |
| 灰度级别 | 256 级 | 256 级 |
| 封装 | 灯珠一体(5050) | 独立 SOP8 |
第四章:技术原理 — 硬件如何设计
4.1 硬件连接图
数码管类(TM1637 / TM1650 / TM1640 / TM1638)
┌──────────────┐ ┌──────────────────┐
│ 主控 │ │ 驱动芯片 │
│ (AirXXX) │ │(TM1637/40/50/38) │
│ │ │ │
│ GPIO_X ──────┼────────────────────┼──→ CLK │
│ │ │ │
│ GPIO_Y ←─────┼────────────────────┼──→ DIO/DIN │
│ │ │ │
│ GPIO_Z ──────┼────────────────────┼──→ STB(仅TM1638) │
│ │ │ │
│ GPIO_W ←─────┼────────────────────┼── INT(仅1650/38) │
└──────────────┘ │ │
│ SEG1~SEGx ───────┼──→ 数码管段
│ GRID1~GRIDx ─────┼──→ 数码管位
└──────────────────┘
引脚交互功能说明:
| 引脚 | 方向 | 功能说明 |
| **CLK(时钟)** | 主控→芯片 | 主控 控制时钟线高低电平变化,芯片在时钟边沿读取/写入数据 |
| **DIO/DIN(数据)** | 主控↔芯片 | 主控 发送指令和数据给芯片,或从芯片读取按键状态 |
| **STB(选通)** | 主控→芯片 | 仅 TM1638 使用。STB 拉低表示一帧数据传输开始,拉高表示结束 |
| **INT(中断)** | 芯片→主控 | 仅 TM1650/1638 按键模式使用。芯片检测到按键按下或弹起时拉低此引脚通知 主控 |
电路注意事项:
- CLK 和 DIO 建议接 4.7kΩ ~ 10kΩ 上拉电阻到 VCC
- VCC 通常 3.3V 或 5V(以规格书为准)
- 数码管如果是共阴,对应芯片的共阴版本(注意区分 TM1640 共阳/共阴)
RGB 灯带类(WS2801 / WS2812 / TM1829)
WS2801 双线灯带:
主控 GPIO_CLK ───→ 灯带 CLK 输入
主控 GPIO_DATA ──→ 灯带 DATA 输入
5V/12V 电源 ────→ 灯带 VCC
GND 共地 ───────→ 灯带 GND
WS2812 单线灯带:
主控 GPIO_DATA ──→ 灯带 DIN
5V 电源灯 ────────→ 带 VCC
GND 共地 ────────→ 灯带 GND
关键要点:
- 主控 和灯带必须共地(GND 相连)
- WS2812 的时序很快,主控 到灯带的连线尽量短(<10cm)。如果很长,需要加 300~500Ω 串联电阻
- 灯带较长时每隔一定距离需要重新供电(电压降问题)
4.2 基本电路参数
| **芯片** | **VCC** | **上拉电阻** | **输出驱动电流** | **其他关键参数** |
| 5V(4.5V~5.5V) | 4.7kΩ~10kΩ | SEG 段灌电流 30mA(典型,最大50mA);GRID 位拉电流 120~140mA(典型,最大200mA) | 共阳驱动,450kHz RC 振荡,最大时钟 500kHz,-40~85℃ | |
| TM1640 | 5V(3.0V~5.5V) | 4.7kΩ~10kΩ | SEG 段拉电流 55~70mA(典型,最大65~80mA);GRID 位灌电流 140mA(典型,最大200mA) | 450kHz RC 振荡,最大时钟 1MHz,-40~85℃ |
| TM1650 | 5V(3V~5.5V) | 4.7kΩ~10kΩ | 段输出电流 30mA(最大);位输出电流 150mA(最大) | 两种显示模式,内置时钟,推荐通信速率 100kHz 以下 |
| TM1638 | 5V(3V~6V) | 4.7kΩ~10kΩ | SEG 段拉电流 25~30mA典型,最大40~50mA);GRID 位灌电流 140mA(典型) | 500kHz RC 振荡,最大时钟 1MHz,-40~85℃,带 LED 反偏漏电优化 |
| WS2801 | 5V(3.3V~5.5V) | 无 | 通道恒流 5~30mA(恒流模式)/ 0~50mA(恒压模式),最大 200mA | 最大时钟 25MHz,支持级联信号再生,-40~125℃ |
| WS2812 | 5V(3.3V~5.5V) | 无 | 通道恒流 12mA~16mA | 灯珠一体封装(5050),数据速率 800Kbps,RESET>280μs,扫描频率 2KHz |
| TM1824 | 5V(4.5V~6.5V,VDD内置5V稳压管) | 无(DIN需串1KΩ) | 18mA/通道,恒流,通道误差±3%,芯片间±5% | OUT 耐压 32V,数据速率 800KHz,OUT PWM 1KHz,-40~85℃ |
第五章:通信时序 — "主控 和芯片之间怎么聊天"
5.1 先弄懂"时序"是什么
想象两个人打手电筒通信:
- 约定好的闪烁节奏 = 时序
- 闪一下 = 发送 1 位数据(bit)
- 不同长度的闪烁 = 代表"0"还是"1"
对于我们的芯片,主控 就是打手电筒的人,芯片就是对面接收信号的人。它们之间约定好了一套暗号:
短亮一下 = 代表数字 0
长亮一下 = 代表数字 1
这个"多短算短、多长算长"的约定,就是时序。
下面我不用微秒纳秒给你讲,用"大概多快"来理解。
5.2 各芯片的通信速度一览
| **芯片** | **实际频率** | **用人来比喻** | **传输快慢的影响** |
| TM1637 | 最高 500kHz | 正常语速,一个字一个字说,很清晰 | ✅ 慢速=容易,GPIO 模拟随便跑 |
| TM1640 | 最高 500kHz | 同上(2 线协议) | ✅ 同上 |
| TM1650 | 最高 500kHz | 同上(2 线协议) | ✅ 同上 |
| TM1638 | 最高 500kHz | 同上,就是多了一根"准备线"(STB) | ✅ 同上 |
| **WS2801** | 最高 25MHz | 语速可以非常快,兼容标准 SPI | ✅ 虽然频率高但用的是 SPI 标准,主控 硬件 SPI 轻松发 |
| **WS2812** | **800kHz** | 比前几个还慢一点,但它要求极其精准 | ⚠️ 不是快慢问题,是精度要求极高 |
| **TM1829** | 和 WS2812 属同类 | 单线 NRZ 协议,要求类似 | ⚠️ 暂无确切频率数据,但同样要求精准,建议走硬件 |
关键理解:
- TM1637/40/50/38 和 WS2801:速度快慢无所谓,Lua 软件模拟随便写,都能跑
- WS2801 虽然频率最高(25MHz),但它是标准 SPI 协议,主控 有硬件 SPI 外设来发,不靠软件
- WS2812 和 TM1829:不是快慢问题,是精度问题——它们要求控制在几亿分之一秒的精度,Lua 软件很难做到不被中断打断,建议用硬件 SPI/PWM 或 C 组件
一个很容易误解的点:
WS2812 的 800kHz 还没有 TM1637 的 500kHz 快(慢了将近一半),但 WS2812 难搞的原因不是快,而是要求的精度高:
- TM1637:发一个数据位最慢可以拖到几微秒,快一点慢一点芯片都不在意
- WS2812:一个数据位只有 1.25 微秒,而且"0"和"1"是靠拉高电平拉多长时间来区分的——差几纳秒(十亿分之几秒)就读错了
5.3 "严格型"芯片到底严格在哪(WS2812 为例)
如果你不需要了解这么深,直接记住一句话就够了: WS2812 和 TM1829 的时序太苛刻,纯靠 Lua 软件去精确控制很难,建议用硬件的 SPI 或 PWM 来帮忙发数据。 下面的内容给想了解细节的人看。
一根数据线要既传"0"又传"1",怎么区分?靠拉高电平的时间长短来区分:
发送"0": 高电平 _ 低电平
████ ████████████
↑ 短 ↑ ↑ 长 ↑
大约 0.3微秒 大约 0.8微秒
发送"1": 高电平 ______ 低电平
████████ ████████
↑ 长 ↑ ↑ 短 ↑
大约 0.7微秒 大约 0.6微秒
为什么难?
主控不是一直专心发数据,它还要做别的事——比如系统心跳、定时器、消息处理。这些会打断发送过程。
- TM1637 那种慢速芯片:被打断没关系,停顿一下继续就行
- WS2812:一旦开始发,就不能被打断,哪怕迟疑了 1 微秒(百万分之一秒),灯珠就识别错了,后面的所有灯珠都会乱
打个比方:
- TM1637 :像你给同事写邮件,写一半去喝杯水回来继续写,没关系
- WS2812 :像你点燃一串鞭炮的引线,中途不能停,停了就哑炮
5.4 每个芯片的"难度等级"
| **芯片** | **难度** | **说明** |
| TM1637/40/50/38 | ⭐ 简单 | 随便写都能跑,Lua 模拟绰绰有余 |
| WS2801 | ⭐ 简单 | SPI 本身就是 主控 的标配,或者用 Lua 模拟也行 |
| WS2812 | ⭐⭐⭐ 困难 | Lua 控制很难做到不被打断地精确发送,推荐用 C 组件 ws2812.create() |
| TM1829 | ⭐⭐⭐⭐ 更困难 | 比 WS2812 还严格,建议 SPI 帮忙或 C 实现 |
总结:TM1637~WS2801 随便用 Lua 写,跑得稳稳的。WS2812 和 TM1829 咱们虽然在扩展库中也提供了 Lua 接口,但实际产品中建议用硬件方式(SPI/PWM/C 组件)实现。
第六章:技术原理 — 软件如何工作
6.1 通信协议直观理解
2 线协议(TM1637/40/50):
就像两个人挥旗通信:
- CLK(时钟线):喊节奏"1、2、3…"
- DIO(数据线):根据节奏变换旗子方向(高/低电平)
主控 每拉一次 CLK,DIO 上就传 1 位(bit)数据。一个字节 = 8 个 CLK 脉冲。
CLK ████ ████ ████ ████
↓发送 ↓发送 ↓发送 ↓发送
DIO ████████ ████ ██████████ ████
bit7 bit6 bit5 ... bit0
3 线协议(TM1638):
TM1638 多了一根 STB(选通)线:
- STB 拉低 → 通知芯片"准备接收数据"
- 然后 CLK+DIO 传数据
- STB 拉高 → "数据传完了,执行"
STB ████████████████
↓ 拉低开始 ↓ 拉高结束
CLK ████ ████ ████
DIO b7..b0 b7..b0 b7..b0
单线协议(WS2812 / TM1829):
只有 1 根 DATA 线!靠时间长短来区分 0 和 1:
- 发 0:拉高 350ns,拉低 800ns
- 发 1:拉高 700ns,拉低 600ns
DATA ██ ██████ ██ ██████
↑0码 ↑1码 ↑0码 ↑1码
双线 SPI 协议(WS2801):
和 TM1637 类似,CLK+DATA 两根线,但兼容标准的 SPI 模式:
- 时钟上升沿采样数据
- 每颗灯珠需要 24 位(3 字节 R/G/B)
6.2 软件架构
每个扩展库的内部结构都类似:
┌─────────────────────────────────────────┐
│ 上层应用代码 │
│ (main.lua: 显示时钟、温度、跑马灯) │
├─────────────────────────────────────────┤
│ 扩展库(纯 Lua) │
│ extm1637.lua / exws2801.lua ... │
│ ┌─────────────────────────────────┐ │
│ │ 上层 API:init / show / clear │ │
│ │ set_brightness / update ... │ │
│ ├─────────────────────────────────┤ │
│ │ 底层驱动:GPIO 位操作 │ │
│ │ gpio.setup / gpio.set / │ │
│ │ gpio.get (读取按键) │ │
│ └─────────────────────────────────┘ │
├─────────────────────────────────────────┤
│ LuatOS 内核 + GPIO 子系统 │
└─────────────────────────────────────────┘
数据的流转(以 TM1637 显示数字"5"为例):
应用:extm1637.display_number(5)
↓
扩展库:将数字 5 查段码表 → 0x6D
↓
扩展库:构造通信指令(写显示寄存器命令)
↓
扩展库:GPIO 模拟 2-wire 时序发送(CLK 脉冲 8 次,DIO 送出 0x6D)
↓
TM1637 芯片:收到指令 → 解码 → 驱动对应段的 LED 亮灭
↓
结果:数码管显示出"5"
6.3 段码表
对于数码管,需要一个"段码表"把数字 → 段码转换:
_-- 共阴极段码表(0~F)_local SEG_TABLE = {[0] = 0x3F, _-- 0_[1] = 0x06, _-- 1_[2] = 0x5B, _-- 2_[3] = 0x4F, _-- 3_[4] = 0x66, _-- 4_[5] = 0x6D, _-- 5_[6] = 0x7D, _-- 6_[7] = 0x07, _-- 7_[8] = 0x7F, _-- 8_[9] = 0x6F, _-- 9_[10] = 0x77, _-- A_[11] = 0x7C, _-- b_[12] = 0x39, _-- C_[13] = 0x5E, _-- d_[14] = 0x79, _-- E_[15] = 0x71, _-- F_}
6.4 RGB 的 24 位颜色
对于 WS2801/WS2812/TM1829,每个灯珠需要 24 位(或 32 位)数据:
WS2801/WS2812:不关心顺序,按 GRB 发送
bit23~16 bit15~8 bit7~0
[ Green ] [ Red ] [ Blue ]
TM1829 RGB:额外多 8 位白光通道
bit31~24 bit23~16 bit15~8 bit7~0
[ White ] [ Green ] [ Red ] [ Blue ]
注意:WS2812 实际物理排列是 GRB(不是 RGB)——数据发送时先 G 再 R 再 B。但 API 接口设计为
set_pixel(index, r, g, b),由库内部做转换。
第七章:扩展库
7.1 TM1637(待更新)
7.2 TM1640(待更新)
7.3 TM1650(待更新)
7.4 TM1638(待更新)
7.5 WS2801(待更新)
7.6 WS2812(待更新)
7.7 TM1829(待更新)
第八章:常见问题
Q1:芯片不显示怎么办?
- 检查 VCC 和 GND 供电是否正常
- 检查 CLK 和 DIO 是否接反
- 检查上拉电阻是否存在(CLK 和 DIO 都需要上拉)
- 用示波器看 CLK 上有没有波形
Q2:数码管亮度不均匀
- 不同位共用的限流电阻阻值是否一致
- 建议使用芯片的亮度设置调节
Q3:WS2812 灯带颜色不对
- 检查数据顺序(GRB 不是 RGB)
- 确保 主控 和灯带共地
- 降低数据速率试试
Q4:TM1650 按键无反应
- 检查 KP 中断引脚是否接对
- 确保初始化模式为
MODE_KEY_INPUT - 检查外部上拉是否有
Q5:多个芯片级联不工作
- 检查 DOUT→DIN 的连接
- 级联时最后一片的 DOUT 悬空
- 长距离级联建议加信号整形(WS2812 内置了)
附录:资料索引
| **芯片** | **数据手册** | **扩展库** | **文档位置** |
| TM1637 | TM1637_V2.6.pdf | extm1637.lua | 待更新 |
| TM1640 | TM1640_V1.9.pdf | extm1640.lua | 待更新 |
| TM1650 | TM1650_V2.5.pdf | extm1650.lua | 待更新 |
| TM1638 | TM1638_V2.2.pdf | extm1638.lua | 待更新 |
| WS2801 | WS2801S_V2.0_CN.pdf | exws2801.lua | 待更新 |
| WS2812 | WS2812B_V6.1_EN.pdf | exws2812.lua | 待更新 |
| TM1829 | (待补充) | extm1829.lua | 待更新 |