2020-01-28用Arduino和DS1302时钟模块做个简易电子钟

今天更个ARDUINO从入门到创客带师第⑤弹 自制WIFI时钟 的简单番外,以前在实验室的时候刚入门的小白经常喜欢玩的用DS1302 DS1307+ATMEL332做外部时钟同步时间的简单教程

当然,还是基于ARDUINO

首先,关于ARDUINO咱就不用多说了吧,相信各位都懂是什么东西了,比51单片机先进,编程理念前卫,有封装好的库,小白非常容易上手搞制作之类的……

DS1302 芯片介绍

一个时钟芯片,可以设置和获取当前时间。 可以自动处理月份、闰年等信息。支持双电源,可以同时使用外接电源和电池同时供电。系统会自动选用电压较高的电源供电。一般模块接一个3v的纽扣电池, 联机使用接开发板上的外接电源,当外界电源断电后,就会使用纽扣电池供电。(然而模块不应该使用开发板上的5V电源,电压太高时钟会走的过快)

2020-01-28用Arduino和DS1302时钟模块做个简易电子钟_第1张图片

引脚定义

VCC1 和VCC2 ,双供电电源。

X1 和X2 接32768Hz晶振

SCLK和IO和RST共同完成通讯过程。 SCLK为通讯的时钟信号。当RST为高电平时,开始通讯。

写入逻辑

2020-01-28用Arduino和DS1302时钟模块做个简易电子钟_第2张图片

写入时间需要转换很多次的电平

2020-01-28用Arduino和DS1302时钟模块做个简易电子钟_第3张图片

读取也差不多少,总之是非常麻烦了

因此,ARDUINO环境带有了DS1302库 ,可以自动的来完成这种复杂重复的操作

#include

#include

DS1302 rtc(2, 3, 4); // RST, DAT, CLK

void getdatetime()

{

  Serial.println(rtc.getDateStr(FORMAT_LONG, FORMAT_LITTLEENDIAN, '/'));

  Serial.print(rtc.getDOWStr());

  Serial.print("    ");

  Serial.println(rtc.getTimeStr());

}

void setup()

{

  Serial.begin(9600);

  // 设置时间后, 需要注释掉设置时间的代码,并重新烧录一次. 以免掉电重新执行setup中的时间设置函数.

  rtc.halt(false);

  rtc.writeProtect(false);

  rtc.setDOW(SATURDAY);

  rtc.setTime(17, 22, 30);

  rtc.setDate(31, 12, 2016);

  rtc.writeProtect(true);

}

void loop()

{

  getdatetime();

  delay(1000);

}

接线图

2020-01-28用Arduino和DS1302时钟模块做个简易电子钟_第4张图片

1602可以无视了,在这个项目中我们可以用串口监视器来读取时钟数据,老式1602显示屏现在哪还有人用了,上期我们都用12864显示日期时间了好吗

虽然ARDUINO也有对1602显示屏的库就是了

2020-01-28用Arduino和DS1302时钟模块做个简易电子钟_第5张图片

作为一个番外我们并不需要太长的篇幅,简单介绍一下就完事

2020-01-28用Arduino和DS1302时钟模块做个简易电子钟_第6张图片

简单编译上传成功之后我们打开串口监视器

2020-01-28用Arduino和DS1302时钟模块做个简易电子钟_第7张图片

emmmmmmm,看来这个代码定义的时钟的时间停在了2016年

简单改一下

2020-01-28用Arduino和DS1302时钟模块做个简易电子钟_第8张图片

rtc.writeProtect(false);

  rtc.setDOW(TUESDAY);

  rtc.setTime(21, 05, 30);

  rtc.setDate(28, 1, 2020);

  rtc.writeProtect(true);

PS:英语的星期月份:星期一 Monday 缩写:Mon. 星期二 Tuesday 缩写:Tues. 星期三 Wednesday 缩写:Wed. 星期四 Thursday 缩写:Thur./Thurs. 星期五 Friday 缩写:Fri. 星期六 Saturday 缩写:Sat. 星期日 Sunday 缩写:Sun. (2)月份: 第一栏为英语月份的缩写。 一月 Jan. January 二月 Feb. February 三月 Mar. March 四月 Apr. April 五月 May. May 六月 Jun. June 七月 Jul. July 八月 Aug. August 九月 Sept. September 十月 Oct. October 十一月 Nov. November 十二月 Dec. December

总之改好之后再上传一次

2020-01-28用Arduino和DS1302时钟模块做个简易电子钟_第9张图片

这次没问题了

2020-01-28用Arduino和DS1302时钟模块做个简易电子钟_第10张图片

记得把设置时间的代码注释之后再上传一次,不然每次单片机开发板重新上电都会把时钟模块的时间设置为代码上写死的时间

2020-01-28用Arduino和DS1302时钟模块做个简易电子钟_第11张图片

那么它有什么用呢?当然有用了,现在这个1307模块就有了相对准确的时间,可以执行现在我们需要的记录时间的功能了。当我们把电脑关机,单片机开发板断电的时候,1307时钟模块的时间还是准的,而且因为内置了纽扣电池,所以它的时间虽然可能走的不精确,但是续航非常长,因此作为早期小白娱乐向项目还是有点实用意义的。

你可能感兴趣的:(2020-01-28用Arduino和DS1302时钟模块做个简易电子钟)