前言
一、DS1302时钟芯片
工作原理:
DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。这个芯片经常被使用在单片机上面,用来显示时间。
二、代码解析
下面函数需要自己编写
//DS1302写时钟地址:0x8c,0x8a,0x88,0x86,0x84,0x82,0x80 //地址分别对应年月周日时分秒 //DS1302读时钟地址:0x8d,0x8b,0x89,0x87,0x85,0x83,0x81 void set_Time(unsigned char hor,unsigned char min,unsigned char sec) { Write_Ds1302_Byte(0x8e,0x00);//关闭写保护 Write_Ds1302_Byte(0x80,(sec/10)*16+sec%10);//写入秒 Write_Ds1302_Byte(0x82,(min/10)*16+min%10);//写入分 Write_Ds1302_Byte(0x84,(hor/10)*16+hor%10);//写入时 Write_Ds1302_Byte(0x8e,0x80);//打开写保护 } //调用函数设置时间 set_Time(23,59,50);//调用此函数我们就可以去设置时间了 读取时间 hor1=Read_Ds1302_Byte(0x85); min1=Read_Ds1302_Byte(0x83); sec1=Read_Ds1302_Byte(0x81); hor=(hor1/16)*10+hor1%16; min=(min1/16)*10+min1%16; sec=(sec1/16)*10+sec1%16;
有些小伙伴可能疑问了为什么不直接写入sec、min、hor呢,读取的时候也可以直接读取。DS1302寄存器使用的是压缩BCD码,所以在写入的时候我们要把十进制转换为BCD码格式,读取的时候我们要的是十进制格式所以又得进行一次转换,这样才能得到我们想要显示出来的时间。
BCD码和十进制的转换大家可以百度找找资料。
总结
DS1302的核心就在于这个Set_time函数编写,还有后面的写入和读取步骤。
只要注意好这些相信DS1302对于大家也不算什么了。