- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
TM1638 数码管驱动芯片演示
一、功能模块介绍
1.1 核心主程序模块
- main.lua - 主程序入口,负责项目初始化、版本定义和任务调度
- tm1638_demo.lua - TM1638 功能演示模块,包含数码管显示、LED 控制、按键检测、亮度调节、综合展示等所有功能的演示用例
1.2 扩展库模块
- exs_tm1638 - TM1638 扩展库,提供数码管段码显示、LED 指示灯控制、按键检测、亮度调节等 API
二、演示流程介绍
本 demo 按顺序演示 exs_tm1638 扩展库的 7 项功能:HELLO → [1/7] → [2/7] → [3/7] → [4/7] → [5/7] → [6/7] → [7/7] → End
2.1 功能演示项说明
- [1/7] 字符串显示 - 数码管逐项显示数字、带小数点数字、字母组合、指定位置显示
- [2/7] LED 控制 - 逐个点亮/熄灭 LED 指示灯、LED 跑马灯效果
- [3/7] 按键轮询 - 通过
get_key()API 轮询检测按键,10 秒超时 - [4/7] 亮度调节 - 展示 0~7 级亮度调节效果
- [5/7] 按键回调 - 通过
set_key_callback()API 设置按键回调函数,15 秒演示窗口 - [6/7] 综合演示 - 倒计时、HELLO 闪烁、全亮全灭、亮度渐变
- [7/7] 日期/时钟/温度 - 日期展示(YY-MM-DD 格式)、时钟模拟走时(HH-MM-SS)、温度展示(摄氏度°C 和华氏度°F)
三、显示效果
四、演示硬件环境
4.1 硬件清单
- Air780EPM 核心板 × 1
- TM1638 数码管模块(8 位数码管 + 8 个 LED 指示灯 + 8 个按键) × 1 demo所演示的TM1638数码管购买链接
- 母对母杜邦线 × 5
- TYPE-C 数据线 × 1
4.2 接线配置
4.2.1 TM1638 模块接线
| Air780EPM 核心板 | TM1638 模块 |
| 32/GPIO31 | CLK |
| 31/GPIO30 | DIO |
| 33/GPIO32 | STB |
| VDD_EXT | VCC |
| GND | GND |
说明:TM1638 模块通常还带有 VCC 和 GND 引脚,直接连接核心板的 VDD_EXT(3.3V)和 GND 即可。接线时注意杜邦线不宜过长,以免通信不稳定。
五、演示软件环境
5.1 开发工具
- Luatools下载调试工具 - 固件烧录和代码调试
5.2 内核固件
- 点击下载Air780EPM系列最新版本内核固件,demo所使用的是 LuatOS-SoC_V2046_Air780EPM 1号固件
5.3 脚本文件
- main.lua - 主程序入口
- tm1638_demo.lua - TM1638 功能演示模块
- exs_tm1638 - TM1638 扩展库
六、演示核心步骤
6.1 硬件准备
- 按照接线表将 TM1638 模块连接到核心板
- 确保电源连接正确,通过 TYPE-C USB 口供电
- 检查所有接线无误,避免短路
6.2 软件配置
在 main.lua 中加载对应的演示模块:
-- 加载 tm1638_demo.lua 演示模块
require "tm1638_demo"
6.3 软件烧录
- 使用 Luatools 选择最新内核固件
- 下载本项目所有脚本文件
- 将固件和脚本一起烧录到设备
- 烧录成功后设备自动重启后开始运行
6.4 功能测试
6.4.1 字符串显示演示
- 设备启动后显示 "HELLO",随后自动进入 [1/7] 字符串显示
- 观察数码管依次显示:
87654321→88.88→AbCd→ 从第 3 位显示1234 - 检查字符显示是否正确,带小数点功能是否正常
6.4.2 LED 控制演示
- 自动进入 [2/7] LED 控制演示
- 观察 LED 指示灯从 1 到 8 逐个点亮,再逐个熄灭
- 观察 LED 跑马灯效果,共循环 3 轮
- 数码管同步显示当前位置数字
6.4.3 按键检测演示
- 自动进入 [3/7] 按键轮询演示,数码管显示 "KEY----"
- 在 10 秒内按下 TM1638 模块上的任意按键
- 观察数码管显示按键编码(如 "K01"、"K02" 等)
- 若 10 秒内无按键按下,自动跳过
6.4.4 亮度调节演示
- 自动进入 [4/7] 亮度调节演示,数码管显示 "88888888"
- 观察数码管亮度从 0 级到 7 级逐级变化
- 最终恢复到 4 级亮度
6.4.5 按键回调演示
- 自动进入 [5/7] 按键回调演示,数码管显示 "Cb-Key"
- 在 15 秒内按下任意按键,观察数码管显示对应按键编码
- 观察日志输出,确认回调函数
on_key被正常触发 - 15 秒后自动结束回调演示
6.4.6 综合演示
- 自动进入 [6/7] 综合演示
- 观察倒计时效果:5 → 4 → 3 → 2 → 1 → 0
- 观察 "-HELLO-" 闪烁效果,重复 4 次
- 观察全 8 显示 + 全部 LED 点亮 + 亮度渐变
- 数字和 LED 指示灯全灭
6.4.7 日期/时钟/温度演示
- 自动进入 [7/7] 日期/时钟/温度演示
- 日期展示:显示格式 "YY-MM-DD"(如 "26-07-08"),停留 3 秒
- 时钟展示:模拟走时 "08-30-00" → "08-30-01" → ... → "08-30-09"
- 温度展示:
- 摄氏度:25°C → 32°C 逐度变化,亮度随温度升高而增加
- 华氏度:77°F → 90°F 逐度变化
- 演示结束后显示 "End" 并停留 3 秒
6.5 预期效果
- 字符串显示:数字、字母、小数点均能正确显示,支持指定起始位置
- LED 控制:8 颗 LED 指示灯均可独立控制,跑马灯效果流畅
- 按键检测:轮询模式和回调模式均能正确检测按键,编码显示正常
- 亮度调节:0~7 级亮度逐级变化,效果明显
- 日期/时钟/温度:格式显示正确,°C 和 °F 符号正常显示
- 日志如下:
[2026-07-21 10:36:28.010][000000000.184] I/main LuatOS@Air780EPM base 26.04 bsp V2046 32bit
[2026-07-21 10:36:28.014][000000000.184] I/main ROM Build: Jul 7 2026 20:39:17
[2026-07-21 10:36:28.017][000000000.186] W/pins /luadb/pins_air780epm.json not exist!!
[2026-07-21 10:36:28.020][000000000.188] D/main loadlibs luavm 1048568 14784 14784
[2026-07-21 10:36:28.044][000000000.188] D/main loadlibs sys 2366664 82756 89356
[2026-07-21 10:36:28.046][000000000.189] D/main loadlibs psram 2366664 82756 89356
[2026-07-21 10:36:28.048][000000000.207] I/user.main TM1638_Demo 001.999.000
[2026-07-21 10:36:28.051][000000000.223] D/user.exs_tm1638 version -> 202607131200
[2026-07-21 10:36:28.055][000000000.239] I/user.exs_tm1638 初始化完成, clk=31 dio=30 stb=32 亮度=5
[2026-07-21 10:36:28.058][000000000.239] I/user.tm1638_demo TM1638 初始化成功,版本: 202607131200
[2026-07-21 10:36:28.689][000000001.251] I/user.tm1638_demo ===== [1/7] 字符串显示 =====
[2026-07-21 10:36:28.692][000000001.252] I/user.tm1638_demo 显示 87654321
[2026-07-21 10:36:29.798][000000002.300] I/mobile sim0 sms ready
[2026-07-21 10:36:29.800][000000002.300] D/mobile cid1, state0
[2026-07-21 10:36:29.801][000000002.301] D/mobile bearer act 0, result 0
[2026-07-21 10:36:29.810][000000002.301] D/mobile NETIF_LINK_ON -> IP_READY
[2026-07-21 10:36:29.818][000000002.356] D/mobile TIME_SYNC 0 tm 1784601393
[2026-07-21 10:36:30.210][000000002.776] I/user.tm1638_demo 显示 88.88
[2026-07-21 10:36:31.730][000000004.300] I/user.tm1638_demo 显示 AbCd
[2026-07-21 10:36:33.254][000000005.824] I/user.tm1638_demo 从第 3 位开始显示 1234
[2026-07-21 10:36:35.285][000000007.859] I/user.tm1638_demo ===== [2/7] LED =====
[2026-07-21 10:36:38.805][000000011.371] I/user.tm1638_demo 逐个熄灭
[2026-07-21 10:36:40.422][000000012.987] I/user.tm1638_demo LED 跑马灯
[2026-07-21 10:36:44.912][000000017.474] I/user.tm1638_demo ===== [3/7] 亮度调节 =====
[2026-07-21 10:36:45.426][000000017.998] I/user.tm1638_demo 设置亮度: 0
[2026-07-21 10:36:46.229][000000018.799] I/user.tm1638_demo 设置亮度: 1
[2026-07-21 10:36:47.036][000000019.600] I/user.tm1638_demo 设置亮度: 2
[2026-07-21 10:36:47.826][000000020.401] I/user.tm1638_demo 设置亮度: 3
[2026-07-21 10:36:48.631][000000021.202] I/user.tm1638_demo 设置亮度: 4
[2026-07-21 10:36:49.437][000000022.003] I/user.tm1638_demo 设置亮度: 5
[2026-07-21 10:36:50.242][000000022.804] I/user.tm1638_demo 设置亮度: 6
[2026-07-21 10:36:51.033][000000023.605] I/user.tm1638_demo 设置亮度: 7
[2026-07-21 10:36:52.356][000000024.919] I/user.tm1638_demo ===== [4/7] 按键轮询 =====
[2026-07-21 10:36:52.366][000000024.919] I/user.tm1638_demo 请在 10 秒内按下连接到 TM1638 的按键...
[2026-07-21 10:36:53.831][000000026.399] I/user.tm1638_demo 检测到按键, 编码: 17
[2026-07-21 10:36:54.842][000000027.412] I/user.tm1638_demo [5/7] 按键回调(15 秒内按按键演示)
[2026-07-21 10:36:55.774][000000028.342] I/user.tm1638_demo 按键回调触发, 编码: 19
[2026-07-21 10:36:56.721][000000029.292] I/user.tm1638_demo 按键回调触发, 编码: 21
[2026-07-21 10:36:57.468][000000030.042] I/user.tm1638_demo 按键回调触发, 编码: 23
[2026-07-21 10:36:58.227][000000030.792] I/user.tm1638_demo 按键回调触发, 编码: 18
[2026-07-21 10:36:58.929][000000031.492] I/user.tm1638_demo 按键回调触发, 编码: 20
[2026-07-21 10:36:59.581][000000032.142] I/user.tm1638_demo 按键回调触发, 编码: 22
[2026-07-21 10:37:00.218][000000032.792] I/user.tm1638_demo 按键回调触发, 编码: 24
[2026-07-21 10:37:09.864][000000042.439] I/user.tm1638_demo 按键回调演示结束
[2026-07-21 10:37:09.876][000000042.439] I/user.tm1638_demo ===== [6/7] 综合演示 =====
[2026-07-21 10:37:19.103][000000051.675] I/user.tm1638_demo ---- 综合演示结束 ----
[2026-07-21 10:37:19.116][000000051.675] I/user.tm1638_demo ===== [7/7] 日期/时钟/温度 =====
[2026-07-21 10:37:19.128][000000051.675] I/user.tm1638_demo 日期展示: 26-07-08
[2026-07-21 10:37:22.644][000000055.209] I/user.tm1638_demo 时钟展示: 08-30-00 ~ 08-30-09
[2026-07-21 10:37:43.095][000000075.654] I/user.tm1638_demo ===== [演示完毕] =====
6.6 故障排除
-
数码管无显示:
- 检查 TM1638 接线是否正确(CLK、DIO、STB、VCC、GND)
- 确认 GPIO 引脚配置与接线一致
- 检查电源电压是否稳定(3.3V)
- 确认 exs_tm1638 扩展库已正常加载
-
LED 指示灯不亮:
- 检查 TM1638 模块供电是否正常
- 确认模块是否支持 LED 功能(部分精简模块可能没有 LED)
-
按键无响应:
- 检查按键接线和 TM1638 模块是否正常
- 确认扩展库初始化成功
- 查看日志确认
init()返回值为 true
-
亮度无法调节:
- 确认调用
set_brightness()时参数为 0~7
- 确认调用
-
显示内容错乱:
- 检查杜邦线是否过长导致通信不稳定
6.7 扩展功能建议
exs_tm1638 更多接口的使用可以查看 exs_tm1638 扩展库说明
