DS1307是一款低功耗,具有56字节非失性RAM的全BCD码时钟日历实时时钟芯片,地址和数据通过两线双向的串行总线的传输,芯片可以提供秒,分,小时等信息,每一个月的天数能自动调整。并且有闰年补偿功能。

Arduino上可以使用别人写好的库,但是我们也可以自己写一个简单的,正好拿来练练手。

观察DS1307芯片,不难发现有SDA和SCL两个引脚,那么通信总线应该是I2C。

第一部分 I2C通信

Arduino进行I2C总线通信时,通常需要写出以下关键程序。

//初始化void ds1307_init()
{pinMode(sda,OUTPUT);digitalWrite(scl,HIGH);delayMicroseconds(5);digitalWrite(sda,HIGH);delayMicroseconds(5);
}
//启动信号void ds1307_start()
{pinMode(sda,OUTPUT);digitalWrite(sda,HIGH);digitalWrite(scl,HIGH); delayMicroseconds(5);digitalWrite(sda,LOW);delayMicroseconds(5);
}
//等待应答void ds1307_waitack()
{ unsigned char i=255;pinMode(sda,INPUT);digitalWrite(scl,HIGH);while(digitalRead(sda) && i)i--;delayMicroseconds(5);digitalWrite(scl,LOW);
}
//停止信号void ds1307_stop()
{pinMode(sda,OUTPUT);delayMicroseconds(2);digitalWrite(sda,LOW);delayMicroseconds(5);digitalWrite(scl,HIGH);delayMicroseconds(5);digitalWrite(sda,HIGH);
}
//写1字节void ds1307_writeByte(unsigned char oneByte)
{pinMode(sda,OUTPUT);for(int i=0;i<8;i++){digitalWrite(scl,LOW); delayMicroseconds(1);if(oneByte & 0x80){digitalWrite(sda,HIGH);}else{digitalWrite(sda,LOW);}delayMicroseconds(1);oneByte=oneByte<<1;digitalWrite(scl,HIGH); delayMicroseconds(1);}digitalWrite(scl,LOW);delayMicroseconds(1);digitalWrite(sda,HIGH);delayMicroseconds(1);
}
//读1字节unsigned char ds1307_readByte()
{  pinMode(sda,INPUT);unsigned char dat=0;unsigned char tmp;for(int i=0;i<8;i++){digitalWrite(scl,LOW);delayMicroseconds(5);digitalWrite(scl,HIGH);tmp=digitalRead(sda);tmp=tmp<<7-i;dat=dat|tmp;delayMicroseconds(1);digitalWrite(scl,LOW);}return dat;
}

第二部分 DS1307时序

一.DS1307的内部地址如下:

00H-06H是我们需要的数据。

二.写入的时序如下:

启动信号-写入0xD0-等待ack-写入地址-等待ack-写入数据-等待ack-结束信号

地址是每写一个自动加1,写到0x06以后跳回0x00

因此程序如下:

void write_time()
{ds1307_init();ds1307_start();ds1307_writeByte(0xd0);ds1307_waitack();ds1307_writeByte(0x00);ds1307_waitack();  for(int i=0;i<7;i++){ds1307_writeByte(TIME[i]);ds1307_waitack();}ds1307_stop();
}

三.读取时序

和写入差不多,但要注意2点:

1.读取的地址是跟着写入地址的,也就是说如果上面的写入地址是0x01,读取的时候也是从0x01开始读,因此可以在读取之前先进行定位。

2.应答和非应答信号是单片机发送给DS1307的。

void read_time()
{ds1307_start();ds1307_writeByte(0xd1);ds1307_waitack();TIME[0]=ds1307_readByte();ds1307_sendack();TIME[1]=ds1307_readByte();ds1307_sendack();TIME[2]=ds1307_readByte();ds1307_sendack();TIME[3]=ds1307_readByte();ds1307_sendack();TIME[4]=ds1307_readByte();ds1307_sendack();TIME[5]=ds1307_readByte();ds1307_sendack();  TIME[6]=ds1307_readByte();ds1307_noack();ds1307_stop();
}void ds1307_noack()
{pinMode(sda,OUTPUT);digitalWrite(scl,LOW);delayMicroseconds(5);digitalWrite(sda,HIGH);delayMicroseconds(2);digitalWrite(scl,HIGH);delayMicroseconds(5);digitalWrite(scl,LOW);pinMode(sda,INPUT);
}void ds1307_sendack()
{pinMode(sda,OUTPUT);digitalWrite(scl,LOW); delayMicroseconds(5);digitalWrite(sda,LOW);delayMicroseconds(2);digitalWrite(scl,HIGH);delayMicroseconds(5);digitalWrite(scl,LOW);pinMode(sda,INPUT);
}

这样基本上就差不多了。

结尾

其实后面还有个坑,没注意到的话程序是读不出来的,卖个关子,呵呵

Arduino版简单的DS1307程序相关推荐

  1. 小程序源码:2022强大的修复版趣味心理测试小程序源码,趣味测试引流裂变神器-多玩法安装简单

    大家还记得以前有一款趣味测嚒? 那款趣味测试可以说在当时是只要当时做小程序的基本是人手一款 不过后来自从腾讯更新小程序登录接口以后,那款小程序也就和接口一起挂了 那么呢现在小编就给大家发布修复过的,修 ...

  2. 【程序源代码】vuejs版 简单驾考软件

      " 关键字: 开发框架 vuejs版 简单驾考软件"  正文:vuejs版 简单驾考软件 01 - 小程序 vuejs版 简单驾考软件 - 02 - 源码下载 https:// ...

  3. iphone软件创富密码之关于Cocoa版的Hello World程序

    关于Cocoa版的Hello World程序 几乎所有的介绍新语言的入门书籍或官方使用手册都会提供一个Hello World的小 例子.这里也不免俗,也给大家提供一个Hello World程序.但是这 ...

  4. html5pc转微信小程序,微信电脑版终于支持小程序 新版PC版微信实测

    PC版的微信终于要更新了,这次给用户带来了一个新的实用功能--支持小程序!一起来看看吧.此次PC版微信的升级版本为2.7.0,目前仍处于测试版阶段.PC版微信2.7.0测试版的安装包大小为85.3 M ...

  5. JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入)

    JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入) 开发流程:需求文档 接口文档 效果图 开发环境统一:JDK1.8 IDEA win10 GIT SSM SSH SpringB ...

  6. 趣味测评对话交互版流量主小程序开发

    趣味测评对话交互版流量主小程序开发 逻辑: 图文视频简单易做:-张吸引人的图片,配上引人参与的文字,实现视频引流. 通过测试口令引流:视频提供小程序入口和编号,可吸引粉丝进入小程序缠产生收益. 前端: ...

  7. 9.Unity2D 横版 简单AI 之 敌人跳跃条件优化+自动范围内检测敌人发起攻击(索敌)+对象池优化+主角受伤死亡

    总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1.动画animation和动画 ...

  8. 10.Unity2D 横版 简单AI 之 敌人随机移动+自动巡逻+障碍物跳跃+悬崖处转身+射线检测

    总目录 9.Unity2D 简单AI 之 敌人跳跃条件优化+自动范围内检测敌人发起攻击(索敌)+对象池优化+主角受伤死亡_ζั͡ ั͡雾 ั͡狼 ั͡✾的博客-CSDN博客Unity2D 简单AI 之 ...

  9. 教你如何选择商业版微商系统开发程序

    @微商系统开发 教你如何选择商业版微商系统开发程序 如果你准备进军社交电商领域,特别是微商领域,想要去快速的裂变代理商,让代理动销,你需要有一套自己的微商系统开发程序,因为数据必须保留在你自己的服务器 ...

最新文章

  1. Facebook高管:我们是科技公司 不是媒体公司
  2. 5.9、离散卷积的一般描述
  3. [BZOJ 1441]Min(裴蜀定理)
  4. 产品设计体会(2011)网络推广实战
  5. 递归算法的时间复杂度分析
  6. edittext实现自动查询,刷新listview
  7. 你的iOS静态库该减肥了
  8. 5个数中取三个数组合 不重复 php,PHP产生不重复随机数的5个方法总结
  9. Git如何生成多个ssh key添加到ssh-agent管理项目
  10. Unity2020.1新功能探路:Profiler相关更新
  11. 【个人笔记】OpenCV4 C++ 图像处理与视频分析 03课
  12. Eclipse,新建web项目后 出现jax-ws webservice
  13. uartz Spring与Spring Task总结
  14. linux声道切换,linux下怎么把数据分别给左右声道
  15. python怎么识别拼音-python+拼音
  16. 英特尔服务器主板型号哪里看,intel cpu型号参数如何查看
  17. java.lang.NumberFormatException For input string 错误及解决办法
  18. 计算机房间的英语,酒店客房状态常用英语
  19. 外网访问群晖NAS VMM搭建Openwrt的admin界面
  20. python12306爬虫_爬虫12306返回数据怎么解析

热门文章

  1. 棋牌行业开年第一站,阿里游戏云与你聊安全
  2. 【报告分享】全球教育智能化发展报告-德勤咨询(附下载)
  3. Unexpected use of file extention “js“ for “@/render/core/scale/index.js“
  4. 【DSP】理解并用MATLAB手动实现unwrap()
  5. An Overview of TVM and Model Optimization TE
  6. GIAC全球互联网架构大会
  7. 64位处理器_CAD安装包32位跟64位有什么区别吗?
  8. java greenfoot_的Java Greenfoot中,不能将文件
  9. 基于神经网络rnn模型心脏病特征预测心脏病
  10. 【硬件驱动】360驱动大师 v2.0.0.1660单文件网卡绿化版