微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机的ds1302驱动程序

51单片机的ds1302驱动程序

时间:12-01 来源:互联网 点击:

RCC_Clocks->SYSCLK_Frequency= (HSE_Value >>

配合wr1302使用

*************************************/

void wr1302b(uchar d)

{

unsigned char i;

ACC = d;

for(i=8; i>0; i--)

{

dssda = ACC0; //相当于汇编中的 RRC

dssck = 1;

dssck = 0;

ACC = ACC >> 1;

}

}

/*************************************

函数名:wr1302

函数功能:向1302中写数据

参数:ucAddr(DS1302地址), ucData(要写的数据)

返回:无

备注:无

*************************************/

void wr1302(uchar ucAddr, uchar ucDa)

{

dsrst = 0;

dssck = 0;

dsrst = 1;

wr1302b(ucAddr); // 地址,命令

wr1302b(ucDa); // 写1Byte数据

dssck = 1;

dsrst = 0;

}

/*************************************

函数名:re1302b

函数功能:实时时钟读取一字节

参数:无

返回:ACC

备注:配合re1302使用

*************************************/

uchar re1302b(void)

{

unsigned char i;

for(i=8; i>0; i--)

{

ACC = ACC >>1; //相当于汇编中的 RRC

ACC7 = dssda;

dssck = 1;

dssck = 0;

}

return(ACC);

}

/*************************************

函数名:re1302

函数功能:读数据

参数:ucAddr(地址)

返回:ucData(数据)

备注:无

*************************************/

uchar re1302(uchar ucAddr) //读取DS1302某地址的数据

{

unsigned char ucData;

dsrst = 0;

dssck = 0;

dsrst = 1;

wr1302b(ucAddr|0x01); // 地址,命令

ucData = re1302b(); // 读1Byte数据

dssck = 1;

dsrst = 0;

return(ucData);

}

/*************************************

函数名:dsinit

函数功能:时钟初始化

参数:无

返回:无

备注:无

*************************************/

void dsinit(void) //时钟初始化可以不填

{

wr1302(dsbaohu,off);

wr1302(dsyear,0x09);

wr1302(dsmonth,0x11);

wr1302(dsday,0x02);

wr1302(dsweek,0x01);

wr1302(dshour,0x23);

wr1302(dsminute,0x57);

wr1302(dssecond,0x55);

wr1302(dsbaohu,on);

}

/*************************************

函数名:dsgettime

函数功能:获取时间到时间型指针

参数:systime *ds1302(时间型数据指针)

返回:无

备注:无

*************************************/

void dsgettime(systime *ds1302) //获取时钟芯片的时钟数据到自定义的结构型数组

{

unsigned char ReadValue;

ReadValue = re1302(dssecond);

ds1302->Second = bcdtohex(ReadValue);

ReadValue = re1302(dsminute);

ds1302->Minute = bcdtohex(ReadValue);

ReadValue = re1302(dshour);

ds1302->Hour = bcdtohex(ReadValue);

ReadValue = re1302(dsday);

ds1302->Day = bcdtohex(ReadValue);

ReadValue = re1302(dsweek);

ds1302->Week = bcdtohex(ReadValue);

ReadValue = re1302(dsmonth);

ds1302->Month =bcdtohex(ReadValue);

ReadValue = re1302(dsyear);

ds1302->Year = bcdtohex(ReadValue);

}

/*************************************

函数名:timetostr

函数功能:将时间转换液晶显示字符放入数组timestr[]

参数:systime *ds1302(时间型数据指针)

返回:无

备注:无

*************************************/

void timetostr(systime *ds1302)

{ if(flaghour<2)

{

ds1302->timestr[0] = ds1302->Hour/10 + 0;

ds1302->timestr[1] = ds1302->Hour%10 + 0;

}

else

{

ds1302->timestr[0] = ;

ds1302->timestr[1] = ;

}

ds1302->timestr[2] = :;

if(flagmin<2)

{

ds1302->timestr[3] = ds1302->Minute/10 + 0;

ds1302->timestr[4] = ds1302->Minute%10 + 0;

}

else

{

ds1302->timestr[3] = ;

ds1302->timestr[4] = ;

}

ds1302->timestr[5] = :;

if(flagsec<2)

{

ds1302->timestr[6] = ds1302->Second/10 + 0;

ds1302->timestr[7] = ds1302->Second%10 + 0;

}

else

{

ds1302->timestr[6] = ;

ds1302->timestr[7] = ;

}

ds1302->timestr[8] = ;

}

/*************************************

函数名:datetostr

函数功能:将日期转换液晶显示字符放入数组datestr[]

参数:systime *ds1302(时间型数据指针)

返回:无

备注:无

*************************************/

void datetostr(systime *ds1302) //将时间年,月,日,星期数据转换

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top