谢谢楼主分享,我把楼主的主程序贴出来 为大家省点黑币- #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};//空年月日时分秒周
- unsigned char time_buf[8] ; //空年月日时分秒周
- /*----------------------------
- 延时微秒函数
- -----------------------------*/
- 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);
- }
- /*--------------------------
- 开始信号
- --------------------------*/
- void start()
- {
- sda=1;
- delayus();
- scl=1;
- delayus();
- sda=0;
- delayus();
- }
- /*-----------------------
- 停止
- -----------------------*/
- void stop()
- {
- sda=0;
- delayus();
- scl=1;
- delayus();
- sda=1;
- delayus();
- }
- /*-----------------------
- 应答
- -------------------------*/
- void respons()
- {
- uchar i;
- scl=1;
- delayus();
- while((sda==1)&&(i<250))i++;
- scl=0;
- delayus();
- }
- /*------------------------------------
- 写一个字节子函数
- ------------------------------------*/
- 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();
- }
- /*------------------------------------
- 读一个字节函数
- ------------------------------------*/
- 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;
- }
- /*--------------------------------------------------
- 往一个单元里写内容函数
- ---------------------------------------------------*/
- void write_add(uchar address,uchar date)
- {
- start();
- write_byte(0xa2);
- respons();
- write_byte(address);
- respons();
- write_byte(date);
- respons();
- stop();
- }
- /*----------------------------------------------
- 读一个单元的内容
- ---------------------------------------------*/
- 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写入时钟数据
- ------------------------------------------------*/
- 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); //关闭写保护
- // write_add(0x01,0x00); //暂停
- write_add(0x02,time_buf[6]); //秒
- write_add(0x03,time_buf[5]); //分
- write_add(0x04,time_buf[4]); //时
- 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); //打开写保护
- }
- /*-----------------------------------------
- 读出时钟数据
- ----------------------------------------*/
- void read8563()
- {
- time_buf[6]=read_add(0x02); //秒
- time_buf[5]=read_add(0x03); //分
- time_buf[4]=read_add(0x04); //时
- 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;
- }
复制代码
|