DS1307时钟模块使用记录

在网上买的一个模块,准备做外部的一个时钟,接入自己其他的项目中,以它的时间为基准,执行每半小时更新时间到其他产品中去

模块采用软件IIC方式读写,需给此模块VCC供5V电压

读写效果如下:

源代码:

DS1307.C

#include "DS1307.h"


//写一字节到对应地址去
unsigned char Write1307(unsigned char add, unsigned char dat) 
{
    unsigned char temp;
    
    temp = ((dat / 10) << 4) | (dat % 10);//转BCD码再写入1307
    IIC_Start();
    IIC_Send_Byte(0xd0);
    IIC_Wait_Ack();
    IIC_Send_Byte(add);
    IIC_Wait_Ack();
    IIC_Send_Byte(temp);
    IIC_Wait_Ack();
    IIC_Stop();
    return (0);
}

//读一字节
unsigned char Read1307(unsigned char add)
{
    unsigned char dat;
    IIC_Start();
    IIC_Send_Byte(0xD0);
    IIC_Wait_Ack();
    IIC_Send_Byte(add);
    IIC_Wait_Ack();
    IIC_Stop();
    IIC_Start();
    IIC_Send_Byte(0xD1);
    IIC_Wait_Ack();
    dat = IIC_Read_Byte(0x00); //地址0x00
    IIC_NAck();
    IIC_Stop();
    return dat;
}

//BCD转BIN函数
uint8_t BCD2BIN(char bcd)
{
    return (0xff & (bcd>>4))*10 +(0xf & bcd);
}

//读1307时间,*data:读缓存 ,data_len:缓存长度  ,data_type:0:hex模式   1:dec模式
void Read_1307_time(uint8_t *data,uint8_t data_len,uint8_t data_type)
{
  if((data_len!=7))
  {
    DEBUG_ASP("error -1 +%d\r\n",data_len);
    return ;
  }
  else if(data_type==0)//十六进制格式
  {
    data[0] = (Read1307(0x06) & 0xff);//年低2位
    data[1] = (Read1307(0x05) & 0x1F);//月
    data[2] =  (Read1307(0x04) & 0x3F);//日
    data[3] = (Read1307(0x02) & 0x3F);//时
    data[4] = (Read1307(0x01) & 0x7F);//分
    data[5] = (Read1307(0x00) & 0x7F);//秒
    data[6] = (Read1307(0x03) & 0x07);//星期
//    DEBUG_ASP("TIME(Hex): 20%02x-%02x-%02x %02x:%02x:%02x ,%02x\r\n", data[0], data[1], data[2], data[3], data[4], data[5], data[6]);
  }
  else//十进制模式
  {
    data[0] = BCD2BIN(Read1307(0x06) & 0xff);//年低2位
    data[1] = BCD2BIN(Read1307(0x05) & 0x1F);//月
    data[2] =  BCD2BIN(Read1307(0x04) & 0x3F);//日
    data[3] = BCD2BIN(Read1307(0x02) & 0x3F);//时
    data[4] = BCD2BIN(Read1307(0x01) & 0x7F);//分
    data[5] = BCD2BIN(Read1307(0x00) & 0x7F);//秒
    data[6] = BCD2BIN(Read1307(0x03) & 0x07);//星期
//    DEBUG_ASP("TIME(Dec): 20%02d-%02d-%02d %02d:%02d:%02d T:%02d\r\n", data[0], data[1], data[2], data[3], data[4], data[5], data[6]);
  }
}

//写1307时间,*data:写缓存 ,data_len:缓存长度  ,data_type:0:hex模式   1:dec模式
void Write_1307_time(uint8_t *data,uint8_t data_len,uint8_t data_type)
{ 
  if((data_len!=7))
  {
    DEBUG_ASP("error -1 +%d\r\n",data_len);
    return ;
  }
  else if(data_type==0)//十六进制格式
  {
    Write1307(0x06, BCD2BIN(data[0]));//年
    Write1307(0x05, BCD2BIN(data[1]));//月
    Write1307(0x04, BCD2BIN(data[2]));//日
    Write1307(0x02, BCD2BIN(data[3]));//时
    Write1307(0x01, BCD2BIN(data[4]));//分
    Write1307(0x00, BCD2BIN(data[5]));//秒
    Write1307(0x03, BCD2BIN(data[6]));//星期
  }
  else//十进制模式
  {
    Write1307(0x06, data[0]);//年
    Write1307(0x05, data[1]);//月
    Write1307(0x04, data[2]);//日
    Write1307(0x02, data[3]);//时
    Write1307(0x01, data[4]);//分
    Write1307(0x00, data[5]);//秒
    Write1307(0x03, data[6]);//星期
  }
}





void DS1307_init(void)
{
  IIC_Init(); 
	delay_ms(200);
//  uint8_t tempdata[7]={0x23,0x12,0x07,0x16,0x35,0x20,0x04};
//  Write_1307_time(tempdata,sizeof(tempdata)/sizeof(*(tempdata)),0);
}

void DS1207_TEXT(void)
{
  uint8_t tempdata[7];
  Read_1307_time(tempdata,sizeof(tempdata)/sizeof(*(tempdata)),0);
  DEBUG_ASP("TIME0: 20%02x-%02x-%02x %02x:%02x:%02x ,%02x\r\n", tempdata[0], tempdata[1], tempdata[2], tempdata[3], tempdata[4], tempdata[5], tempdata[6]);
}

DS1307.h

#ifndef __DS1307_H__
#define __DS1307_H__
#include "myiic.h"

void Read_1307_time(uint8_t *data,uint8_t data_len,uint8_t data_type);
void Write_1307_time(uint8_t *data,uint8_t data_len,uint8_t data_type);
extern void DS1307_init(void);
extern void DS1207_TEXT(void);

#endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/225744.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

持续集成交付CICD:GitLabCI 实现Sonarqube代码扫描

目录 一、实验 1.GitLabCI 代码扫描 二、问题 1.GitLab 执行sonar-scanner命令报错 一、实验 1.GitLabCI 代码扫描 &#xff08;1&#xff09;打开maven项目 &#xff08;2&#xff09;maven项目流水线调用公共库 &#xff08;3&#xff09;项目组添加token认证 &#xf…

电位器是什么

电位器 电子元器件百科 文章目录 电位器前言一、电位器是什么二、电位器的类别三、电位器的应用实例四、电位器的作用原理总结前言 电位器是一种可调节的电阻器,通过改变电位器的接触位置,可以改变电位器的电阻值,用于调节电路中的电流、电压、信号等参数。 一、电位器是什…

推荐5款很牛的Paas平台编译构建工具

发现市面上这方面的文章还比较少&#xff0c;来扩充一下。 常用的 PaaS 平台内的构建工具包括了以下这些&#xff1a; 一、AWS CodeBuild 托管在 AWS 云平台上&#xff0c;具有高可用性和弹性。支持多种编程语言和框架&#xff0c;包括 Java、Python、Node.js、Ruby 等。可以…

履带吊,笔记

0.前言 履带吊使用了与传统的门桥式起重机不同的技术路线。因为它是移动式设备&#xff0c;所以它的动力是燃油发动机。为了精确调控升降。它的整套动力系统似乎采用了某种液压传动系统。履带吊国内也有生产商。但是下文中&#xff0c;还是从国外的一款产品说起。这款产品的pd…

HarmonyOS开发工具DevEco Studio的下载和安装

一、DevEco Studio概述 一、下载安装鸿蒙应用开发工具DevEco Studio 开发鸿蒙应用可以从鸿蒙系统上运行第一个程序Hello World开始。 为了得到这个Hello World&#xff0c;你需要得到这个Hello World的源代码&#xff0c;源代码是用人比较容易看得懂的计算机编程语言规范写的…

2024黑龙江省职业院校技能大赛信息安全管理与评估样题第二三阶段

2024黑龙江省职业院校技能大赛暨国赛选拔赛 "信息安全管理与评估"样题 *第二阶段竞赛项目试题* 本文件为信息安全管理与评估项目竞赛-第二阶段试题&#xff0c;第二阶段内容包括&#xff1a;网络安全事件响应、数字取证调查和应用程序安全。 极安云科专注技能竞赛…

Java对象转Map

在和外部系统对接时&#xff0c;对方系统提供的SDK方法入参全是Map&#xff0c;没办法&#xff0c;只能想办法把对象转成Map。这里&#xff0c;借助了hutool的工具类&#xff0c;可以方便的通过反射获取对象的属性。引入hutool的maven配置&#xff1a; <dependency><g…

从霸总短剧的热播,看出海品牌如何巧妙利用短剧进行全球推广

近期&#xff0c;中国式“霸总”短剧在国外走红&#xff0c;看着这熟悉的剧情模式和作品结构&#xff0c;让一众国内网友震惊的同时&#xff0c;也为中国品牌的全球推广带来了新的思路和灵感。本文Nox聚星将和大家从霸总短剧在海外的热播出发&#xff0c;探讨出海品牌如何巧妙利…

附录2、vuepress自定义home页

# 1、vuepress的主体继承 # 2、创建覆盖的home页面 从Github官网仓库中拷贝文件 [外链图片转存中…(img-hpmT5V89-1701937211778)] # 3、修改需要的样式 # 效果 改之前 [外链图片转存中…(img-mCfFRWok-1701937211783)] 改之后 [外链图片转存中…(img-aeQg8j1B-170193721178…

几分钟在Ubuntu搭建本地Emlog博客网站并发布至公网无需购买域名服务器

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…

[MySQL] MySQL中的内置函数

本篇文章主要是对MySQL中常见的内置函数进行了详细解释。例如有日期类函数、字符串类函数、数学类函数等等。希望本篇文章会对你有所帮助。 文章目录 一、日期类函数 1、1 使用详解 1、2 实例演示 二、字符串函数 2、1 使用详解 2、2 实例演示 三、数学函数 四、其他函数 &…

Linux Docker 安装Nginx

1.21、查看可用的Nginx版本 访问Nginx镜像库地址&#xff1a;https://hub.docker.com/_/nginx 2、拉取指定版本的Nginx镜像 docker pull nginx:latest #安装最新版 docker pull nginx:1.25.3 #安装指定版本的Nginx 3、查看本地镜像 docker images 4、根据镜像创建并运行…

Linux学习笔记2

web服务器部署&#xff1a; 1.装包&#xff1a; [rootlocalhost ~]# yum -y install httpd 2.配置一个首页&#xff1a; [rootlocalhost ~]# echo i love yy > /var/www/html/index.html 启动服务&#xff1a;[rootlocalhost ~]# systemctl start httpd Ctrl W以空格为界…

2024年安防行业预测:5G与安防视频监控技术的5大关键趋势

5G技术是一项以前所未有的速度和可靠性提供数据传输的技术&#xff0c;它的出现将极大地促进安防视频监控技术的发展。随着5G技术的快速发展&#xff0c;安防视频监控系统将在多个方面迎来显著的改进和创新。伴随着2023年进入尾声&#xff0c;2024即将到来&#xff0c;那么在20…

静态住宅代理科普——实际应用场景以及如何配置?

住宅代理IP不仅是理论上的网络工具&#xff0c;它在多个实际应用场景中表现突出&#xff0c;极大地便利了用户的网络操作。接下来&#xff0c;将深入探讨住宅代理IP在市场调研、内容访问、社交媒体管理等方面的实际应用&#xff0c;揭示其在不同领域的实用价值。 ## 实际应用场…

【Java】实验三

实现加减乘除功能的计算器 实验要求 (1)界面包括菜单栏、显示区和按键区,参照附件中的计算器,如下: (2)功能要求:先实现加减乘除,其他功能根据自己的进度尽可能多地实现。附部分按键的功能说明: 1、C是清除键,功能是将之前输入的数字、计算结果等信息全部归零。…

常见动物经济手术3d模拟交互演示教学实现了教育资源的共享

动物常见病防治是兽医必备的技能&#xff0c;为了让实习兽医在上岗作业前拥有丰富的常见病防治经验。借助动物常见病防治VR虚拟仿真技术开展动物常见病防治VR模拟实操培训&#xff0c;能极大方便院校实训。 提高教学质量 传统的动物医学教学往往依赖于理论知识和实验室实践&…

深度学习实战64-人脸检测模型LFFD的搭建,LFFD模型的架构与原理的详细介绍

大家好,我是微学AI,今天给大家介绍一下深度学习实战64-人脸检测模型LFFD的搭建,LFFD模型的架构与原理的详细介绍。LFFD(Light and Fast Face Detector)模型是一种用于人脸检测的深度学习模型,其设计旨在实现轻量级和快速的人脸检测。本文将详细介绍LFFD模型的定义、优点、原…

word模板导出word文件

前期准备工作word模板 右键字段如果无编辑域 ctrlF9 一下&#xff0c;然后再右键 wps 直接 ctrlF9 会变成编辑域 pom.xml所需依赖 <dependencies> <!--word 依赖--> <dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId…