再分享一下8563时钟芯片驱动
#include "PCF8563.h"// 读取时间
uchar ReadDateTime(DATETIME*dt)
{
uchar xdata i, buf;
IIC_BitStart();
if(!IIC_SendByte(PCF8563_WR)) return 0;// 写地址 0x02
if(!IIC_SendByte(0x02)) return 0;
IIC_BitStart(); // 写读控制字
if(!IIC_SendByte(PCF8563_RD)) return 0;
for(i=0; i<7; i++)
{
buf = IIC_RcvByte();
if(i<7)
{
SDA = 0;
IIC_Clock();
}
else
{
SDA = 1;
IIC_Clock();
IIC_BitStop();
}
}
dt->year = ((buf>>4)*10) + (buf & 0x0F);
dt->month= (((buf>>4) & 0x01)*10) + (buf & 0x0F);
dt->day = (((buf>>4) & 0x03)*10) + (buf & 0x0F);
dt->hour = (((buf>>4) & 0x03)*10) + (buf & 0x0F);
dt->minute = (((buf>>4) & 0x07)*10) + (buf & 0x0F);
dt->second = (((buf>>4) & 0x07)*10) + (buf & 0x0F);
return 1;
}
// 启动时钟
uchar StartDateTime(void)
{
uchar xdata i, buf;
buf = 0;
buf = 0;
IIC_BitStart();
if(!IIC_SendByte(PCF8563_WR)) return 0;
if(!IIC_SendByte(0x00)) return 0; //address
for(i=0; i<2; i++)
{
if(!IIC_SendByte(buf)) return 0;
}
IIC_BitStop();
return 1;
}
// 设置时间
uchar SetDateTime(DATETIME *dt)
{
uchar xdata i, buf;
buf = ((dt->second/10) << 4) + (dt->second%10);
buf = ((dt->minute/10) << 4) + (dt->minute%10);
buf = ((dt->hour/10) << 4) + (dt->hour%10);
buf = ((dt->day/10) << 4) + (dt->day%10);
buf = 1;
buf = ((dt->month/10) << 4) + (dt->month%10);
buf = ((dt->year/10) << 4) + (dt->year%10);
IIC_BitStart();
if(!IIC_SendByte(PCF8563_WR)) return 0;
if(!IIC_SendByte(0x02)) return 0; //address
for(i=0; i<7; i++)
{
if(!IIC_SendByte(buf)) return 0;
}
IIC_BitStop();
return 1;
}
// 判断时间
bit IsDateTime(void)
{
DATETIME xdata dt;
ReadDateTime(&dt);
if((dt.year > 99) || (dt.year < 0)) return 0;
if((dt.month > 12) || (dt.month <= 0)) return 0;
if((dt.day > 31) || (dt.day <= 0)) return 0;
if((dt.hour > 23) || (dt.hour < 0)) return 0;
if((dt.minute > 59) || (dt.minute < 0)) return 0;
if((dt.second > 59) || (dt.second < 0)) return 0;
return 1;
}
页:
[1]