📄 ds1302.c
字号:
/*********************************************************************************/
//ds1302驱动
/*********************************************************************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar sec,min,hour,date,moon,year,xingqi;
uchar time[6];
uchar datt[6];
sbit rst = P1^3;
sbit scl = P1^1;
sbit sd = P1^2;
/***********************************对DS1302初始化++******************************/
void ds1302_init(void)
{
rst = 0;
scl = 0;
rst = 1;
}
/*********************************对DS1302写1字节函数*****************************/
void write_ds1302_onebyte(uchar date)
{
uchar i;
for(i=8;i>0;i--)
{
scl = 0;
sd = (bit)(date & 0x01);
scl = 1; //上升沿
date = date >> 1;
}
}
/*********************************从DS1302读一字节函数*****************************/
uchar read_ds1302_onebyte(void)
{
uchar i,dat;
for(i = 8;i > 0;i--)
{
scl = 1;
scl = 0; //下降沿
dat = dat >> 1;
if(sd)dat = dat | 0x80;
}
return(dat);
}
/*****************************对DS1302的某一地址写一字节函数***********************/
void write_ds1302_add_dat(uchar add,uchar dat)
{
ds1302_init();
write_ds1302_onebyte(add);
write_ds1302_onebyte(dat);
scl = 1;
rst = 0;
}
/*****************************从DS1302的某一地址读一字节函数***********************/
uchar read_ds1302_add(uchar add) //读1302数据
{
uchar dat_temp;
ds1302_init();
write_ds1302_onebyte(add);
dat_temp = read_ds1302_onebyte();
scl = 1;
rst = 0;
return(dat_temp);
}
/********************************8421BCD码到十进制转换*****************************/
uchar BCD_DEC_conv(uchar x)
{
uchar dec;
dec = 0x0f & x;
x = x >> 4;
dec = dec + x * 10;
return(dec);
}
uchar DEC_BCD_conv(uchar x)
{
uchar bcd;
bcd = x % 10;
x = x / 10;
x = x << 4;
bcd = bcd | x ;
return(bcd);
}
void get_ds1302_time(void) //获取1302的时间数据(时、分、秒),存入time1数组中
{
uchar d;
d = read_ds1302_add(0x81); //读秒
sec = BCD_DEC_conv(d); //得到秒
d = read_ds1302_add(0x83); //读分
min = BCD_DEC_conv(d); //得到分
d = read_ds1302_add(0x85); //读小时
hour = BCD_DEC_conv(d); //得到小时
d = read_ds1302_add(0x87); //读日
date = BCD_DEC_conv(d); //得到日
d = read_ds1302_add(0x89); //读月
moon = BCD_DEC_conv(d); //得到月
d = read_ds1302_add(0x8b); //读星期
xingqi = d; //得到星期
d = read_ds1302_add(0x8d); //读年
year = BCD_DEC_conv(d); //得到年
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -