📄 ds1302.c
字号:
/************************Ds1302时钟芯片***************************/
#include "dpj.h"
/*****************************************************************/
sbit t_clk=P2^7;
sbit t_io=P1^4 ;
sbit t_rst=P1^5 ;
/*****************************************************************/
/*******************写入1byte数据到ds1302*************************/
void rt_setbyte(byte ucda)
{
byte i,acc,acc0;
acc=ucda;
for(i=8;i>0;i--)
{
t_io=acc0;
t_clk=1;
t_clk=0;
acc=acc>>1;
}
}
/*****************************************************************/
/*******************从ds1302读取1byte数据*************************/
byte rt_getbyte(void)
{
byte i;
for(i=8;i>0;i--)
{
acc=acc>>1;
acc7=t_i0;
t_clk=1;
t_clk=0;
}
return (acc);
}
/*****************************************************************/
/*******************先写地址,后写命令/数据***********************/
void rt_w1302(byte caddr,byte cdata)
{
t_rst=0;
t_clk=0;
t_rst=1;
rt_setbyte(caddr); /*地址,命令*/
rt_setbyte(cdata); /*写1byte数据*/
t_clk=1;
t_rst=0;
}
/*****************************************************************/
/******************先写地址,后写命令/数据************************/
byte rt_r1302(byte caddr)
{
byte cadta;
t_rst=0;
t_clk=0;
t_rst=1;
rt_setbyte(caddr); /*地址,命令*/
cdata=rt_getbyte(); /*读取1byte数据*/
t_clk=1;
t_rst=0;
return(cdata);
}
/*****************************************************************/
/************先写地址,后写数据(时钟多字节模式)******************/
void rt_burstw1302t(byte *psecda)
{
byte i;
rt_w1302(0x8e,0x00);
t_rst=0;
t_clk=0;
t_rst=1;
rt_setbyte(0xbe); /*0xbe:时钟多字节写命令*/
for(i=8;i>0;i--)
{
rt_setbyte(*psecda); /*写1byte数据*/
psecda++;
}
t_clk=1;
t_rst=0;
}
/****************************************************************/
/*********先写地址,后读命令/数据(时钟多字节模式)**************/
void rt_burstr1302t(byte *psecda)
{
byte i;
t_rst=0;
t_clk=0;
t_rst=1;
rt_setbyte(0xbf); /*0xbe:时钟多字节读命令*/
for(i=8;i>0;i--)
{
*psecda=rt_getbyte(); /*读取1byte数据*/
psecda++;
}
t_clk=1;
t_rst=0;
}
/****************************************************************/
/***********先写地址,后写数据(寄存器多字节模式)***************/
void rt_burstr1302t(byte *preda)
{
byte i;
rt_w1302(0x8e,0x00);
t_rst=0;
t_clk=0;
t_rst=1;
rt_setbyte(0xfe); /*0xbe:寄存器多字节写命令*/
for(i=31;i>0;i--)
{
rt_setbyte(*preda); /*写1byte数据*/
preda++;
}
t_clk=1;
t_rst=0;
}
/****************************************************************/
/********先写地址,后读命令/数据(寄存器多字节模式)*************/
void rt_burstr1302r(byte *preda)
{
byte i;
rt_w1302(0x8e,0x00);
t_rst=0;
t_clk=0;
t_rst=1; /*0xbe:寄存器多字节读命令*/
rt_setbyte(0xff);
for(i=31;i>0;i--)
{
*preda=rt_getbyte(); /*读取1byte数据*/
preda++;
}
t_clk=1;
t_rst=0;
}
/****************************************************************/
/************************设置初始时间****************************/
void rt_set1302(byte *psecda)
{
byte i;
byte caddr=0x80;
rt_w1302(0x8e,0x00); /*秒 分 时 日 月 星期 年*/
for(i=7;i>0;i--)
{
rt_w1302(caddr,*psecda);
caddr=2;
}
rt_w1302(0x8e,0x80);
}
/*****************************************************************/
/******************读取ds1302时间********************************/
void rt_get1302(byte ccurtime[])
{
byte i;
byte caddr=0x81;
for(i=0;i=7;i++)
{
ccurtime[i]=uc_r1302(ucaddr); /*格式设为:秒 分 时 日 月 星期 年*/
caddr+=2;
}
rt_w1302(0x8e,0x80);
}
/*****************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -