/*--------------------------------
NXF8563初始化
--------------------------------*/
void NXF8563_init()
{
sda=1;
delayus();
scl=1;
delayus();
_write_add(0x10,0x00);
_write_add(0x11,0x32);
_write_add(0x12,0x10);
_write_add(0x13,0x10); //周四
_write_add(0x14,0x05);
_write_add(0x15,0x07);
_write_add(0x16,0x18);
}
/*--------------------------
開始信號
--------------------------*/
void start()
{
sda=1;
delayus();
scl=1;
delayus();
sda=0;
delayus();
scl=0;
delayus();
}
/*-----------------------
停止
-----------------------*/
void stop()
{
sda=0;
delayus();
scl=1;
delayus();
sda=1;
delayus();
}
/*-----------------------
應答
-------------------------*/
void respons()
{
unchar i;
scl=1;
delayus();
while((sda==1)&&(i<250))i++;
scl=0;
delayus();
}
/*------------------------------------
寫一個字節(jié)子函數(shù)
------------------------------------*/
void write_byte(unchar date)
{
unchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delayus();
sda=CY;
delayus();
scl=1;
delayus();
}
scl=0;
delayus();
sda=1;
delayus();
}
/*------------------------------------
讀一個字節(jié)函數(shù)
------------------------------------*/
unchar read_byte()
{
unchar i,k;
scl=0;
delayus();
sda=1;
delayus();
for(i=0;i<8;i++)
{
scl=1;
delayus();
k=(k<<1)|sda;
scl=0;
delayus();
}
return k;
}
/*--------------------------------------------------
往一個單元里寫內(nèi)容函數(shù)
---------------------------------------------------*/
void _write_add(unchar address,unchar date)
{
start();
write_byte(0x64);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
/*----------------------------------------------
讀一個單元的內(nèi)容
---------------------------------------------*/
unchar read_add(unchar address)
{
unchar date;
start();
write_byte(0x64);
respons();
write_byte(address);
respons();
start();
write_byte(0x65);
respons();
date=read_byte();
stop();
return date;
}
/*------------------------------------------------
向nxf8563寫入時鐘數(shù)據(jù)
------------------------------------------------*/
void Write8563(void)
{
unchar i,tmp;
for(i=0;i<8;i++)
{ //BCD處理
tmp=time_buf1[i]/10;
time_buf[i]=time_buf1[i]%10;
time_buf[i]=time_buf[i]+tmp*16;
}
// write_add(0x00,0x00); //關(guān)閉寫保護
// write_add(0x01,0x00); //暫停
_write_add(0x10,time_buf[7]); //秒
_write_add(0x11,time_buf[6]); //分
_write_add(0x12,time_buf[5]); //時
_write_add(0x13,time_buf[4]); //周
_write_add(0x14,time_buf[3]); //日
_write_add(0x15,time_buf[2]); //月
_write_add(0x16,time_buf[1]); //年
// write_add(0x00,0x00); //打開寫保護
}
/*-----------------------------------------
讀出時鐘數(shù)據(jù)
----------------------------------------*/
void read8563()
{
time_buf[7]=read_add(0x16); //秒
time_buf[6]=read_add(0x15); //分
time_buf[5]=read_add(0x14); //時
time_buf[4]=read_add(0x13); //周
time_buf[3]=read_add(0x12); //日
time_buf[2]=read_add(0x11); //月
time_buf[1]=read_add(0x10); //年
//time_buf1[7]=time_buf[1]%16+(time_buf[1]/16)*10;
//time_buf1[6]=(time_buf[2]&0x1f)%16+((time_buf[2]&0x1f)/16)*10;
//time_buf1[5]=(time_buf[3]&0x3f)%16+((time_buf[3]&0x3f)/16)*10;
//time_buf1[3]=(time_buf[4]&0x3f)%16+((time_buf[4]&0x3f)/16)*10;
//time_buf1[2]=(time_buf[5]&0x7f)%16+((time_buf[5]&0x7f)/16)*10;
//time_buf1[1]=(time_buf[6]&0x7f)%16+((time_buf[6]&0x7f)/16)*10;
//time_buf1[7]=(time_buf[7]&0x07)%16+((time_buf[7]&0x07)/16)*10;
}
|