#include <Wire.h> // 引入 I2C 库
#include <LiquidCrystal_I2C.h> // 引入 I2C LCD 库
#include <DS1307RTC.h> // 引入 DS1307 RTC 库
LiquidCrystal_I2C lcd(0x27, 16, 2); // 使用 I2C 地址 0x27, 16x2 字符的 LCD
void setup() {
Serial.begin(9600); // 初始化串口通信
lcd.init(); // 初始化 LCD
lcd.backlight(); // 打开背光
setSyncProvider(RTC.get); // 同步 RTC
if(timeStatus() != timeSet) {
Serial.println("Unable to sync with the RTC");
} else {
Serial.println("RTC has set the system time");
}
}
void loop() {
tmElements_t tm; // 定义時間元素結構體
if (RTC.read(tm)) { // 讀取時間
lcd.setCursor(0, 0); // 设置游標位置
lcd.print("Time: ");
print2digits(tm.Hour); // 輸出小時
lcd.print(":");
print2digits(tm.Minute); // 輸出分鐘
lcd.print(":");
print2digits(tm.Second); // 輸出秒
lcd.setCursor(0, 1); // 移動到第二行
lcd.print("Date: ");
lcd.print(tm.Day); // 輸出日期
lcd.print("/");
lcd.print(tm.Month); // 輸出月份
lcd.print("/");
lcd.print(tmYearToCalendar(tm.Year)); // 輸出年份
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
delay(9000); // 等待9秒後再重新讀取時間
}
delay(1000); // 每隔1秒更新時間
}
void print2digits(int number) { // 打印時間,如果小於 10,補零
if (number >= 0 && number < 10) {
lcd.print("0"); // 補零
}
lcd.print(number); // 打印時間
}