謝謝樓主分享,我把樓主的主程序貼出來 為大家省點(diǎn)黑幣- #include "nxf8563.h"
- #define uchar unsigned char
- #define uint unsigned int
- //uint year;
- //uchar s,hour,min,sec,week,mon,day;
- unsigned char time_buf1[8] = {20,15,10,1,8,8,8,6};//空年月日時(shí)分秒周
- unsigned char time_buf[8] ; //空年月日時(shí)分秒周
- /*----------------------------
- 延時(shí)微秒函數(shù)
- -----------------------------*/
- void delayus()
- {
- ;
- }
- /*--------------------------------
- NXF8563初始化
- --------------------------------*/
- void NXF8563_init()
- {
- sda=1;
- delayus();
- scl=1;
- delayus();
- write_add(0x00,0x00);
- write_add(0x01,0x00);
- write_add(0x02,0x57);
- write_add(0x03,0x56);
- write_add(0x04,0x09);
- write_add(0x05,0x01);
- write_add(0x06,0x02);
- write_add(0x07,0x12);
- write_add(0x08,0x15);
- }
- /*--------------------------
- 開始信號(hào)
- --------------------------*/
- void start()
- {
- sda=1;
- delayus();
- scl=1;
- delayus();
- sda=0;
- delayus();
- }
- /*-----------------------
- 停止
- -----------------------*/
- void stop()
- {
- sda=0;
- delayus();
- scl=1;
- delayus();
- sda=1;
- delayus();
- }
- /*-----------------------
- 應(yīng)答
- -------------------------*/
- void respons()
- {
- uchar i;
- scl=1;
- delayus();
- while((sda==1)&&(i<250))i++;
- scl=0;
- delayus();
- }
- /*------------------------------------
- 寫一個(gè)字節(jié)子函數(shù)
- ------------------------------------*/
- void write_byte(uchar date)
- {
- uchar 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();
- }
- /*------------------------------------
- 讀一個(gè)字節(jié)函數(shù)
- ------------------------------------*/
- uchar read_byte()
- {
- uchar 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;
- }
- /*--------------------------------------------------
- 往一個(gè)單元里寫內(nèi)容函數(shù)
- ---------------------------------------------------*/
- void write_add(uchar address,uchar date)
- {
- start();
- write_byte(0xa2);
- respons();
- write_byte(address);
- respons();
- write_byte(date);
- respons();
- stop();
- }
- /*----------------------------------------------
- 讀一個(gè)單元的內(nèi)容
- ---------------------------------------------*/
- uchar read_add(uchar address)
- {
- uchar date;
- start();
- write_byte(0xa2);
- respons();
- write_byte(address);
- respons();
- start();
- write_byte(0xa3);
- respons();
- date=read_byte();
- stop();
- return date;
- }
- /*------------------------------------------------
- 向nxf8563寫入時(shí)鐘數(shù)據(jù)
- ------------------------------------------------*/
- void Write8563(void)
- {
-
- unsigned char 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)閉寫保護(hù)
- // write_add(0x01,0x00); //暫停
- write_add(0x02,time_buf[6]); //秒
- write_add(0x03,time_buf[5]); //分
- write_add(0x04,time_buf[4]); //時(shí)
- write_add(0x05,time_buf[3]); //日
- write_add(0x06,time_buf[7]); //周
- write_add(0x07,time_buf[2]); //月
- write_add(0x08,time_buf[1]); //年
- // write_add(0x00,0x00); //打開寫保護(hù)
- }
- /*-----------------------------------------
- 讀出時(shí)鐘數(shù)據(jù)
- ----------------------------------------*/
- void read8563()
- {
- time_buf[6]=read_add(0x02); //秒
- time_buf[5]=read_add(0x03); //分
- time_buf[4]=read_add(0x04); //時(shí)
- time_buf[3]=read_add(0x05); //日
- time_buf[7]=read_add(0x06); //周
- time_buf[2]=read_add(0x07); //月
- time_buf[1]=read_add(0x08); //年
- time_buf1[1]=time_buf[1]%16+(time_buf[1]/16)*10;
- time_buf1[2]=(time_buf[2]&0x1f)%16+((time_buf[2]&0x1f)/16)*10;
- time_buf1[3]=(time_buf[3]&0x3f)%16+((time_buf[3]&0x3f)/16)*10;
- time_buf1[4]=(time_buf[4]&0x3f)%16+((time_buf[4]&0x3f)/16)*10;
- time_buf1[5]=(time_buf[5]&0x7f)%16+((time_buf[5]&0x7f)/16)*10;
- time_buf1[6]=(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;
- }
復(fù)制代碼
|