【22】实时时钟DS1302
本课资源下载
共 2 个资源课程笔记
本节目标概括
创建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"};23void main(void)4{5 RTC_Time t;6 xdata char showData[30] = {0};78 LCD_Init();9 DS1302_Init();1011 // 设置时间为 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);2122 while (1)23 {24 // 周期性读取当前时间25 delay(1000);26 DS1302_burst_read(&t);2728 // 显示日期 年-月-日 周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}