linux下ds3231应用程序,DS3231.h和DS3231.C单片机mcu时钟芯片驱动下载

/******************************************************************************

*   名称:  D3231.c

*   描述:  D3231模块驱动的实现文件

*   编写:

*   日期:  2010.07.23

******************************************************************************/

/*****************************************************************************

**                            DS3231的寄存器说明

时间寄存器组        0x00    时间:秒

0x01    时间:分

0x02    时间:小时

0x03    时间:星期

0x04    时间:日

0x05    时间:月

0x06    时间:年

闹钟1寄存器组       0x07    闹钟1:秒

0x08    闹钟1:分

0x09    闹钟1:时

0x0A    闹钟1:星期/日期

闹钟2寄存器组       0x0B    闹钟2:分

0x0C    闹钟2:时

0x0D    闹钟2:星期/日期

控制寄存器组        0x0E    控制寄存器

0x0F    控制/状态寄存器

0x10    偏移寄存器

温度寄存器组        0x11    温度MSB

0x12    温度LSB

说明:  时间和日历寄存器中的数据是BCD格式存储的

******************************************************************************/

/*****************************************************************************

**                            预编译包含

******************************************************************************/

#include "D3231.h"

/******************************************************************************

*   功能:  初始化DS3231芯片

******************************************************************************/

void DS3231Init(void)

{

I2CInit(0,0,400);                //初始化I2C总线,400K速率

}

/******************************************************************************

*   功能:  从DS3231读取时间

*   输出:  pTime 保存从DS3231读取到的时间的指针

说明:  时间寄存器组7个字节定长

******************************************************************************/

void DS3231ReadTime(DS3231_TIMEtag *pTime)

{

//设置起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

&(pTime->cSecond),

0x00);

//读取时间寄存器

I2CRecvStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_TIME_BEGIN_ADDR,

&(pTime->cSecond),

0x07);                     //7个字节定长

//恢复起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

&(pTime->cSecond),

0x00);

}

/******************************************************************************

*   功能:  设置DS3231的时间寄存器

*   输入:  pTime 待设置的时间内容的指针

说明:  时间寄存器组7个字节定长

******************************************************************************/

void DS3231SetTime(DS3231_TIMEtag *pTime)

{

//设置当前的时间

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_TIME_BEGIN_ADDR,

&(pTime->cSecond),

0x07);

//恢复起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

&(pTime->cSecond),

0x00);

}

/******************************************************************************

*   功能:  读取DS3231的闹钟1的设置

*   输出:  pAlarm1   保存从DS3231读取到的闹钟1数据的指针

说明:  闹钟1寄存器组4个字节定长

******************************************************************************/

void DS3231ReadAlarm1(DS3231_ALARM1tag *pAlarm1)

{

//设置起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_ALARM1_BEGIN_ADDR,

&(pAlarm1->cSecond),

0x00);

//读取闹钟1时间寄存器

I2CRecvStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_ALARM1_BEGIN_ADDR,

&(pAlarm1->cSecond),

0x04);                     //4个字节定长

//恢复起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

&(pAlarm1->cSecond),

0x00);

}

/******************************************************************************

*   功能:  设置DS3231的闹钟1寄存器的值

*   输入:  pAlarm1   待设置的闹钟时间内容指针

说明:  闹钟1寄存器组4个字节定长

******************************************************************************/

void DS3231SetAlarm1(DS3231_ALARM1tag *pAlarm1)

{

//设置闹钟1的时间

//4个字节定长

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_ALARM1_BEGIN_ADDR,

&(pAlarm1->cSecond),

0x04);

//恢复起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

&(pAlarm1->cSecond),

0x00);

}

/******************************************************************************

*   功能:  读取闹钟2的设置

*   输出:  pAlarm2 保存从DS3231读取到的闹钟2的指针

说明:  闹钟2寄存器组3个字节定长

******************************************************************************/

void DS3231ReadAlarm2(DS3231_ALARM2tag *pAlarm2)

{

//设置起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_ALARM2_BEGIN_ADDR,

&(pAlarm2->cMinute),

0x00);

//读取闹钟2时间寄存器

//3个字节定长

I2CRecvStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_ALARM2_BEGIN_ADDR,

&(pAlarm2->cMinute),

0x03);

//恢复起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

&(pAlarm2->cMinute),

0x00);

}

/******************************************************************************

*   功能:  设置闹钟2

*   输入:  pAlarm2 设置闹钟2寄存器内容的指针

说明:  闹钟2寄存器组3个字节定长

******************************************************************************/

void DS3231SetAlarm2(DS3231_ALARM2tag *pAlarm2)

{

//设置闹钟2的时间

//3个字节定长

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_ALARM2_BEGIN_ADDR,

&(pAlarm2->cMinute),

0x03);

//恢复起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

&(pAlarm2->cMinute),

0x00);

}

/******************************************************************************

*   功能:  读取DS3231的控制寄存器

******************************************************************************/

void DS3231ReadCtlReg(BYTE *pCtrlReg)

{

//设置起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_CTRL_ADDR,

pCtrlReg,

0x00);

//读取控制寄存器

//1个字节定长

I2CRecvStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_CTRL_ADDR,

pCtrlReg,

0x01);

//恢复起始

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

pCtrlReg,

0x00);

}

/******************************************************************************

*   功能:  设置DS3231的控制寄存器

******************************************************************************/

void DS3231SetCtlReg(BYTE *pCtlReg)

{

//设置控制寄存器

//1个字节定长

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_CTRL_ADDR,

pCtlReg,

0x01);

//恢复起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

pCtlReg,

0x00);

}

/******************************************************************************

*   功能:  读取DS3231的控制/状态寄存器

******************************************************************************/

void DS3231ReadCtlStatusReg(BYTE *pCtrlStatusReg)

{

//设置起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_CTRL_STATUS_ADDR,

pCtrlStatusReg,

0x00);

//读取控制/状态寄存器

//1个字节定长

I2CRecvStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_CTRL_STATUS_ADDR,

pCtrlStatusReg,

0x01);

//恢复起始

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

pCtrlStatusReg,

0x00);

}

/******************************************************************************

*   功能:  设置DS3231的控制/状态寄存器

******************************************************************************/

void DS3231SetCtlStatusReg(BYTE *pCtlStatusReg)

{

//设置控制/状态寄存器

//1个字节定长

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_CTRL_STATUS_ADDR,

pCtlStatusReg,

0x01);

//恢复起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

pCtlStatusReg,

0x00);

}

/******************************************************************************

*   功能:  读取DS3231的偏移寄存器

******************************************************************************/

void DS3231ReadOffsetReg(BYTE *pOffsetReg)

{

//设置起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_OFFSET_ADDR,

pOffsetReg,

0x00);

//读取偏移寄存器

//1个字节定长

I2CRecvStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_OFFSET_ADDR,

pOffsetReg,

0x01);

//恢复起始

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

pOffsetReg,

0x00);

}

/******************************************************************************

*   功能:  设置DS3231的偏移寄存器

******************************************************************************/

void DS3231SetOffsetReg(BYTE *pOffsetReg)

{

//设置偏移寄存器

//1个字节定长

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_OFFSET_ADDR,

pOffsetReg,

0x01);

//恢复起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

pOffsetReg,

0x00);

}

/******************************************************************************

*   功能:  读取DS3231的温度寄存器

******************************************************************************/

void DS3231ReadTempReg(DS3231_TEMPtag *pTemp)

{

//设置起始地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_TEMP_BEGIN_ADDR,

&(pTemp->cTempMSB),

0x00);

//读取温度寄存器

//2个字节定长

I2CRecvStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_0,

DS3231_TEMP_BEGIN_ADDR,

&(pTemp->cTempMSB),

0x02);

//恢复地址为寄存器组首地址

I2CSendStr( I2C_PORT_0,

DS3231_SLAVE_ADDR,

DS3231_SUBA_EN_2,

DS3231_REG_BEGIN_ADDR,

&(pTemp->cTempMSB),

0x00);

}

/*****************************************************************************

**                            文件结束

******************************************************************************/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值