📄 ds1302.c
字号:
#include "reg51.h"
#include "type.h"
void write_byte(uchar byte);
uchar read_byte(void);
void write_1302(uchar addr,uchar da);
uchar read_1302(uchar addr);
sbit d_rst= P2^2;
sbit d_scl= P3^6;
sbit d_io = P3^7;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
uchar cur_time[7];
//写字节(上升沿)
void write_byte(uchar byte)
{
uchar i;
ACC=byte;
for(i=8;i>0;i--)
{
d_io=ACC0;
d_scl=0;
d_scl=1;
ACC=ACC>>1;
}
}
//读字节(下降沿)
uchar read_byte(void)
{
char i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
d_scl=1;
d_scl=0;
ACC7=d_io;
}
return (ACC);
}
//写数据(先地址,后数据)
void write_1302(uchar addr,uchar da)
{
d_rst=0;
d_scl=0;
d_rst=1;
write_byte(addr);
write_byte(da);
d_rst=0;
d_scl=1;
}
//读数据
uchar read_1302(uchar addr)
{
uchar temp;
d_rst=0;
d_scl=0;
d_rst=1;
write_byte(addr);
temp=read_byte();
d_rst=0;
d_scl=1;
return (temp);
}
//设置时间初值
void set_time(uchar *pda)
{
uchar i;
uchar add=0x80;
write_1302(0x8e,0x00); //将控制寄存器设为0x00,
//最高位WP=0可写
for(i=7;i>0;i--) //将7个时间初值写入对应寄存器
{
write_1302(add,*pda);
pda++;
add+=2;
}
write_1302(0x8e,0x80); //写保护,WP=0
}
//读取时间值
void get_time(void)
{
uchar i;
uchar add=0x81;
for(i=0;i<7;i++)
{
cur_time[i]=read_1302(add);
add+=2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -