Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

MengFanjun的博客

我是在这篇文章的基础上进行修改的,那篇文章只进行了串口的打印,并没有在LCD1602上显示 # 一、电路连接 ## LCD1602IIC

LCD1602IIC引脚 Arduino引脚
VCC 5V
GND GND
SDA A4
SCL A5

我这里的LCD1602是IIC的,所以只需要4根线

在这里插入图片描述 ## DS1302

DS1302引脚 Arduino引脚
VCC 5V
GND GND
RST A0(14)
DAT A1(15)
SCK A2(16)

二、代码

记得提前安装DS1302的库 DS1302

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <DS1302.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //引用I2C库

char buf1[50];
char buf2[50];

//设置LCD1602设备地址,这里的地址是0x27,一般是0x20,或者0x27,具体看模块手册
LiquidCrystal_I2C lcd(0x27,16,2); //这里是0x27
DS1302 rtc(14, 15, 16); //对应DS1302的RST,DAT,CLK

void initRTCTime(void)//初始化RTC时钟
{
rtc.writeProtect(false); //关闭写保护
rtc.halt(false); //清除时钟停止标志
Time t(2022, 12, 15, 17, 21, 50, 4); //新建时间对象 最后参数位星期数据,周日为1,周一为2以此类推
rtc.time(t);//向DS1302设置时间数据
}

void printTime()//打印时间数据
{
Time tim = rtc.time(); //从DS1302获取时间数据

snprintf(buf1, sizeof(buf1), "%04d-%02d-%02d ",
tim.yr, tim.mon, tim.date
);
snprintf(buf2, sizeof(buf2), "%02d:%02d:%02d",
tim.hr, tim.min, tim.sec);

Serial.println(buf1);
Serial.println(buf2);
}

void setup() {
Serial.begin(9600);

//新模块上电需要设置一次当前时间,
//下载完成后需屏蔽此函数再次下载,否则每次上电都会初始化时间数据
initRTCTime();
lcd.init(); // 初始化LCD
lcd.backlight(); //设置LCD背景等亮

lcd.setCursor(0,0);
lcd.print(" Clock ");
delay(2000);
lcd.clear();

}

void loop() {
printTime();
delay(1000);

Time tim = rtc.time(); //从DS1302获取时间数据
lcd.setCursor(0,0);
lcd.print(buf1);
lcd.setCursor(0,1);
lcd.print(buf2);
}

三、效果

请添加图片描述

评论