欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
DS3231.h和DS3231.C單片機mcu時鐘芯片驅動下載
[打印本頁]
作者:
xiaojuan
時間:
2014-9-25 16:33
標題:
DS3231.h和DS3231.C單片機mcu時鐘芯片驅動下載
DS3231時鐘芯片的mcu單片機驅動下載:
DS3231.rar
(2.49 KB, 下載次數: 376)
2014-9-25 16:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
DS3231.h文件內容:
#ifndef __D3231_H__
#define __D3231_H__
/*****************************************************************************
** 宏定義
******************************************************************************/
#define DS3231_SLAVE_ADDR 0xD0
//DS3231的寄存器(開始)地址
#define DS3231_REG_BEGIN_ADDR 0x00
#define DS3231_TIME_BEGIN_ADDR 0x00
#define DS3231_ALARM1_BEGIN_ADDR 0x07
#define DS3231_ALARM2_BEGIN_ADDR 0x0B
#define DS3231_CTRL_ADDR 0x0E
#define DS3231_CTRL_STATUS_ADDR 0x0F
#define DS3231_OFFSET_ADDR 0x10
#define DS3231_TEMP_BEGIN_ADDR 0x11
#define DS3231_SUBA_EN_0 0x00
#define DS3231_SUBA_EN_1 0x01
#define DS3231_SUBA_EN_2 0x02
#define I2C_PORT_0 0x00
#define I2C_PORT_1 0x01
#define I2C_PORT_2 0x02
/*****************************************************************************
** 結構定義
******************************************************************************/
/*****************************************************************************
DS3231BUFtag結構中的各個變量的位置不可更改
因為位置是與DS3231中的寄存器順序一一對應的
******************************************************************************/
typedef struct{
BYTE cTimeSecond; //[00]
BYTE cTimeMinute; //[01]
BYTE cTimeHour; //[02]
BYTE cTimeDay; //[03]
BYTE cTimeDate; //[04]
BYTE cTimeMonth; //[05]
BYTE cTimeYear; //[06]
BYTE cAlarm1Second; //[07]
BYTE cAlarm1Minute; //[08]
BYTE cAlarm1Hour; //[09]
BYTE cAlarm1DayDate; //[0A]
BYTE cAlarm2Minute; //[0B]
BYTE cAlarm2Hour; //[0C]
BYTE cAlarm2DayDate; //[0D]
BYTE cCtlReg; //[0E]
BYTE cCtlStatusReg; //[0F]
BYTE cOffsetReg; //[10]
BYTE cMSBofTemp; //[11]
BYTE cLSBofTemp; //[12]
BYTE cFlag1; //reserved
BYTE cFlag2; //reserved
}DS3231BUFtag;
typedef struct{
BYTE cSecond; //[00]
BYTE cMinute; //[01]
BYTE cHour; //[02]
BYTE cDay; //[03]
BYTE cDate; //[04]
BYTE cMonth; //[05]
BYTE cYear; //[06]
}DS3231_TIMEtag;
typedef struct{
BYTE cSecond; //[07]
BYTE cMinute; //[08]
BYTE cHour; //[09]
BYTE cDayDate; //[0A]
}DS3231_ALARM1tag;
typedef struct{
BYTE cMinute; //[0B]
BYTE cHour; //[0C]
BYTE cDayDate; //[0D]
}DS3231_ALARM2tag;
typedef struct{
BYTE cTempMSB; //[11]
BYTE cTempLSB; //[12]
}DS3231_TEMPtag;
/******************************************************************************
* 功能: 經過I2C接口發送1串字節的數據
* 輸入: cPort 端口號
cSlaAddr 從機地址
cSuba 子地址
pData 數據源指針
cNum 數據個數
* 輸出:
TRUE 發送成功
FALSE 發送失敗
******************************************************************************/
BOOL I2CSendStr(BYTE cPort, BYTE cSlaAddr, BYTE cSubaEn, BYTE cSuba, BYTE *pData, BYTE cNum);
/******************************************************************************
* 功能: 向無地址器件讀取1字節的數據
* 輸入: cPort 端口號
cSlaAddr 從機地址
cSuba 子地址
pData 數據源指針
cNum 數據個數
* 輸出:
TRUE 發送成功
FALSE 發送失敗
******************************************************************************/
BOOL I2CRecvByte(BYTE cPort, BYTE cSlaAddr, BYTE CSubaEn, BYTE cSuba, BYTE* pData);
#endif
/*****************************************************************************
** 文件結束
******************************************************************************/
復制代碼
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);
}
/*****************************************************************************
** 文件結束
******************************************************************************/
復制代碼
作者:
xsynet
時間:
2015-1-30 13:56
i2c的驅動呢
作者:
fsj5098
時間:
2015-5-4 22:59
i2c的驅動呢
作者:
fsj5098
時間:
2015-5-15 08:24
i2c的驅動呢,貌似不全
作者:
十年后的天空
時間:
2015-7-23 01:55
我正要找這個的驅動
作者:
1qaz2wsx77
時間:
2015-7-25 22:13
這也不全呀
作者:
cgc71
時間:
2015-10-20 09:27
不錯的驅動程序;學習了!
作者:
cgc71
時間:
2015-10-20 09:28
不錯的驅動程序!
作者:
563536103
時間:
2015-11-9 13:33
我想問一下 #define DS3231_SLAVE_ADDR 0xD0 這一句是什么意思 一直搞不懂 求高手解答
作者:
yuhouwuyun
時間:
2016-5-16 13:49
i2c的驅動呢
作者:
scn329741345
時間:
2016-5-26 09:55
謝謝樓主分享
作者:
1234567891011
時間:
2016-8-3 15:50
哎呦不錯啊
作者:
ljl-2003
時間:
2016-12-22 15:46
很好很實用的庫文件
作者:
df876068416
時間:
2019-1-15 17:54
測試一下 感謝分享
作者:
1113634577
時間:
2019-1-26 10:55
#define DS3231_SLAVE_ADDR 0xD0 為定義3231從器件地址為D0
作者:
1113634577
時間:
2019-1-26 10:55
文件結構清晰
作者:
51單片機1234
時間:
2019-1-26 11:34
i2c的驅動呢,怎么不全
作者:
lzh7703
時間:
2020-4-2 14:03
測試一下 感謝分享
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1