📄 ds1302.c
字号:
#include"Bit_Define.h"
/*********************************************************************/
sbit T_CLK = P1^3; /*实时时钟时钟线引脚 */
sbit T_IO = P1^5; /*实时时钟数据线引脚 */
sbit T_RST = P1^4; /*实时时钟复位线引脚 */
void outbyte(uchar data_da)
{
uchar i;
for(i=0;i<8;i++)
{
T_CLK=0; //上升沿输出数据
if(data_da&0x01) T_IO=1;
else T_IO=0;
T_CLK=1;
data_da=data_da>>1;
}
}
uchar inbyte(void)
{
uchar i,data_da; //设置IO位输入模式
T_CLK=1;
for(i=0;i<8;i++) //下降沿读入数据,低位在先
{
data_da>>=1;
T_CLK=0;
if(T_IO) data_da|=0x80;
else data_da&=~0x80;
T_CLK=1;
}
return(data_da);
}
void W1302(uchar cmd,uchar dat)
{
T_CLK=0; //RST 为1时,SCLK必须为"0"
T_RST=1;
outbyte(cmd);
T_IO=0;
outbyte(dat);
T_RST=0;
}
uchar R1302(uchar cmd)
{
uchar data_da;
T_CLK=0; // RST 为1时,SCLK必须为"0"
T_RST=1;
outbyte(cmd);
data_da=inbyte();
T_RST=0;
T_CLK=0;
return(data_da);
}
void Write_RAM(uchar *ram)
{
uchar i;
W1302(0x8e,0x00); //控制命令,WP=0,写操作
T_RST=0;
T_CLK=0;
T_RST=1;
outbyte(0xfe); //0xfe:时钟多字节写命令
for (i = 31; i>0; i--) //31Byte 寄存器数据
{
outbyte(*ram); //写1Byte数据
ram++;
}
T_CLK=1;
T_RST=0;
}
void Read_RAM(uchar *ram)
{
uchar i;
T_RST=0;
T_CLK=0;
T_RST=1;
outbyte(0xff); //0xbe:时钟多字节写命令
for (i = 31; i>0; i--) //31Byte 寄存器数据
{
*ram=inbyte(); //读1Byte数据
ram++;
}
T_CLK=1;
T_RST=0;
}
void Set_Times(uchar *t)
{
uchar tbl[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//时间地址
uchar i,high4,low4,buf;
for(i=0;i<7;i++)
{
high4=t[i]/10; //以BCD码形势写入1302中
low4 =t[i]%10;
buf=(high4<<4)|low4;
W1302(tbl[i],buf);
}
}
void Get_Times(uchar *t)
{
uchar tbl[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};//时间地址
uchar i,buf=0;
for(i=0;i<7;i++)
{
buf=R1302(tbl[i]);
t[i]=(buf>>4)*10+(buf&0x0f); //计算时间
}
}
void Init_1302(void)
{
W1302(0x90,0xa4); //设定充电方式
W1302(0x8e,0); //开始振荡,允许写入
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -