📄 ds1302.h
字号:
/********************************************
文件名:ds1302RTC芯片操作
作者 :袁洋洋
*********************************************/
/***端口说明*********************************/
#define uchar unsigned char
#define uint unsigned int
sbit rst=P1^5;
sbit sclk=P1^6;
sbit io=P1^7;
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
/**向ds1302写一个字节************************/
void inbyte(uchar d)
{
uchar i;
ACC = d;
for(i=8; i>0; i--)
{
io = ACC0; //相当于汇编中的 RRC
sclk = 1;
sclk = 0;
ACC = ACC >> 1;
}
}
/***从ds1302读一个字节*************************/
uchar outbyte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; //相当于汇编中的 RRC
ACC7 = io;
sclk = 1;
sclk = 0;
}
return(ACC);
}
/***向ds1302的某个地址写入数据*********************/
void write_1302(uchar add,uchar dat)
{
rst=0;
sclk=0;
rst=1;
inbyte(add);
inbyte(dat);
rst=0;
sclk=1;
}
/****从ds1302的某个地址读取数据*********************/
uchar read_1302(uchar add)
{uchar dat;
rst=0;
sclk=0;
rst=1;
inbyte(add);
dat=outbyte();
rst=0;
sclk=1;
return dat;
}
/*****从ds1302中读出时间****************************/
char gettime_1302(uchar add)
{char time,value;
value=read_1302(add);
time=((value&0x70)>>4)*10+(value&0x0f);//顺序为秒,分,时,日,月,星期,年
return time; //地址为81h,83h,85h,87h,89h,8bh, 8dh
}
/*****ds1302的写保护设定****************************/
void setprotect_ds1302(bit flag) //是否写保护:wp=0可以写操作,wp=1禁止写操作
{
if(flag)
write_1302(0x8E,0x80);
else
write_1302(0x8E,0x00);
}
/****设定ds1302的时间*****************************/
void settime_ds1302(uchar add,uchar value) // 设置时间函数
{ //顺序为秒,分,时,日,月,星期,年
setprotect_ds1302(0); //地址为80h,82h,84h,86h,88h,8ah,8ch
write_1302(add, ((value/10)<<4 | (value%10)));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -