如何使用Arduino对DS12C887时钟模块进行时间读写
搜了一下DS12C887的资料,最详细的是郭天祥关于这个模块的视频教程,教程中讲解了这个模块的使用手册和程序的编写,但是这个教程是在51单片机上讲的,由于51与Arduino的不同,把程序直接移植到Arduino上比较困难。
由于在网上没有搜到与这个时钟模块相关的Arduino库或基于arduino的教程,本人参考了一些资料,写出了Arduino下的程序,并成功进行了时间的读写,于是就把方法记录下来保存了。
本文将提供相应的接线方法以及程序。
先简单介绍一下DS12C887这个时钟模块:
可计算到2100年前的秒、分、小时、星期、日期、月、年七种日历信息并带闰年补偿;
自带晶体振荡器和锂电池。在没有外部电源的情况下可工作10年;
——百度百科
缺点:
地址/数据总线有8根,占用了很多IO口
相比1302,3231时钟模块体积更大,不适合装在小体积产品上
零件表
零件 | 数量 |
---|---|
arduino UNO | 1 |
arduino 拓展版 | 1 |
DS12C887模块 | 1 |
面包板 | 1 |
电池 | 1 |
杜邦线 | 若干 |
Arduino UNO+DS12C887接线
NC=not connect,就是不连接的意思。
MOT悬空即Inter总线模式,这里我们选用Inter总线模式,所以MOT引脚悬空。
DS12C887对应Arduino UNO引脚:
DS12C887 | UNO |
---|---|
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
10 | 10 |
11 | 11 |
12 | GND |
13 | 14(A0) |
14 | 15(A1) |
15 | 16(A2) |
17 | 17(A3) |
18 | VCC |
19 | 12 |
24 | VCC |
程序源码
1const int dscs=14;
2const int dsas=15;
3const int dsrw=16;
4const int dsds=17;
5const int dsirq=12;
6//define bidirectional address-data bus(定义双向地址总线)
7const int ad[8]={
4,5,6,