找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8311|回复: 21
打印 上一主题 下一主题
收起左侧

DS3231模块配合stc89c52程序与原理图

  [复制链接]
跳转到指定楼层
楼主
这一阶段一直在学习宋雪松老师的书,感觉写的很棒,在普中开发板上写了DS1302的时钟(虽然很渣,自带的时钟芯片还有问题),心血来潮买了个时钟模块DS2321,买来不会用卖家提供的是Arduino的程序,源程序网上很多,但总想自己写,看了半天的DS2321时序图恍然大悟——这不是IIC时序么,赶紧把之前写的IIC文件拿过来,写了个下载进去,时钟不动,检查了一下是器件地址多加了<<1,改完走的一溜一溜的,程序名字是DS1302,因为是从1302改过来的,名字懒得改,并不是挂羊头卖狗肉可以放心食用


单片机源程序如下:
  1. #include <reg52.h>
  2. #include<intrins.h>
  3. typedef unsigned int u16;
  4. typedef unsigned char u8;

  5. struct sTime
  6. {
  7.         u16 year;
  8.         u8 mon;
  9.         u8 day;
  10.         u8 hour;
  11.         u8 min;
  12.         u8 sec;
  13.         u8 week;
  14. };

  15. extern void I2CStar();
  16. extern void I2CStop();
  17. extern bit I2CWrite(u16 dat);
  18. extern u8 I2CReadNAK();
  19. extern u8 I2CReadACK();

  20. void DS1302Read(u8 *buf,u8 addr,u8 len)                        //读EEPROM中duo字节
  21. {
  22.         do{
  23.                 I2CStar();
  24.                 if(I2CWrite(0xD0))
  25.                 {
  26.                         break;
  27.                 }
  28.                 I2CStop();
  29.           }while(1);
  30.         I2CWrite(addr);
  31.         I2CStar();
  32.         I2CWrite((0xD0)|0x01);  //寻址,读操作
  33.         while(len>1)
  34.         {
  35.                 *buf++=I2CReadACK();
  36.                 len--;
  37.         }
  38.         *buf=I2CReadNAK();                   //读一个字节
  39.         I2CStop();
  40. }

  41. void DS1302Write(u8 *buf,u8 addr,u8 len)
  42. {
  43.         while(len>0)
  44.         {       
  45.                 do{
  46.                         I2CStar();
  47.                         if(I2CWrite(0xD0))
  48.                         {
  49.                                 break;
  50.                         }
  51.                         I2CStop();
  52.                   }while(1);

  53.                 I2CWrite(addr);
  54.                 while(len>0)
  55.                 {
  56.                         I2CWrite(*buf++);
  57.                         len--;
  58.                         addr++;
  59.                         if((addr&0x07)==0)
  60.                         {
  61.                                 break;
  62.                         }
  63.                 }
  64.                 I2CStop();
  65.         }
  66. }

  67. void GetRealTime(struct sTime *time)
  68. {
  69.          u8 buf[8];
  70.          
  71.          DS1302Read(buf,0x00,7);

  72.          time->year=buf[6]+0x2000;
  73.          time->mon=buf[5];
  74.          time->day=buf[4];
  75.          time->week=buf[3];
  76.          time->hour=buf[2];
  77.          time->min=buf[1];
  78.          time->sec=buf[0];

  79. }

  80. void SetRealTime(struct sTime *time)
  81. {
  82.          u8 buf[8];

  83.          buf[7]=0;
  84.          buf[6]=time->year;
  85.          buf[5]=time->mon;
  86.          buf[4]=time->day;
  87. ……………………

  88. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
DS3231可校时,1602.zip (327.15 KB, 下载次数: 369)


评分

参与人数 2黑币 +55 收起 理由
A17094430 + 5 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶4 踩
回复

使用道具 举报

沙发
ID:48140 发表于 2018-4-25 13:29 | 只看该作者
下载学习一下
回复

使用道具 举报

板凳
ID:78901 发表于 2018-6-7 23:14 | 只看该作者
楼主辛苦了,下载学习一下
回复

使用道具 举报

地板
ID:392520 发表于 2018-9-2 08:40 | 只看该作者
谢谢代码
回复

使用道具 举报

5#
ID:392520 发表于 2018-9-2 10:56 | 只看该作者
谢谢代码
回复

使用道具 举报

6#
ID:393260 发表于 2018-10-25 11:43 来自手机 | 只看该作者
辛苦了楼主,刚好用3231自己懒得写,福利啊
回复

使用道具 举报

7#
ID:428494 发表于 2018-11-17 23:38 | 只看该作者
谢谢楼主分享。。。。。我以后下载了试一下能不能成功。。。。。。。。。。。
回复

使用道具 举报

8#
ID:428494 发表于 2018-11-18 19:08 | 只看该作者
楼主,我想问问那个附件的代码哪一段是跟你上面这个代码连接在一起的啊。。。。。。。。。还有附件里面的main函数是什么啊。。。。。。
回复

使用道具 举报

9#
ID:138285 发表于 2018-11-25 11:43 | 只看该作者
支持原创,为何发不了
回复

使用道具 举报

10#
ID:182535 发表于 2019-5-13 09:00 | 只看该作者
DS1302   什么玩意  浪费积分
回复

使用道具 举报

11#
ID:184096 发表于 2019-5-20 12:07 | 只看该作者
感谢楼主 哈哈哈哈
回复

使用道具 举报

12#
ID:542749 发表于 2019-5-20 13:12 | 只看该作者
资料很给力!
回复

使用道具 举报

13#
ID:412994 发表于 2019-6-1 21:56 | 只看该作者

下载学习一下
回复

使用道具 举报

14#
ID:356562 发表于 2020-1-7 20:59 | 只看该作者
非常好的资源。
回复

使用道具 举报

15#
ID:59151 发表于 2020-1-23 12:07 | 只看该作者
我也买了一块3231模块,但一直没空动它,趁年假来弄下,谢谢你分享的资料
回复

使用道具 举报

16#
ID:634587 发表于 2020-1-30 21:01 | 只看该作者
我也是在用普中的开发板学习中,DS3231模块也买了,正好拿来学习一下,谢谢楼主了。
回复

使用道具 举报

17#
ID:299748 发表于 2020-1-30 21:47 | 只看该作者
1302和3231是通用的吗??
回复

使用道具 举报

18#
ID:656304 发表于 2020-1-31 14:45 | 只看该作者
感谢分享
回复

使用道具 举报

19#
ID:696160 发表于 2020-2-21 17:04 | 只看该作者
jonah 发表于 2020-1-30 21:47
1302和3231是通用的吗??

得查资料才能确定,但是3231比1302精度高是肯定的
回复

使用道具 举报

20#
ID:138343 发表于 2020-2-22 17:32 | 只看该作者
疫情在家盘单片机,以前买的模块看了商家给的是c++的代码,能在论坛上找到这个真是太好了,谢谢楼主分享。
回复

使用道具 举报

21#
ID:562099 发表于 2020-10-6 11:16 | 只看该作者
同样是普中的,新手多多指教,下载程序用不了。
回复

使用道具 举报

22#
ID:726559 发表于 2020-11-26 16:27 | 只看该作者
看看~学习一下怎么用时钟芯片
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表