【2020-10-28】DS12C887+驱动
STM32F103ZET6对DS12C887+时间模块的驱动
对于项目的一个小模块部分,如果因为驱动程序的问题而半天不能正常操作,这样的事还是挺令人抓狂的,在此整理出DS12C887+时间模块的驱动程序,属于大家的参考,也属于自己的积累。
DS12C887+的基本功能大家应该都了解,不太了解的可以百度下,这里就根据手册附上一些特别有用的内容哈!
在EDIP封装的引脚图上有6个悬空引脚,在实际的芯片上这些引脚也都是没有的。
首先是头文件:
#ifndef __DS12C887_H
#define __DS12C887_H
#include "sys.h"
/************************************
AD0-AD7——>PF0-PF7
IRQ——>PE0 中断中断请求输出,低电平有效
CS——>PE1
AS——>PE2
RW——>PE3
DS——>PE4SQW 方波输出MOT 总线时序选择,接地,1:Motorola模式,0:Intel模式。
RST 复位脚,接VCC
************************************/
#define DS12C887_CS PEout(1) //片选
#define DS12C887_AS PEout(2) //上升沿锁存,下降沿清除
#define DS12C887_RW PEout(3) //1读,0写
#define DS12C887_DS PEout(4) //读允许位//PF0~7作为数据线
#define DS12C887_DATAOUT(x) GPIO_Write(GPIOF,x);//数据输出
#define DS12C887_DATAIN GPIO_ReadInputData(GPIOF)&0x00ff;//数据输入//IO方向设置
#define DS12C887_DATE_IN() {GPIOF->CRL&=0xf00000000;GPIOF->CRL|=0x88888888;GPIOF->ODR|=0xff;} //上拉输入
#define DS12C887_DATE_OUT() {GPIOF->CRL&=0xf00000000;GPIOF->CRL|=0x33333333;} //推挽输出void Write_DS12C887(u8 add,u8 date);//写数据
u8 Read_DS12C887(u8 add); //读数据
void Read_DS12C887Date(u8 *temp0); //读时间
void DS12C887_Init(void); //初始化#endif
除了VCC和GND接到电源外,通常MOT接地选用Motorola操作模式,RST复位脚接VCC。
接下来是源代码:
#include "ds12c887.h"
#include "delay.h"
void Write_DS12C887(u8 add,u8 date)
{DS12C887_CS=0;DS12C887_AS=1;DS12C887_DS=1;DS12C887_RW=1;DS12C887_DATE_OUT();DS12C887_DATAOUT(add);delay_us(100);DS12C887_AS=0;DS12C887_RW=0;DS12C887_DATAOUT(date);delay_us(100);DS12C887_RW=1;DS12C887_AS=1;DS12C887_CS=1;}
u8 Read_DS12C887(u8 add)
{u8 DS12C887_DATE;DS12C887_AS=1;DS12C887_DS=1;DS12C887_RW=1;DS12C887_CS=0;DS12C887_DATE_OUT();DS12C887_DATAOUT(add);delay_us(100);DS12C887_AS=0;DS12C887_DS=0;DS12C887_DATAOUT(0xff);DS12C887_DATE_IN();DS12C887_DATE=DS12C887_DATAIN;DS12C887_DS=1;DS12C887_AS=1;DS12C887_CS=1;return DS12C887_DATE;
}
//写入一个7字节数组,年/月/日/星期/时/分/秒
void Read_DS12C887Date(u8 *temp0)
{*temp0=Read_DS12C887(9); //年*(temp0+1)=Read_DS12C887(8); //月*(temp0+2)=Read_DS12C887(7); //日*(temp0+3)=Read_DS12C887(6); //星期*(temp0+4)=Read_DS12C887(4); //时*(temp0+5)=Read_DS12C887(2); //分*(temp0+6)=Read_DS12C887(0); //秒
}void DS12C887_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF, ENABLE);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_InitStruct);GPIO_SetBits(GPIOE,0x78|GPIO_ReadOutputData(GPIOE));//控制脚初始化,置1GPIO_InitStruct.GPIO_Pin=0xff;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOF,&GPIO_InitStruct);GPIO_SetBits(GPIOF,0xff);Write_DS12C887(0x0a,0x20);//打开振荡器Write_DS12C887(0x0b,0x26);//设置24小时模式,数据为二进制,开启闹铃// Write_DS12C887(0,xxx); //秒
// Write_DS12C887(2,xxx); //分
// Write_DS12C887(4,xxx); //小时
// Write_DS12C887(6,xxx); //星期
// Write_DS12C887(7,xxx); //日
// Write_DS12C887(8,xxx); //月
// Write_DS12C887(9,xxx); //年
// Write_DS12C887(1,xxx); //秒闹钟
// Write_DS12C887(3,xxx); //分闹钟
// Write_DS12C887(5,xxx); //小时闹钟
}
源代码中的“xxx”为自己设定的值,可根据自己的情况来修改。当数据设置为二进制模式时,寄存器表如下:
如想要设置脉冲输出,可对应下表来选择输出的频率:
如输出8192Hz的方波:
Write_DS12C887(0x0b,0x2e); //设置方波输出,SQWE位置高,
Write_DS12C887(0x0a,0x23); //频率8192Hz,设置频率。
当然,还可以设置两个DS12C887+同时进行方波输出,可以看下它们的输出时钟精度。
0s处:
0.5s处:
1s处:
约错开了四分之一个周期,则1秒约错开了0.03ms。
【2020-10-28】DS12C887+驱动相关推荐
- 记一次小米前端面试题(一面)2020.10.28
性能优化 vue中key的作用 浏览器输入URL到页面的过程 DOM解析过程 css文件为什么在head中引入,而不放在body中 js文件为什么放在body底部,别的非阻塞加载js的方法,async ...
- 鸿蒙设备开发C语言,《鸿蒙开发板外设控制》直播图文版(2020.10.28)
直播主题: 直播实验设备 Hi3861核心板 + 交通灯外设板 + 底板,如下图: 1. Hello World(如果不想迈出第一步时就踩坑,请严格遵守步骤) 解说: 1) 对于初学者来说,SYS_R ...
- NOIP模拟day1 2020.10.28
不得不说,今天考的4道题感觉质量可以,就是T3数据有点水纯搜索86分可还行 Problem a 如果这道题每个棋子都能是第一个出去的话,那么这道题就简单了,ans便是!n 能骗30多分 ,但是显然受各 ...
- 2020.10月做题记录
PS:本博客仅选择了一些作者认为有必要记录的题目进行记录. week -1 2020.09.28-2020.10.4 军训+国庆放假-就这样又废了一周- 2020.10.04 回来第一天完全没有状态- ...
- (十一:2020.08.28)CVPR 2017 追踪之论文纲要(译)
CVPR 2017 追踪之论文纲要(修正于2020.08.28) 讲在前面 论文目录 讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自 ...
- (十四:2020.08.28)CVPR 2014 追踪之论文纲要(译)
CVPR 2020 追踪之论文纲要(修正于2020.08.28) 讲在前面 论文目录 讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自 ...
- 2020.10.19-10.26 人工智能行业每周技术精华文章汇总
前段时间,和一个朋友聊天. 聊最近在做的一些事情,比较有意思的是: 他说,很多事情,刚开始想法挺多,但平时时间太少,下班就想休息休息,不想动了. 这可能也是很多人面临的问题,很多事想尝试,但是觉得很麻 ...
- tiny4412 uboot 2020.10版本移植(四)——uboot修改支持sd卡、eMMC引导内核及其他一些杂项设置
本文在<tiny4412 uboot 2020.10版本移植(三)--uboot初步启动> 的基础上继续向tiny4412 uboot 2020.10版添加功能. 主要有三块内容:1. D ...
- 微生物组-宏基因组分析第9期(报名直播课免费参加线下2020.10本年最后一期)
福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组.Python课程和转录组的线上直播课.报名参加线上直播课的老师可在1年内选择参加同课程的一次线下课 ...
- 宏基因组分析第9期(报名直播课免费参加线下2020.10本年最后一期)
福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组.Python课程和转录组的线上直播课.报名参加线上直播课的老师可在1年内选择参加同课程的一次线下课 ...
最新文章
- 团队项目—每日记录2
- Android Gradle 批量修改生成的apk文件名
- Flash与.NET的通信(三):LoadVars对象的应用
- .so文件反编译_java加密防止反编译-VirboxProtector
- 《恋上数据结构第1季》红黑树(未完)
- 绝对干货:供个人开发者赚钱免费使用的一些好的API接口
- redis4数据类型.更新HyperLogLog类型
- Hadoop1.0.4伪分布式安装
- 2021最新调查报告来了!揭露中国程序员工作和生活真实现状
- !!!python 100行代码编写【Google 图片搜索爬取工具】多线程
- A Game of Thrones(97)
- MATLAB理论力学应用
- kali2019安装netspeed教程
- java对台湾同胞身份证号码验证
- 维度表和事实表的含义
- html手机输入框键盘弹起顶起背景图
- 同声传译系统matlab,知到网课答案英语基础口译课后作业答案
- python_speech_features文档翻译
- STM32之usart
- 官方yolov5s.pt ,yolo5x.pt下载地址