mvip 发表于 2011-9-8 14:14:21

再分享一下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]
查看完整版本: 再分享一下8563时钟芯片驱动