資源簡(jiǎn)介
通過(guò)IO模擬I2C總線,控制DS1337芯片,包括以下功能:
(1)DS1337_RTC_Init,DS1337初始化,初始化I2C的IO
(2)Print_RTC_Time,讀取RTC時(shí)間信息,通過(guò)很小資源的S_Printf函數(shù)打印到串口。“2013年11月15日, 23:29:41, 星期五”為實(shí)際打印效果拷貝
(3)DS1337_Write,用于修改DS1337的寄存器
(4)DS1337_RTC_Time[7]數(shù)組存儲(chǔ)最新的RTC時(shí)間,格式在源程序中有詳細(xì)注釋,很方便

代碼片段和文件信息
#include????????“Main_Proc.h“
/*------------------------------------------------*/
// 時(shí)間數(shù)組:?秒,分,時(shí),星期,日,月,年
unsigned?char????DS1337_RTC_Time[7];????????????????????//時(shí)間結(jié)構(gòu)體
//???????????????[0]-秒十六進(jìn)制?[6:4]-十位?[3:0]-個(gè)位
//???????????????[1]-分十六進(jìn)制?[6:4]-十位?[3:0]-個(gè)位
//???????????????[2]-時(shí)十六進(jìn)制?[6]-12/24小時(shí)?[5:4]-十位?[3:0]-個(gè)位
//???????????????[3]-星期?[2:0]-星期,范圍1~7
//???????????????[4]-日期十六進(jìn)制?[5:4]-十位?[3:0]-個(gè)位
//???????????????[5]-月份十六進(jìn)制?[4]-十位?[3:0]-個(gè)位
//???????????????[6]-年份十六進(jìn)制?[7:4]-十位?[3:0]-個(gè)位,從2000年開始,即,實(shí)際年份為2000+[6]的值
/**************************************************/
// 函數(shù)功能:?I2C延時(shí),實(shí)際延時(shí)由外部的EPLD實(shí)現(xiàn)
//????????????I2C總線速度小于CPU的主頻,需要延時(shí)操作
//??輸入?yún)?shù):?無(wú)
//??輸出參數(shù):?無(wú)
/*------------------------------------------------*/
void????DS1337_I2C_Delay(?void?)
{
????unsigned?char?i;
????i=10;
????while(i--)
????????_NOP();
}
/**************************************************/
// 函數(shù)功能:?DS1337?I2C?時(shí)序啟動(dòng)子函數(shù)
//??輸入?yún)?shù):?無(wú)
//??輸出參數(shù):?無(wú)
/*------------------------------------------------*/
void???DS1337_I2C_Start(?void?)
{
????PIN_DS1337_SDA_0;????????????????????//啟動(dòng)信號(hào)
????DS1337_I2C_Delay();
????PIN_DS1337_SCK_0;
????DS1337_I2C_Delay();
}
/**************************************************/
// 函數(shù)功能:?DS1337?I2C?時(shí)序結(jié)束子函數(shù)
//??輸入?yún)?shù):?無(wú)
//??輸出參數(shù):?無(wú)
/*------------------------------------------------*/
void???DS1337_I2C_Stop(?void?)
{
????PIN_DS1337_SCK_1;
????DS1337_I2C_Delay();
????PIN_DS1337_SDA_1;
????DS1337_I2C_Delay();
}
/**************************************************/
// 函數(shù)功能:?DS1337?I2C?ACK結(jié)束子函數(shù)
//??輸入?yún)?shù):?Master=1,表示主設(shè)備產(chǎn)生ACK信號(hào),將數(shù)據(jù)拉低
//??輸出參數(shù):?無(wú)
/*------------------------------------------------*/
void???DS1337_I2C_ACK(?void?)
{
????PIN_DS1337_SDA_0;
????DS1337_I2C_Delay();
????PIN_DS1337_SCK_1;
????DS1337_I2C_Delay();
????PIN_DS1337_SCK_0;
????DS1337_I2C_Delay();
}
/**************************************************/
// 函數(shù)功能:?DS1337?I2C?讀取1個(gè)字節(jié)子函數(shù)
//??輸入?yún)?shù):?無(wú)
//??輸出參數(shù):?讀取字節(jié)的結(jié)果數(shù)據(jù)
/*------------------------------------------------*/
unsigned?char???DS1337_I2C_Read(?void?)
{
????unsigned?char?ReadByte?i;
????PIN_DS1337_SDA_1;???????????????????????//釋放總線,方便讀取
????PIN_DS1337_SDA_IN_Init;
????DS1337_I2C_Delay();
????for?(?i=0;i<8;i++?)
????{
????????ReadByte?<<=?1;
????????if?(?PIN_DS1337_SDA_IN?)
????????????ReadByte?+=?1;
????????PIN_DS1337_SCK_1;
????????DS1337_I2C_Delay();
????????PIN_DS1337_SCK_0;
????????DS1337_I2C_Delay();
????}
????PIN_DS1337_SDA_OUT_Init;
????return(?ReadByte?);
}
/**************************************************/
// 函數(shù)功能:?DS1337?I2C?發(fā)送1個(gè)字節(jié)子函數(shù)
//??輸入?yún)?shù):?待發(fā)送的字節(jié)數(shù)據(jù)
//??輸出參數(shù):?無(wú)
/*------------------------------------------------*/
void???DS1337_I2C_Send(?unsigned?char?SendData?)
{
????unsigned?char?SendByte?i;
????SendByte?=?SendData;
????for?(?i=0;i<8;i++?)
????{
????????if?(?SendByte?&?0x80?)
????????????PIN_DS1337_SDA_1;
????????else
????????????PIN_DS1337_SDA_0;
????????SendByte?<<=?1;
????????DS1
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????1848??2013-11-10?22:52??DS1337_RTC.h
?????文件????????6233??2013-11-12?22:49??DS1337_RTC.c
- 上一篇:紅外測(cè)距程序可以試下
- 下一篇:獲取視頻地址源碼
評(píng)論
共有 條評(píng)論