用Arduino和DS1302时钟模块做个简易电子钟

ACFUN_AK 01-29 05:43 关注

3月13日至4月10日,参与美式复古征稿活动,分享硬核男士穿搭,赢取CULTIZM官网1000元免单奖励~

创作立场声明:简单容易

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

当然,还是基于ARDUINO

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

DS1302 芯片介绍

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


用Arduino和DS1302时钟模块做个简易电子钟



引脚定义


VCC1 和VCC2 ,双供电电源。 X1 和X2 接32768Hz晶振 SCLK和IO和RST共同完成通讯过程。 SCLK为通讯的时钟信号。当RST为高电平时,开始通讯。

写入逻辑


用Arduino和DS1302时钟模块做个简易电子钟


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


用Arduino和DS1302时钟模块做个简易电子钟


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

因此,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);

}

接线图


用Arduino和DS1302时钟模块做个简易电子钟


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

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


用Arduino和DS1302时钟模块做个简易电子钟


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


用Arduino和DS1302时钟模块做个简易电子钟


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


用Arduino和DS1302时钟模块做个简易电子钟


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

简单改一下


用Arduino和DS1302时钟模块做个简易电子钟


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

总之改好之后再上传一次


用Arduino和DS1302时钟模块做个简易电子钟


这次没问题了


用Arduino和DS1302时钟模块做个简易电子钟


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


用Arduino和DS1302时钟模块做个简易电子钟


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


展开阅读全文

打开App,查看更多好文内容
全部评论 (1)
奔IV程序猿
0
01-29 11:07

最近很高产呀

打开App,查看更多好文和评论
猜你喜欢
相关商品推荐
相关摘要
社区主页 文章详情
5
16
1
你已经点过赞了
新浪微博 QQ空间 微信好友 豆瓣
当前为触屏版
热门搜索