波特律动
课程中心/51单片机教程/【22】实时时钟DS1302

【22】实时时钟DS1302

本课资源下载
共 2 个资源
P22实时时钟DS1302

本节课的标准源代码工程/可供参考

V1.0压缩包73 KB
下载
DS1302Z

实时时钟芯片

PDF 文档9.5 MB
预览下载

课程笔记


本节目标概括

创建main.c > 编写点灯代码 > 编译HEX文件 > 下载到学习板 > 实时时钟现象


ds1302驱动库函数介绍
C语言
1// ds1302初始化函数
2void DS1302_Init(void);
3// 设置时间
4void DS1302_SetTime(RTC_Time *t);
5// 获取时间
6void DS1302_GetTime(RTC_Time *t);
7// 备注:Burst 传输就是发一次命令就循环连续读或写所有时钟/日期寄存器(一次性传输多个字节,区别于发一次命令读/写一个字节)
8// Burst 模式写时钟/日期寄存器
9void DS1302_burst_write(RTC_Time *t);
10// Burst 模式读时钟/日期寄存器
11void DS1302_burst_read(RTC_Time *t);
12//清除写保护
13void DS1302_ClearWriteProtect(void);


主函数:

  • 现象:LCD1602显示万年历(通过DS1302芯片实现RTC走时功能),初始日期配置为 2026-02-15 18:34:56 星期日
C语言
1xdata char *weekTable[7] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
2
3void main(void)
4{
5 RTC_Time t;
6 xdata char showData[30] = {0};
7
8 LCD_Init();
9 DS1302_Init();
10
11 // 设置时间为 2026-02-15 18:34:56 星期日
12 t.year = 26;
13 t.month = 05;
14 t.day = 26;
15 t.week = 2;
16 t.hour = 10;
17 t.min = 33;
18 t.sec = 00;
19 DS1302_ClearWriteProtect();
20 DS1302_burst_write(&t);
21
22 while (1)
23 {
24 // 周期性读取当前时间
25 delay(1000);
26 DS1302_burst_read(&t);
27
28 // 显示日期 年-月-日 周
29 sprintf(showData, "%04d-%02d-%02d %s", (int)t.year + 2000, (int)t.month, (int)t.day, weekTable[t.week - 1]);
30 LCD_ShowString(1, 1, showData);
31 // 显示时间 时:分:秒
32 sprintf(showData, "%02d:%02d:%02d", (int)t.hour, (int)t.min, (int)t.sec);
33 LCD_ShowString(2, 1, showData);
34 }
35}