51单片机的ds1302驱动程序
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) //将时间年,月,日,星期数据转换
51单片机ds1302驱动程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)