多显示模式 LCD 闹钟:可自定义表盘与生物节律
组件与物料
| 组件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | 若用自制 PCB,需 ATmega328P-DIP、16MHz 晶振、2×22pF 电容、7805 稳压、100µF/16V、3×0.1µF、1µF 电容 |
| 10 kΩ 电阻 | 4 | |
| 470 Ω 电阻 | 1 | |
| Adafruit 1602 LCD (白字蓝底) | 1 | |
| 无源蜂鸣器 | 1 | |
| 10 µF 电解电容 | 1 | |
| DS1302 RTC 模块 | 1 | |
| 32.768 kHz 晶振 | 1 | RTC 专用 |
| CR2032 纽扣电池 + 座 | 1 | PCB 版建议用 CR1220 |
| 倾斜开关 (汞开关) | td>1 | 用于翻转关闭闹钟 |
| 10 kΩ 微调电位器 | 1 | LCD 对比度调节 |
所需工具
- 3D 打印机(打印外壳)
软件
- Arduino IDE
项目详解
作者在网上看到许多 1602 LCD 时钟实现,决定把它们整合成一个支持多种显示风格的综合时钟。新版 10 款表盘已发布,详见链接。
功能特性
- 8 种显示风格(标准、双行粗体、斜角、Trek、细体、文字、生物节律、温湿度)
- 设置时间、日期、生日、闹钟
- 汞倾斜开关翻转关闭闹钟
- 背光自动控制(可配置常亮/关闭/超时)
- DHT21 温湿度传感器支持
面包板原型

电路简洁,DHT21 接 D9(图中未画)。烧录草图即可运行。
操作说明
三按键:SETUP、INCREMENT、DECREMENT,外加倾斜开关。
- 背光关闭时,任意键点亮;背光亮起 10 秒无操作自动熄灭(可改)。
- SETUP:进入设置菜单,光标指示可修改项(时/分/日/月/年/生日/闹钟时/分),再按循环。
- INCREMENT:非设置态下切换显示风格。
- DECREMENT:非设置态下开关闹钟。
- 倾斜开关:闹铃响时翻转或按任意键停止。


成品制作(PCB + 3D 外壳)
从面包板进阶需自制 PCB(附 Eagle 文件),采用碳粉法或商业打板。注意 LCD 用弯针排针连接 PCB,建议双面通孔板以便焊接后再装壳。
元件选型:ATmega328P-DIP + 16MHz 晶振 + 22pF×2,7805+100µF 供电,DS1302+32.768kHz 晶振,蜂鸣器经 10µF 直流隔离,电阻 1/8W 或 1/4W,汞开关 5mm 直径,背板三个 6×6mm 轻触开关(13mm 柄)。


外壳 3D 打印(0.2mm 层高,无支撑),PCB 安装孔 2.5mm 钻孔攻 M3 螺纹,用 M3×6 螺丝固定。PCB 固定孔扩至 4mm 便于对齐按键。

致谢
本项目融合多位 Maker 的成果:基础闹钟代码来自 Michalis Vasilakis;双行粗/细体字体来自 Arduino World;斜角字体来自 Arduino Forum;Trek 字体来自 Carrie Sundra;文字时钟概念来自 LAGSILVA;生物节律时钟来自 John Bradnam;天气时钟来自 ARDUinoautoMOTIVE。
更新日志
- 2020-06-29:修正文字时钟拼写,增加背光控制宏,超时 5→10 秒。
- 2020-11-23:增加生日设置与 EEPROM 存储,新增生物节律表盘(23 天体能、28 天情绪、33 天智力三周期柱状图),重构设置代码。
- 2020-12-06:增加 DHT21 支持,新增温湿度表盘,PCB 增加 3Pin 接口。


代码
DigitalClockAlarmV7.ino (C/C++)
完整代码含 8 种显示模式驱动、RTC 同步、EEPROM 存储、闹钟逻辑、DHT21 读取、生物节律计算等。关键片段:
/* 1602 LCD 闹钟 - John Bradnam */
#include <Wire.h>
#include <TimeLib.h>
#include <DS1302RTC.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <dht.h>
#define LIGHT 2
#define LCD_D7 3
#define LCD_D6 4
#define LCD_D5 5
#define LCD_D4 6
#define LCD_E 7
#define LCD_RS 8
#define BTN_SET A0
#define BTN_ADJUST A1
#define BTN_ALARM A2
#define BTN_TILT A3
#define SPEAKER 11
#define DHT21 9
#define RTC_CE 10
#define RTC_IO 12
#define RTC_SCLK 13
LiquidCrystal lcd(LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
DS1302RTC rtc(RTC_CE, RTC_IO, RTC_SCLK);
dht DHT;
enum STYLE { STANDARD, DUAL_THICK, DUAL_BEVEL, DUAL_TREK, DUAL_THIN, WORD, BIO, THERMO };
STYLE currentStyle = STANDARD;
// ... EEPROM 地址定义、自定义字符、字体数组 ...
void setup() {
Serial.begin(115200);
// 引脚模式、RTC 初始化、读取 EEPROM 闹钟/生日/风格
// BLE 无,直接按键设置时间
// 初始化对应风格的自定义字符
}
void loop() {
readBtns(); getTimeDate(); getTempHum();
if (!setupScreen) {
lcdPrint(); if (alarmON) callAlarm();
#ifdef BACKLIGHT_TIMEOUT
if (backlightOn && millis() > backlightTimeout) switchBacklight(false);
#endif
} else {
timeSetup(); switchBacklight(true);
}
}
// ... 按键处理、时间读取、温湿度读取、背光控制、各风格绘制函数 ...
// 生物节律计算:基于生日天数对 23/28/33 取模,映射为柱状图高度
// 文字时钟:数字转英文单词(HUNDRED, ONE... TWENTY, THIRTY...)
完整代码请下载附件 DigitalClockAlarmV7.ino。
自定义零件与外壳
stl_files_ZuDXHCHZCl.zip原理图与 PCB
eagle_files_ZN59zdeNf5.zip
制造工艺
- 树莓派 2 无头模式水浸报警器:基于 Adafruit T‑Cobbler Plus 构建
- Arduino Nano飞行模拟2020控制面板——LCD与CDI显示
- 智能动作触发闹钟:赖床不再,起床有保障
- 复古 Numitron 管时钟:Arduino Nano 驱动,低温可靠省电
- 自制 Arduino 伊斯兰祷告时间实时时钟
- 精准文字时钟:分钟级文字显示时间
- Arduino Due 驱动 3.2″ TFT 实现温度监测与实时时钟
- TM1637 数码管时钟:Arduino Nano 实现时间设定与闹钟
- Arduino UNO 驱动 1.17 英寸 TFT 屏显示图片 (SD 卡读取)
- Arduino 实时天气时钟:OLED 显示时间、日期与温度
- 基于 Arduino 的户外温度计:趋势指示、最高/最低温度记录
- 用 DS1302 RTC 和 Arduino UNO 制作可靠闹钟