DS3231时钟芯片的mcu单片机驱动下载:
DS3231.rar
(2.49 KB, 下载次数: 376)
DS3231.h文件内容:
DS3231.C文件内容:
- /******************************************************************************
- * 名称: 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);
- }
- /*****************************************************************************
- ** 文件结束
- ******************************************************************************/
复制代码
|