📄 ds1302.c
字号:
/*********************************************************************************/
//ds1302驱动
//2011年5月
/*********************************************************************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar sec,min,hour,date,moon,year,week;
uchar time[6];
sbit ret = P1^1;
sbit scl = P3^7;
sbit sd = P1^0;
/***********************************对DS1302初始化++******************************/
void ds1302_init(void)
{
ret = 0;
scl = 0;
ret = 1;
}
/*********************************对DS1302写1字节函数*****************************/
void write_ds1302_onebyte(uchar dat)
{
uchar i;
for(i = 0;i < 8;i++)
{
sd = dat & 0x01;
scl = 0;
scl = 1;
dat = dat >> 1;
}
}
/*********************************从DS1302读一字节函数*****************************/
uchar read_ds1302_onebyte(void)
{
uchar i,dat;
for(i = 0;i < 8;i++)
{
scl = 1;
dat = dat >> 1;
scl = 0;
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;
ret = 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;
ret = 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(0x8d); //读年
year = BCD_DEC_conv(d); //得到年
d = read_ds1302_add(0x8b); //读年
week = BCD_DEC_conv(d); //得到年
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -