?? pcf8563.h
字號(hào):
//***************************************************************************************
//*文件:PCF8653.H *
//*說(shuō)明:PCF8653驅(qū)動(dòng)函數(shù)庫(kù) *
//*平臺(tái):AT89S5X *
//*作者:陳崇 *
//*日期:2007-03-21 *
//***************************************************************************************
#include <I2C.H>
#ifndef _PCF8653_DRIVER
#define _pcf8653_DRIVER
#define SCL_SETB P1_1=1
#define SCL_CLR P1_1=0
#define SDA_SETB P1_0=1
#define SDA_CLR P1_0=0
#define PCF8563_SLA 0xA2
unsigned char init_time[7]={0,0,10,11,3,4,7};
//***************************************************************************************
//*名稱: unsigned char bcd_convert_hex(unsigned char bcd_data) *
//*功能: BCD碼轉(zhuǎn)16進(jìn)制 *
//*參數(shù): bcd_data 要轉(zhuǎn)換的BCD碼數(shù)據(jù)(0-100) *
//*返回: 轉(zhuǎn)換后的16進(jìn)制數(shù)據(jù) *
//***************************************************************************************
unsigned char bcd_convert_hex(unsigned char bcd_data)
{
unsigned char temp;
temp=((bcd_data>>4)*10)+(bcd_data&0x0F);
return temp;
}
//***************************************************************************************
//*名稱: unsigned char hex_convert_bcd(unsigned char hex_dataa) *
//*功能: 16進(jìn)制轉(zhuǎn)BCD碼 *
//*參數(shù): hex_data 要轉(zhuǎn)換的16進(jìn)制數(shù)據(jù)(0-100) *
//*返回: 轉(zhuǎn)換后的BCD碼數(shù)據(jù) *
//***************************************************************************************
unsigned char hex_convert_bcd(unsigned char hex_data)
{
unsigned char temp;
unsigned char bcd_data;
temp=hex_data%100;
bcd_data=(temp/10<<4)|(temp%10);
return bcd_data;
}
//***************************************************************************************
//*名稱: void pcf8563_star(void) *
//*功能: 啟動(dòng)PCF8563芯片運(yùn)行 *
//*參數(shù): *
//*返回: *
//***************************************************************************************
void pcf8563_star(void)
{
i2c_write_byte(PCF8563_SLA,0x00,0x00);
}
//***************************************************************************************
//*名稱: void pcf8563_get_time(unsigned char *ptr) *
//*功能: 從RTC芯片獲取時(shí)鐘數(shù)據(jù) 并存放到指定數(shù)組 *
//*參數(shù): *
//*返回: *
//***************************************************************************************
void pcf8563_get_time(unsigned char *ptr)
{
i2c_read_nbyte(PCF8563_SLA,0x02,ptr,7);
ptr[0]=bcd_convert_hex(ptr[0]&0x7F); // 秒
ptr[1]=bcd_convert_hex(ptr[1]&0x7F); // 分
ptr[2]=bcd_convert_hex(ptr[2]&0x3F); // 小時(shí)
ptr[3]=bcd_convert_hex(ptr[3]&0x3F); // 日
ptr[4]=ptr[4];
ptr[5]=bcd_convert_hex(ptr[5]&0x1F); // 月
ptr[6]=bcd_convert_hex(ptr[6]); // 年
}
//***************************************************************************************
//*名稱: pcf8563_rewirte_time(unsigned char *ptr) *
//*功能: 將時(shí)鐘數(shù)據(jù)重寫(xiě)入PCF8563片 *
//*參數(shù): *ptr 時(shí)鐘數(shù)據(jù)數(shù)組 *
//*返回: *
//***************************************************************************************
void pcf8563_rewirte_time(unsigned char *ptr)
{
unsigned char i;
for(i=0;i<7;i++)
{
ptr[i]=hex_convert_bcd(ptr[i]);
}
i2c_write_byte(PCF8563_SLA,0x00,0x20); // PCF8563時(shí)鐘芯停止運(yùn)行
i2c_write_nbyte(PCF8563_SLA,0x02,ptr,7); // 將設(shè)置時(shí)間寫(xiě)入PCF8563
i2c_write_byte(PCF8563_SLA,0x00,0x00); // PCF8563時(shí)鐘芯開(kāi)始運(yùn)行
}
//***************************************************************************************
//*名稱: void pcf8563_init(void) *
//*功能: 如果時(shí)鐘數(shù)據(jù)不對(duì)則寫(xiě)入初始值 *
//*參數(shù): *
//*返回: *
//***************************************************************************************
void pcf8563_init(void)
{
unsigned char time_temp[7];
pcf8563_get_time(time_temp);
if(time_temp[0]>=60||time_temp[1]>=60||time_temp[2]>=24||time_temp[3]>=32
||time_temp[5]>=13||time_temp[6]>=100)
{
pcf8563_rewirte_time(init_time);
}
}
#endif
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -