咚咚咚————【封装驱动】DS3231时钟芯片读写程序,分享交流自己编写的程序。

咚咚咚————【封装驱动】DS3231时钟芯片读写程序,分享交流自己编写的程序。

/********************************************
主控芯片:STM32 Controller
模块型号:DS3231
通讯方式:IIC串口通信
作者:苏夏雨
授权:未经作者允许,禁止转载
********************************************/
//定义模块头文件名称
#ifndef DS3231_H
#define DS3231_H
//定义模块使用寄存器
//DS3231从设备地址
#define DS3231_WADDRESS	      	0xD0
#define DS3231_RADDRESS		      0xD1
//DS3231年月周日时分秒
#define DS3231_SEC_REG        	0x00  
#define DS3231_MIN_REG        	0x01  
#define DS3231_HOUR_REG       	0x02
#define DS3231_WDAY_REG       	0x03
#define DS3231_MDAY_REG       	0x04
#define DS3231_MONTH_REG      	0x05
#define DS3231_YEAR_REG       	0x06
//DS3231闹钟设置寄存器
#define DS3231_AL1SEC_REG     	0x07
#define DS3231_AL1MIN_REG     	0x08
#define DS3231_AL1HOUR_REG    	0x09
#define DS3231_AL1WDAY_REG    	0x0A
#define DS3231_AL2MIN_REG     	0x0B
#define DS3231_AL2HOUR_REG    	0x0C
#define DS3231_AL2WDAY_REG    	0x0D
//DS3231控制与状态寄存器
#define DS3231_CONTROL_REG      0x0E
#define DS3231_STATUS_REG       0x0F
#define DS3231_OFFSET_REG     	0x10
#define DS3231_TEMPH_REG        0x11
#define DS3231_TEMPLREG         0x12
//定义模块使用头文件
#include "sys.h"
#include "delay.h"
#include "usart.h" 
//定义模块使用的函数
void DS3231_Init(void);//初始化DS3231
void DS3231_Read_Rtc(u8* buf);
void DS3231_Write_Rtc(u8* buf);
//定义模块寄存器地址
#endif

/********************************************
主控芯片:STM32 Controller
模块型号:DS3231
通讯方式:IIC串口通信
作者:苏夏雨
授权:未经作者允许,禁止转载
********************************************/
#include "myiic.h" 
#include "ds3231.h"
u8 BCD_DEC(u8 bcd)//BCD转DEC(BCD为8421码)
{
		u8 decH;
		u8 decL;
		decH = (bcd/16)*10;
		decL = (bcd%16);
		return decH+decL;
}
u8 DEC_BCD(u8 dec)//DEC转BCD(BCD为8421码)
{
		u8 bcdH;
		u8 bcdL;
		bcdH = (dec/10)*16;
		bcdL = (dec%10);
		return bcdH+bcdL;
}
void DS3231_Init()//初始化DS3231
{
		IIC_Init();
}
u8	 DS3231_Read_Reg(u8 addr)
{
		 u8 buf=0;
		 IIC_Start();
		 IIC_Send(DS3231_WADDRESS);
		 IIC_WAck();
		 IIC_Send(addr);
		 IIC_WAck();
	
		 IIC_Start();
		 IIC_Send(DS3231_RADDRESS);
		 IIC_WAck();
		 buf=IIC_Read();
		 IIC_NAck();
		 IIC_Stop();
		 return buf;
}
void DS3231_Write_Reg(u8 addr,u8 value)
{
		 IIC_Start();
		 IIC_Send(DS3231_WADDRESS);       
		 IIC_WAck();
		 IIC_Send(addr); 
		 IIC_WAck();
		 IIC_Send(value);
		 IIC_WAck();
		 IIC_Stop();
		 delay_ms(1);
}
void DS3231_Read_Rtc(u8* buf)
{
		//读取DS3231年月日时分秒并转换成HEX格式
		 *(buf+0) = BCD_DEC(DS3231_Read_Reg(DS3231_YEAR_REG)); //读取年
		 *(buf+1) = BCD_DEC(DS3231_Read_Reg(DS3231_MONTH_REG));//读取月
     *(buf+2) = BCD_DEC(DS3231_Read_Reg(DS3231_MDAY_REG)); //读取日
     *(buf+3) = BCD_DEC(DS3231_Read_Reg(DS3231_HOUR_REG)); //读取时
     *(buf+4) = BCD_DEC(DS3231_Read_Reg(DS3231_MIN_REG));  //读取分
     *(buf+5) = BCD_DEC(DS3231_Read_Reg(DS3231_SEC_REG));  //读取秒
}
void DS3231_Write_Rtc(u8* buf)
{
		//写入DS3231年月日时分秒并转换成BCD格式
		 DS3231_Write_Reg(DS3231_YEAR_REG,DEC_BCD(*(buf+0))); //写入年
		 DS3231_Write_Reg(DS3231_MONTH_REG,DEC_BCD(*(buf+1)));//写入月
     DS3231_Write_Reg(DS3231_MDAY_REG,DEC_BCD(*(buf+2))); //写入日
     DS3231_Write_Reg(DS3231_HOUR_REG,DEC_BCD(*(buf+3))); //写入时
     DS3231_Write_Reg(DS3231_MIN_REG,DEC_BCD(*(buf+4)));  //写入分
     DS3231_Write_Reg(DS3231_SEC_REG,DEC_BCD(*(buf+5)));  //写入秒
}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值