资料链接如下:
BD网盘链接:
https://pan.baidu.com/s/1IsFqi-bdPQcilu71JMrsVA
提取码:n99y
1. DS1302是一款集成了实时时钟(RTC)功能的芯片。RTC是一种能够精确测量和跟踪时间的电子设备,可以提供准确的日期和时间信息。DS1302实时时钟芯片由Maxim Integrated(美信半导体)生产,具有以下主要特点:
①时钟精度:DS1302采用32.768kHz的晶体振荡器来提供基准时钟信号。它具有较高的时钟精度,使得它可以提供准确的时间信息,每月的时间偏差非常小。
②时钟和日历功能:DS1302可以跟踪秒、分钟、小时、日期、月份和年份。它提供了完整的时钟和日历功能,可以准确地记录时间和日期。
③低功耗设计:DS1302芯片采用了低功耗设计,因此在电池供电时可以提供长时间的运行时间。
④数据保持功能:DS1302具有数据保持功能,使得即使在电源断电的情况下,时钟和日历数据仍然可以得到保持,确保数据的可靠性和连续性。
⑤简化的接口:DS1302通过串行接口(2线或3线),与微控制器或其他外部设备进行通信。这种简化的接口使得它更容易与其他系统集成,实现实时时钟功能。
DS1302实时时钟芯片被广泛应用于各种应用领域,如电子设备、仪器仪表、自动化系统、安防系统等需要准确时间信息的场合。它的易用性、低功耗以及稳定的性能使得它成为常用的实时时钟解决方案之一。
2.本实验用到了CW32 Cortex-M实训套件实验箱、DS1302实时时钟模块及Keil5开发环境。
CW32 Cortex-M实训套件
DS1302实时时钟模块实物
DS1302原理图
3.DS1302具体工作原理可观看视频,或参考以下链接中的文章
https://blog.csdn.net/u013184273/article/details/78843881
4.核心代码
/*
用TFT屏幕显示年、月、日、星期、时、分、秒
显示界面如下:
----------------
DS1302 Real Time
Year :xxxx
Month:xx
Day :xx
Week :xx
xx:xx:xx
----------------
*/
#include "main.h"
#include "config.h"
#include "Ds1302.h" //DS1302底层驱动代码
#include "Lcd_Driver.h"
#include "LCD_calculate.h"
char strings[2]; //储存要显示的数字
int main()
{
u8 value = 0;
RCC_Configuration(); //配置时钟
Lcd_Init();
Lcd_Clear(GRAY0);
Ds1302_GPIO_Init(); //GPIO配置
// Ds1302_Config(23,7,7,5,14,58,55); //初始化DS1302,2023年7月7日星期五23点59分55秒
Gui_DrawFont_GBK16(0,0,WHITE,RED,"DS1302 Real Time"); //显示界面
Gui_DrawFont_GBK16(0,32,WHITE,RED,"Year :20 ");
Gui_DrawFont_GBK16(0,48,WHITE,RED,"Month: ");
Gui_DrawFont_GBK16(0,64,WHITE,RED,"Day : ");
Gui_DrawFont_GBK16(0,80,WHITE,RED,"Week : ");
Gui_DrawFont_GBK16(0,96,WHITE,RED," : : ");
while(1)
{
Ds1302_GetHour(&value); //小时
sprintf(strings,"%d",value/10);
Gui_DrawFont_GBK16(0,96,WHITE,RED,strings);
sprintf(strings,"%d",value%10);
Gui_DrawFont_GBK16(8,96,WHITE,RED,strings);
Ds1302_GetMinite(&value); //分钟
sprintf(strings,"%d",value/10);
Gui_DrawFont_GBK16(24,96,WHITE,RED,strings);
sprintf(strings,"%d",value%10);
Gui_DrawFont_GBK16(32,96,WHITE,RED,strings);
Ds1302_GetSecond(&value); //秒钟
sprintf(strings,"%d",value/10);
Gui_DrawFont_GBK16(48,96,WHITE,RED,strings);
sprintf(strings,"%d",value%10);
Gui_DrawFont_GBK16(56,96,WHITE,RED,strings);
Ds1302_GetDay(&value); //星期
sprintf(strings,"%d",value/10);
Gui_DrawFont_GBK16(40+8,80,WHITE,RED,strings);
sprintf(strings,"%d",value%10);
Gui_DrawFont_GBK16(48+8,80,WHITE,RED,strings);
Ds1302_GetDate(&value); //日期
sprintf(strings,"%d",value/10);
Gui_DrawFont_GBK16(32+16,64,WHITE,RED,strings);
sprintf(strings,"%d",value%10);
Gui_DrawFont_GBK16(40+16,64,WHITE,RED,strings);
Ds1302_GetMonth(&value); //月份
sprintf(strings,"%d",value/10);
Gui_DrawFont_GBK16(48,48,WHITE,RED,strings);
sprintf(strings,"%d",value%10);
Gui_DrawFont_GBK16(55,48,WHITE,RED,strings);
Ds1302_GetYear(&value); //年份
sprintf(strings,"%d",value/10);
Gui_DrawFont_GBK16(56+8,32,WHITE,RED,strings);
sprintf(strings,"%d",value%10);
Gui_DrawFont_GBK16(64+8,32,WHITE,RED,strings);
}
}
5.实验最终现象
把程序下载进DS1302模块,DS1302经过程序初始化后将开始计时。
实验箱接线
显示时间
断电30s重新上电
来源:CW32生态社区
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。