标题: 单片机DS1307时钟模块.H文件及具体使用说明(接线与程序) [打印本页]

作者: Hermeszzy    时间: 2019-3-7 21:25
标题: 单片机DS1307时钟模块.H文件及具体使用说明(接线与程序)
    由于单片机自身定时器精度不高,导致一些需较精准定时功能的设计要借助时钟芯片来完成。现在使用较普遍的一种是DS1302芯片,并且相关教程已经非常丰富。DS1307这款芯片也不乏爱好者们使用:DS1307是I2C总线接口的日历时钟芯片,片内有8个特殊寄存器和56B的SRAM,是一种低功耗BCD码的8引脚实时时钟芯片。具体可以显示年份,月份,星期,日期,时,分,秒,具有自动调节日期功能。    本人因之前要设计一款电子时钟购得了一个DS1307的时钟模块,在网上寻找使用教程时发现大多教程都是将这个模块的驱动程序夹杂在自己的完整程序里,对于一些程序阅读能力不强的爱好者们很不友好。所以经过查询资料及实践,我将DS1307时钟模块的驱动程序整理成了一个.H文件,方便广大电子爱好者们使用。

    关于这个模块的使用方法:①接线,以我的程序为例:SCL与SDA管脚分别接单片机(STC15)的P17和P16用于传输数据,SQ管脚接单片机的外部中断0(P32),DS和BAT可不管。②程序:在project里导入DS1307.H文件,main函数中调用初始化函数init(),语句ds1307_write_date(0xd0,0x07,0x10);”使SQ引脚输出1Hz的方波;最后在主程序中写外部中断0的程序:“
Seconds=ds1307_read_date(0xd0,0);//返回函数r值秒
Minutes=ds1307_read_date(0xd0,1);
Hours=ds1307_read_date(0xd0,2);
Seconds=BCD_to_Decimal(Seconds);//BCD码转换成十进制
Minutes=BCD_to_Decimal(Minutes);
Hours=BCD_to_Decimal(Hours);                                            ”,即每过1s就中断,从模块中读取一次时间数据。如有其他问题,欢迎在评论区讨论。

捕获.PNG (382.15 KB, 下载次数: 245)

捕获.PNG

DS1307.rar

1.45 KB, 下载次数: 469, 下载积分: 黑币 -5


作者: rrqxx    时间: 2019-3-8 20:16
谢谢楼主分享!
作者: isis69    时间: 2019-3-12 11:37
楼主用的STC15,用了延时程序。那么,主频是多少呢?IIC对时序有要求,没有主频的延时程序,没意义啊!
作者: Hermeszzy    时间: 2019-3-12 19:02
isis69 发表于 2019-3-12 11:37
楼主用的STC15,用了延时程序。那么,主频是多少呢?IIC对时序有要求,没有主频的延时程序,没意义啊!

11.0592MHz
作者: jingboxu    时间: 2019-3-14 11:10
感谢分享,学习学习。
作者: q1274701999    时间: 2019-3-15 09:38
感谢楼主分享
作者: 途中    时间: 2019-3-30 14:25
厉害厉害
作者: nmqxd520    时间: 2019-3-30 19:51
谢谢楼主
作者: cthaeo    时间: 2019-4-1 11:54
谢谢楼主!!真是好东西
作者: 全俊玮    时间: 2019-4-1 20:10
谢楼主分享!
作者: 全俊玮    时间: 2019-4-1 20:16
谢大哥分享
作者: Dotokeep    时间: 2019-4-12 13:37
感谢分享
作者: hls123    时间: 2019-4-12 16:33
可以和我自己的对比对比了,感谢
作者: 1324702424    时间: 2019-4-19 10:08
get感谢分享
作者: yzhbyyy    时间: 2019-4-19 12:55
谢谢楼主分享!
作者: qq767935023    时间: 2019-4-19 16:23

感谢分享,学习了
作者: 15677797316    时间: 2019-4-20 10:51
谢谢楼主的分享
作者: 脆枣树    时间: 2019-4-20 21:25
感谢分享,下载学习一下
作者: Rockgo    时间: 2019-5-8 23:05
学习一下, 感谢分享
作者: veda    时间: 2019-5-22 10:43

谢谢楼主的分享
作者: lclchyq    时间: 2019-5-22 13:34
谢LZ分享
作者: xjj7874    时间: 2019-5-22 20:27
大神辛苦了,感谢
作者: wxwk123    时间: 2019-5-23 14:16
谢谢楼主,辛苦了。
作者: stan1713    时间: 2019-5-28 18:41
学习了,感谢分享
作者: stan1713    时间: 2019-5-28 18:42
感谢分享学习一下

作者: jy20191218    时间: 2019-5-29 07:59
菜鸟,学习中,谢谢分享!
作者: hls123    时间: 2019-5-29 22:30
非常方便
作者: q1065406715    时间: 2019-6-3 21:53
谢谢分享,下载来学习下
作者: yang300126    时间: 2019-6-4 17:05
差的就是分啊,,,谢谢大佬!
作者: 紫色的云    时间: 2019-7-6 20:31
谢谢楼主的资料,
作者: 1491236951    时间: 2019-7-27 16:55
感谢楼主分享
作者: 枫树566    时间: 2019-7-28 14:55
我觉得写两个文件,一个是ds1307.c,另一个是ds1307.h。ds1307.c文件里写这个芯片的驱动程序,在ds1307.h中,写函数声明,模块化方便移植。
作者: 王杰    时间: 2019-8-1 23:36
有其他的代码吗?
作者: hl12345    时间: 2019-8-2 15:21
感谢分享,谢谢楼主
作者: 曲终    时间: 2019-8-2 20:02
有其他程序吗

作者: lxy999    时间: 2019-8-3 16:22
谢谢楼主分享!
作者: 泽文i    时间: 2019-8-5 10:25
谢谢楼主分享!
作者: 蜡笔小新10086    时间: 2019-9-3 22:14

谢谢楼主分享!
作者: alunli    时间: 2019-9-4 12:25
感谢楼主分享
作者: bsentn    时间: 2019-9-4 19:25
学习看了,强大,虽然还不是太理解
作者: hujj    时间: 2019-9-11 18:22
谢谢楼主的分享,我也正好买了与楼主相同的模块,正好可以参考借鉴楼主的资料。

作者: 窦加莘    时间: 2019-9-26 08:51
多谢楼主分享
作者: fyhhtgq    时间: 2019-9-26 22:05
时间精度不够,为什么不选择3231呢?我觉得1302真的该淘汰了!
作者: 欢迎新会员    时间: 2019-9-27 19:19
谢谢楼主分享
作者: 欢迎新会员    时间: 2019-9-27 19:20
谢谢楼主分享
作者: laoliang123    时间: 2019-11-7 20:07
谢谢楼主分享

作者: yext    时间: 2019-11-8 15:30
谢谢楼主。一般都是用1302的多,很少见到1307的资料。
作者: X1234561    时间: 2019-11-9 08:27
感谢分享,学习了!
还不是太理解!

作者: 多拉格    时间: 2019-12-10 12:41
感谢楼主的分享
作者: 安徽呀    时间: 2019-12-11 20:07
太棒了这个教程
作者: 安徽呀    时间: 2019-12-11 20:07
感谢楼主
作者: 我们不一样111    时间: 2019-12-16 11:25
谢谢楼主分享
作者: guangshi_wq    时间: 2020-2-1 23:03
楼主,那个24C32到底有什么作用呢?
作者: chenshaobin    时间: 2020-3-3 13:55
学习看了,非常强大,虽然还不是太理解
作者: fancunwu    时间: 2020-3-3 16:53
感谢楼主分享
作者: fancunwu    时间: 2020-3-3 16:53
感谢楼主分享
作者: 21411    时间: 2020-3-8 09:30
感谢楼主分享
作者: 771298749    时间: 2020-3-31 12:13
厉害了,萌新表示看不懂
作者: jeffphoon    时间: 2020-4-3 13:54
谢谢楼主分享!
作者: 太阳黑子1    时间: 2020-4-3 18:24
太感谢了,太强大了!
作者: 天天学习真好    时间: 2020-4-4 23:09
感谢这波分享
作者: 13764578747    时间: 2020-4-30 08:58
isis69 发表于 2019-3-12 11:37
楼主用的STC15,用了延时程序。那么,主频是多少呢?IIC对时序有要求,没有主频的延时程序,没意义啊!

延时不重要,官方资料是要延4.7us,即,哪怕用89c52,都需要5个nop。但是实际测试,24mhz的速率,stc8系列跑,两个nop延时都稳定无错。所以,只要你有停顿,延时多久一点没所谓。
作者: tianlai8624    时间: 2020-11-20 20:04
看了,强大,虽然还不是太理解
作者: 凡宁    时间: 2020-12-18 21:08
时钟芯片有哪些    一、 并行接口    MAXIM-DALLAS DS12C887 系列,现在已经衍生出很多型号了。    主要是几个大厂 MAXIM-DALLAS , PHILIPS ,日本精工。现在很多常见的 rtc 芯片 国内都有仿制的,价格还是不错的。要求不高的地方用还是不错的。    很多常见的型号在这里都能找到相对应的型号,包括 ds1302 , ds1307 , ds1337 , pcf8563    二、 串行接口    1、 I2C 接口 Phlilps 的 PCF8563 , PCF8583 EPSON 的 RX8025 内置晶振,误差小。比较不错 MAXIM-DALLAS 的 DS1307 RICOH 的 RS5C372 ,国内的贝岭仿制型号 BL5372 日本精工的S-35390 Intersil 的 X1288 深圳威帆电子公司出的 SD2000 系列,晶振,电池全部内置,体积较大。    2、 三线接口 MAXIM-DALLAS 的 DS1305 , DS1302 ,其中 DS1302 国内有相关的仿制产品, PTI 的仿制型号是 PT7C4302 。 台湾合泰的 HT1380 , HT1381 实时时钟,是单片机计时的时钟或独立的可被单片机访问的时钟。它可以外部扩展芯片得到,如 1302 , 1307 , 12887 , 3130 , 12020 , m41t81 , 6902 , 8025 。有并口有串口,有带电池自己玩,有外部供电,看实际需要设计。这些时钟无一例外地用到了 32768Hz 。这是因为它们用了同一个计时 IC 核、低频功耗更低、更容易校表和 1Hz 计时精密实现。大伙在该基础上做了不同的文章,有的搞点稳定晶振放里面,有的搞点备电方案,有的接口不同,有的搞点万年历,有的搞点报警,有的……    3、 还有可能你提到的 ( 可能就是 430 系列单片机 ) ,内部集成了 RTC 这个模块,要求外面接 32768Hz 。这样就可以独立地计时,单片机睡觉了也和它的时间管理无关,低成本实时方案,又省了好几毛 .    好了,以上就是时钟芯片的种类啦,相信以往对时钟芯片很陌生的朋友已经对时钟芯片有所了解,也对时钟零件的认识也更近了一步。很多时候,我们都会忽略我们身边的一些事物,因为经常见到以至习以为常,不会更深入地去想其他的东西。时钟就是这样,之前都只是被用作计时,很少回去细想时钟的结构,所以很少人对时钟芯片了解甚少。    时钟芯片的作用简介    什么是时钟芯片 ?    时钟芯片,顾名思义,其就是一种具有时钟特性,能够现实时间的芯片。时钟芯片属于是集成电路的一种,其主要有可充电锂电池、充电电路以及晶体振荡电路等部分组成,目前,被广泛的应用在各类电子产品和信息通信产品中。    时钟芯片有哪些作用 ? 目前,在市场所比较流行的时钟芯片有很多种,并且被广泛的使用。这些时钟芯片具有着价格低廉、使用方便、功能强大的作用。那么,时钟芯片到底有哪些作用呢 ?    时钟芯片的主要作用有:    一、时钟芯片具有显示时间与记录时间的功能作用。    时钟芯片最基本的作用就是显示时间和记录时间的时钟作用,而且时钟芯片的的时钟显示功能及其强大,可以显示出年、月、日、星期、时、分、秒所有的时间单位,而且时钟芯片还具有着精确的闰年补尝功能。    二、 时钟芯片具有闹铃作用。    在人们日常的生活中,闹铃最大的作用就是提醒时间。几乎全部的手机、电脑等科技产品都具有着闹铃设置功能,而闹铃之所以能够设置,其原因就是时钟芯片具有闹铃作用。    三、 时钟芯片具有数据记录作用。    锂电池是时钟芯片中的组成部件之一,并且在时钟芯片断电或者关机之后,锂电池可以通过芯片内部电路实现芯片供电,使时钟芯片在断电后仍可以运行很长一段时间,确保时钟芯片内部记录的数据不丢失。    四、 时钟芯片具有数据断电保护作用。    时钟芯片之作用能够记录和存储数据,是因为其内部有一个 RAM 单元,此 ram 单元一部分用于对时钟显示的控制,绝大一部用于单元数据的存储,而且此 RAM 单位具有着断电保护功能。    五、 时钟芯片具有很好的检测功能。    时钟 芯片 的接口较为简单,而且可以与多种软件连接,并且可以通过软件进行功能屏蔽,实现对其性能的测试。
作者: 1255230    时间: 2020-12-19 09:31
DS1302 跟这个芯片有什么功能上的差异吗
作者: hjkhkjhjgjh    时间: 2020-12-20 19:34
学到了
作者: countrymanks    时间: 2021-3-2 16:09
Arduino怎么用?能否请楼主给个例子,新手还是有点难,谢谢!
作者: usaboy    时间: 2021-3-4 06:55
太好了,感謝大俠分享,下載學習學習。
作者: usaboy    时间: 2021-3-4 06:57
真是好東西,難得的資料!
作者: aide51    时间: 2021-3-4 23:28
谢谢楼主的经验分享,真是好东西
作者: Cap_exucse    时间: 2021-4-7 20:43
感谢楼主分享,终于找到了一个完整的资源了,赶紧学习一下
作者: hegangyanyan    时间: 2021-4-9 14:56
学习看了,强大,虽然还不是太理解
作者: 方禾    时间: 2021-7-19 18:43
非常实用
作者: pq1972    时间: 2021-7-19 23:39
谢谢分享这么好的经验,马上也买一个,实践一下。

作者: feixue2007    时间: 2021-7-20 08:31
某一个宝卖家油模块和程序的
作者: Junny365    时间: 2021-7-22 10:11
I2C通信的,正好有一个,有空学学
作者: southwind1    时间: 2022-1-11 10:27
感谢楼主分享
作者: Similarv    时间: 2022-1-11 14:47
枫树566 发表于 2019-7-28 14:55
我觉得写两个文件,一个是ds1307.c,另一个是ds1307.h。ds1307.c文件里写这个芯片的驱动程序,在ds1307.h中 ...

你这样做才是对的,楼主的H文件甚至没有用#ifndef这样的宏来括起来
作者: 保持微笑    时间: 2022-1-11 16:40
都差不多,感觉时钟也不是很精确
作者: youlinys    时间: 2022-2-18 12:38
时钟准确度是受晶振的精度决定的吧。
作者: sfj    时间: 2022-3-7 14:35
外部中断0的程序是什么?
作者: youlinys    时间: 2022-3-8 09:41
DS1302芯片是个好东西。
作者: fhsgjsgjsfgjsfj    时间: 2022-3-8 10:59
还记得第一次用时钟芯片出了很多问题,当时自己确实要比现在白,原来的小白,现在是老白
作者: tjjgk    时间: 2022-7-15 12:29
感谢楼主分享!正在学习时钟模块
作者: tjjgk    时间: 2022-7-17 13:44
学习中最需要已下载,感谢楼主分享
作者: suiwinder    时间: 2022-7-18 14:30
精度可以达到多少?
作者: adhliang    时间: 2023-2-28 17:46
希望可以用,我来看卡
作者: 666777888484    时间: 2023-4-23 20:55
有大佬教学一下怎么让蜂鸣器播放音乐啊
作者: joyb    时间: 2023-4-25 08:44
666777888484 发表于 2023-4-23 20:55
有大佬教学一下怎么让蜂鸣器播放音乐啊

搜索下“两只老虎”什么的
作者: wskhsm    时间: 2023-5-27 13:12
1307我用过,精度了决于晶振,比1302少占一个IO口,不过网上的资料确实很少
作者: xdquan001    时间: 2025-5-21 10:42
好东西,下来学习学习,谢谢
作者: newforce    时间: 2025-5-21 21:07
感谢楼主分享
作者: 月盈    时间: 2025-6-10 10:04
谢谢楼主分享!
作者: xdquan001    时间: 2025-6-12 08:59
好东西,下载来学习下




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1