?? pcf8563.c
字號(hào):
/*
* 文件名 : PCF8563.C
* 作 者 : li.yao
* 日 期 : 2005年 02月 28日,星期一
* 描 述 : PCF8563實(shí)時(shí)時(shí)鐘芯片的驅(qū)動(dòng)程序。
*/
#include "I2C.H"
/*配置參數(shù)*/
#define WADDR 0xA2
#define RADDR 0xA3
#define BYEAR 0x1900
/*
* 函數(shù)名 : unsigned char GetPCF8563(unsigned char addr);
* 參數(shù)表 : addr: 要讀的數(shù)據(jù)地址。
* 返回值 : 讀取的數(shù)據(jù)字節(jié)。
* 功 能 : 讀取指定地址的數(shù)據(jù)內(nèi)容。
*/
unsigned char GetPCF8563(unsigned char addr)
{
unsigned char ch;
I2cStart();
I2cSend(WADDR);
WaitAck();
I2cSend(addr);
WaitAck();
I2cStart();
I2cSend(RADDR);
WaitAck();
ch = I2cRead();
SendNotAck();
I2cStop();
return ch;
}
/*
* 函數(shù)名 : void SetPCF8563(unsigned char addr, unsigned char ch);
* 參數(shù)表 : addr: 要寫的數(shù)據(jù)地址。ch: 寫入的數(shù)據(jù)字節(jié)。
* 返回值 : none
* 功 能 : 寫入指定地址的數(shù)據(jù)內(nèi)容。
*/
void SetPCF8563(unsigned char addr, unsigned char ch)
{
I2cStart();
I2cSend(WADDR);
WaitAck();
I2cSend(addr);
WaitAck();
I2cSend(ch);
WaitAck();
I2cStop();
}
/*
* 函數(shù)名 : unsigned char SetClock(TIME *time);
* 參數(shù)表 : time: 設(shè)置時(shí)間的數(shù)據(jù)指針。
* sec, min, hour, day, week, month, year.
* 返回值 : 是否超時(shí)錯(cuò)誤。
* 功 能 : 設(shè)置時(shí)間和日期。
*/
unsigned char SetClock(TIME *time)
{
unsigned char i = 0;
unsigned char err;
time->year -= BYEAR;
if (time->year < 0x100)
time->month |= 0x80;
else
time->month &= 0x7F;
I2cStart();
I2cSend(WADDR);
err = WaitAck();
I2cSend(0x02);
err = WaitAck();
while (i < 7)
{
I2cSend(((unsigned char *)time)[i++]);
err = WaitAck();
}
I2cStop();
return err;
}
/*
* 函數(shù)名 : unsigned char GetClock(TIME *time);
* 參數(shù)表 : time: 讀取時(shí)間的數(shù)據(jù)指針。
* sec, min, hour, day, week, month, year.
* 返回值 : 是否超時(shí)錯(cuò)誤。
* 功 能 : 讀取時(shí)間和日期。
*/
unsigned char GetClock(TIME *time)
{
unsigned char i = 0;
unsigned char err;
I2cStart();
I2cSend(WADDR);
err = WaitAck();
I2cSend(0x02);
err = WaitAck();
I2cStart();
I2cSend(RADDR);
err = WaitAck();
while (1)
{
((unsigned char *)time)[i++] = I2cRead();
if (i < 7)
{
SendAck();
} else {
SendNotAck();
break;
}
}
I2cStop();
if (time->month & 0x80)
((unsigned char *)time)[i] = 0x19;
else
((unsigned char *)time)[i] = 0x20;
time->month &= 0x7F;
return err;
}
// 文件結(jié)束
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -