DS3231時鐘芯片的mcu單片機驅動下載:
DS3231.rar
(2.49 KB, 下載次數: 376)
2014-9-25 16:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
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);
- }
- /*****************************************************************************
- ** 文件結束
- ******************************************************************************/
復制代碼
|