时钟芯片PFC8563驱动程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.PFC8563.h头文件
void I2C_start(void);//开启I2C
void I2C_stop(void);//停止I2C
void I2C_write_date(uchar date);//写一字节数据
uchar I2C_read_date(void);//读一字节数据
uchar I2C_receive_ACK(void);//单片机发送数据时
uchar I2C_send_ACK(uchar ACK);//单片机接收数据时是否应答ACK为1时不应答,为0时应答void PF8563_write_date(uchar address,uchar date);//指定地址写数据
uchar PF8563_read_date(uchar address);//读数据
void PF8563_init(void);//时间初始化
2.PFC856
3.c函数
#include <iom8515.h>
#include <iomacro.h>
#include <inavr.h>
#include "1602.h"
#include "delay.h"
#include "PFC8563.h"
#define sda1 DDRD|=0X02;PORTD|=0X02;
#define sda0 DDRD|=0X02;PORTD&=0XFD;
#define scl1 DDRD|=0X04;PORTD|=0X04;
#define scl0 DDRD|=0X04;PORTD&=0XFB;
#define sdar DDRD&=0XFD;PORTD|=0X02;
//PD2>>SCL(串行时钟线) PD1>>SDA(串行数据线)
void I2C_start(void)//开启I2C
{
sda1;
delay_nus(2);
scl1;
delay_nus(2);
sda0;
delay_nus(2);
}
void I2C_stop(void)//停止I2C
{
sda0;
delay_nus(2);
scl1;
delay_nus(2);
sda1;
delay_nus(2);
}
void I2C_write_date(uchar date)//写一字节数据
{
uchar i;
for(i=0;i<8;i++)
{
if(date&0x80)
{
sda1;
}
else
{
sda0;
}
scl1;
delay_nus(2);
scl0;
delay_nus(2);
sda0;
delay_nus(2);
date<<=1;
}
}
uchar I2C_read_date(void)//读一字节数据
{
uchar date=0;
uchar i;
for(i=0;i<8;i++)
{
date<<=1;
scl1;
delay_nus(1);
sdar;
delay_nus(2);
if(PIND&0x02)
date&=0x01;
scl0;
delay_nus(2);
}
return date;
}
uchar I2C_receive_ACK(void)//单片机发送数据时{
sdar;//上拉电阻拉高信号线delay_nus(2);
scl1;//应答时钟脉冲
delay_nus(2);
if(PIND&0X02)//应答非则为1
{
scl0;
return1;
}
else
{
scl0;
return0;//应答则为0
}
}
uchar I2C_send_ACK(uchar ACK)//单片机接收数据时是否应答ACK为1时不应答,为0时应答{
if(ACK)
{
sda1;
}
else
{
sda0;
}
delay_nus(2);
scl1;
delay_nus(2);
scl0;
delay_nus(2);
}
void PF8563_write_date(uchar address,uchar date)//指定地址写数据
{
I2C_start();
I2C_write_date(0xa2);
while(I2C_receive_ACK());
I2C_write_date(address);
while(I2C_receive_ACK());
I2C_write_date(date);
while(I2C_receive_ACK());
I2C_stop();
}
uchar PF8563_read_date(uchar address)//读数据
{
uchar date;
I2C_start();
I2C_write_date(0xa3);
while(I2C_receive_ACK());
I2C_write_date(address);
while(I2C_receive_ACK());
date=I2C_read_date();
I2C_send_ACK(1);
I2C_stop();
return date;
}
void PF8563_init(void)//时间初始化{
PF8563_write_date(0x02,0x30);//秒
PF8563_write_date(0x03,0x30);//分
PF8563_write_date(0x04,0x16);//时
PF8563_write_date(0x05,0x08);//日
PF8563_write_date(0x06,0x02);//星期
PF8563_write_date(0x07,0x12);//月
PF8563_write_date(0x08,0x15);//年
}。

相关文档
最新文档