|
#include "PCF8563.h"
// 读取时间
uchar ReadDateTime(DATETIME *dt)
{
uchar xdata i, buf[7];
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[6]>>4)*10) + (buf[6] & 0x0F);
dt->month = (((buf[5]>>4) & 0x01)*10) + (buf[5] & 0x0F);
dt->day = (((buf[3]>>4) & 0x03)*10) + (buf[3] & 0x0F);
dt->hour = (((buf[2]>>4) & 0x03)*10) + (buf[2] & 0x0F);
dt->minute = (((buf[1]>>4) & 0x07)*10) + (buf[1] & 0x0F);
dt->second = (((buf[0]>>4) & 0x07)*10) + (buf[0] & 0x0F);
return 1;
}
// 启动时钟
uchar StartDateTime(void)
{
uchar xdata i, buf[2];
buf[0] = 0;
buf[1] = 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[7];
buf[0] = ((dt->second/10) << 4) + (dt->second%10);
buf[1] = ((dt->minute/10) << 4) + (dt->minute%10);
buf[2] = ((dt->hour/10) << 4) + (dt->hour%10);
buf[3] = ((dt->day/10) << 4) + (dt->day%10);
buf[4] = 1;
buf[5] = ((dt->month/10) << 4) + (dt->month%10);
buf[6] = ((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;
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|