Arduino 实时时钟 LED 时钟:六位数码管精准计时制作指南
元器件清单
| 元器件 | 规格/型号 | 数量 | 用途 |
|---|---|---|---|
| Arduino UNO | R3 | 1 | 主控 |
| RTC 模块 | DS1307 + CR2032 电池座 | 1 | 掉电走时,I2C 接口 |
| 4 位共阴数码管 | 6 位(或 2 块 4 位) | 6 | 时:分:秒 显示 |
| NPN 三极管 | S8050 / 2N2222 | 10 | 位选驱动 |
| PNP 三极管 | S8550 / 2N2907 | 12 | 段选驱动(共阳极) |
| 限流电阻 | 120 Ω (段) / 1 kΩ (基极) | 各 15 | 保护 LED 与三极管 |
| 7805 稳压器 | TO-220 | 1 | 外部 12V 转 5V |
| 16 MHz 晶振 + 22pF 电容 | 各 1 | 裸片时钟源(可选) | |
| 10 μF 电解电容 | 1 | 电源滤波 | |
| 拨码/轻触开关 | 4 枚 | 4 | 时/分/12-24H/设定 |
| 12V/5A 电源适配器 | 1 | 整机供电 |
电路架构
RTC 模块接线
- VCC → 5V,GND → GND
- SDA → A4,SCL → A5
- SQW → 悬空(代码配置 1Hz 方波可外接 LED 指示)
六位数码管动态扫描驱动
采用 共阳极 数码管(代码默认),段选由 PNP 三极管上拉,位选由 NPN 三极管下拉。Arduino 依次选通每一位,写入段码,利用视觉暂留实现全亮无闪烁。若使用共阴极,需修改 SEGMENT_ON/OFF 宏定义并调整三极管极性。


按键功能定义
| 按键 | 引脚 | 功能 |
|---|---|---|
| SW0 | A0 | 长按进入设置模式 |
| SW1 | A2 | 设置模式下调整分钟 |
| SW2 | A1 | 设置模式下调整小时 |
| SWT | A3 | 切换 12/24 小时制 |
核心代码逻辑
库依赖
#include <Wire.h>
#include <RTClib.h> // Adafruit RTClib
关键数据结构
// 段码引脚映射
int seg[8] = {0,1,2,4,7,8,12,13}; // A,B,C,D,E,F,G,DP
// 位选引脚
int digit[6] = {11,10,9,6,5,3}; // D1~D6
// RTC 对象
RTC_DS1307 RTC;
主循环流程
- 读取 RTC 时间
DateTime now = RTC.now() - 根据 12/24H 标志格式化为
HHMMSS整数 - 三组
for(i=100; i>0; i--)循环分别调用displayNumber01~06,实现 6 位轮流扫描,每位亮度DISPLAY_BRIGHTNESS 25 μs - 检测按键:长按 SW0 进入设置子程序
set_time()
设置时间子程序 set_time()
- 读取当前时/分作为初值
- 按 SW2 递增小时(0-23),按 SW1 递增分钟(0-59)
- 实时在数码管显示设定值
- 再次按 SW0 确认写入 DS1307(I2C 写寄存器 0x00~0x06)
- 同时配置控制寄存器 0x07 = 0x10 开启 1Hz 方波输出
段码显示函数 lightNumber()
// 共阳极:HIGH 点亮,LOW 熄灭
// 共阴极:宏定义取反即可
switch(num) {
case 0: A,B,C,D,E,F=ON; G=OFF; break;
case 1: B,C=ON; 其余 OFF; break;
...
case 10: 全 OFF; break; // 消隐
}
电源设计
外部 12V → 7805 → 5V 供电 Arduino 与数码管驱动电路。7805 散热片建议加装,峰值电流约 1.2A(6 位全亮)。数码管段选电流约 5mA/段,总电流 < 1A,7805 余量充足。
制作实拍与效果




常见问题与优化
- 显示闪烁:扫描频率过低 → 减小
delayMicroseconds或用定时器中断 - 亮度不均:位选驱动能力不足 → 改用 ULN2803 / UDN2981 专用驱动 IC
- RTC 走时不准:晶振负载电容不匹配 → 换 12.5pF 负载晶振或软件校准
- 按键抖动:已在代码中加
delay(300)消抖,必要时加硬件 RC
代码获取
完整代码已内嵌于上方代码块,可直接复制到 Arduino IDE 编译上传。建议先单独测试 RTC 读写与数码管扫描,再整合。
制造工艺
- Arduino POV 时钟:自制视觉暂留 LED 显示器
- DIY Arduino单词时钟 – 极简优雅的实时文字显示
- 用 Arduino Nano 和 Nokia 5110 LCD 自制 20kHz 示波器:简易 DIY 指南
- 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
- 智能窗帘:基于Arduino与太阳能的自动光控系统
- 意大利语单词时钟:Arduino Nano + NeoPixel 144 灯珠 + LCD + RTC 打造
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- 从零构建智能 Arduino 四足机器人:完整指南
- 用 Arduino Pro Mini 与 DS1302 RTC 打造精准七段数码管时钟
- 基于Arduino MKR Fox 1200构建可靠Sigfox千瓦时电表
- Arduino 8×8 LED 矩阵翻页时钟 - DIY 实时时钟项目
- 为Arduino构建隔离模拟输入电路