标题:
NXF8563驱动程序
[打印本页]
作者:
1qaz2wsx77
时间:
2015-12-3 21:22
标题:
NXF8563驱动程序
在废电路板上看到一个NXF8563,整下来研究了一下,发现这个论坛上关于这个的资料非常少,现在把整好的发出来,大家共同学习。这个时钟片应该是和PCF8563是一样的,只是封装不同。
nxf8563.rar
2015-12-3 21:18 上传
点击文件名下载附件
下载积分: 黑币 -5
1.83 KB, 下载次数: 23, 下载积分: 黑币 -5
时钟驱动
作者:
admin
时间:
2015-12-3 22:34
谢谢楼主分享,我把楼主的主程序贴出来 为大家省点黑币
#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;
}
复制代码
作者:
1qaz2wsx77
时间:
2015-12-4 07:15
感谢关注。这上面有个time_buf1[] 数组,是输出十进制时钟数据用的,可以方便地移植到其它的显示程序中。感觉还算详实。
作者:
1qaz2wsx77
时间:
2015-12-9 07:33
更正一下,那个片应该是NXP8563。贴片的,实在是太小,没看清楚,对不起大家呀。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1