📄 ds1302.h
字号:
sbit RST=P1^0;
sbit SCLK=P1^1;
sbit I_O=P1^2;
uchar read_data[7];//存取时间数据
//写指令数据字节,低位在前
void write_ds1302_data(uchar ds1302_data)
{
uchar i;
for(i=0;i<8;i++)
{
I_O=(bit)(ds1302_data&0x01);
SCLK=0;
SCLK=1;
ds1302_data>>=1;
}
}
//读数据字节,低位在前
uchar read_ds1302_data(void)
{
uchar i,temp=0;
for(i=0;i<8;i++)
{
if(I_O)
{ temp|=0x80;}
SCLK=1;
SCLK=0;
temp>>=1;
}
return(temp);
}
//写指令数据
void write_ds1302(uchar data_address,uchar ds1302_data)
{
RST=0;
RST=1;
write_ds1302_data(data_address);
write_ds1302_data(ds1302_data);
RST=0;
}
//读显示数据
uchar read_ds1302(uchar data_address)
{
uchar temp;
RST=0;
RST=1;
write_ds1302_data(data_address);
temp=read_ds1302_data();
RST=0;
return(temp);
}
//时钟开关:0 关; 1 开
void start_ds1302_onoff(uchar onoff)
{
if(onoff)
{onoff=0x00;}
else
{onoff=0x80;}
write_ds1302(0x80,onoff);
}
//写保护位 :0 允许写字节;1 禁止写字节
/*void set_protect_bit(uchar protect_bit)
{
if(!protect_bit)
{ protect_bit=0x00;}
else
{ protect_bit=0x80;}
write_ds1302(0x8e,protect_bit);
}*/
//设置VCC1与VCC2的连接属性(2个二极管,4K欧姆电阻)
void set_vcc1_vcc2_property(void)
{
write_ds1302(0x90,0xaa);
}
//连续写入ds1302的时间
void write_serial_ds1302(uchar * init_time)
{
uchar i,j;
//set_protect_bit(0);
RST=0;
RST=1;
write_ds1302_data(0xbe);
RST=0;
for(j=0,i=0x80;j<7;j++)
{
write_ds1302(i,* init_time);
i+=2;
init_time++;
}
//set_protect_bit(1);
}
//连续读取ds1302内的时间数据
void read_serial_ds1302(void)
{
uchar i,j;
write_ds1302_data(0xbf);
for(j=0,i=0x81;j<8;j++)
{
read_data[j]=read_ds1302(i);
i+=2;
}
}
//初始化ds1302
void Init_ds1302(void)
{
uchar * temp,Init_time[7]={0x50,0x59,0x23,0x26,0x03,0x07,0x07};
temp=&Init_time[0];
start_ds1302_onoff(1);
set_vcc1_vcc2_property();
write_serial_ds1302(temp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -