DS1302中文资料,带源代码.pdfhttps://www.yuque.com/office/yuque/0/2023/pdf/22878478/1677912011491-c4ce05ac-c444-4270-b634-d5de874d15d0.pdf?from=https%3A%2F%2Fwww.yuque.com%2Fu22435687%2Fuo7teb%2Fme647k9u3m6xvgkeDS1302中文数据手册.pdf
https://www.yuque.com/office/yuque/0/2023/pdf/22878478/1677915816877-18e622fa-803b-4cd6-8625-88f732d100ec.pdf?from=https%3A%2F%2Fwww.yuque.com%2Fu22435687%2Fuo7teb%2Fme647k9u3m6xvgke
编程步骤:
- 配置WP位为0(0x8e=0x00)关闭写保护,允许写操作
- 根据寄存器的地址写入相应值(BCD码形式写入)
- 配置WP位为1(0x8e=0x80,不能写=1)开启写保护,不允许写操作
秒 | 分 | 时 | 日 | 月 | 周 | 年 | |
读地址 | 0x81 | 0x83 | 0x85 | 0x87 | 0x89 | 0x8b | 0x8d |
写地址 | 0x80 | 0x82 | 0x84 | 0x86 | 0x88 | 0x8a | x08c |
/*自定义DS1302读与写函数*/
/*---DS1302写入和读取时分秒的地址命令---*/
//------------------秒-----分----时---日----月----周-----年-----------//
//时钟数据读取地址{0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
//时钟数据写入地址{0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
//函数名称:DS1302时分秒时钟设置(初始化)
//入口参数:包括时钟数据的数组
//返回值:无
//函数功能:DS1302时分秒时钟设置,小时的位7是模式位,为1时是12小时制(为0时是24小时制);小时的位5为1时是下午(为0是上午)
void Set_Rtc(unsigned char *ucRtc)
{
unsigned char Temp;//中间局部变量,存放时间
Write_Ds1302_Byte(0x8e,0x00);//允许写操作(关闭写保护),使wp位为0
Temp=(((ucRtc[0]/10)<<4)|0x80)|(ucRtc[0]%10);//(12小时制,将位7置1)数据的第0个元素,存放的是小时,用BCD码的形式存储
Write_Ds1302_Byte(0x84,Temp);//写入到小时寄存器中
Temp=((ucRtc[1]/10)<<4)|(ucRtc[1]%10);//数据的第1个元素,存放的是分钟,用BCD码的形式存储
Write_Ds1302_Byte(0x82,Temp);//写入到分钟寄存器中
Temp=((ucRtc[2]/10)<<4)|(ucRtc[2]%10);//数据的第2个元素,存放的是秒,用BCD码的形式存储
Write_Ds1302_Byte(0x80,Temp);//写入到秒钟寄存器中
Write_Ds1302_Byte(0x8e,0x80);//不允许写操作(打开写保护),使wp位为1
}
//函数名称:读取DS1302时分秒时钟
//入口参数:读取的时分秒数据存放数组指针
//返回值:无
//函数功能:读取DS1302时分秒时钟,小时的位7是模式位,为1时是12小时制(为0时是24小时制);小时的位5为1时是下午(为0是上午)
void Read_Rtc(unsigned char *ucRtc)
{
unsigned char Temp;//中间局部变量,存放地址
Temp=Read_Ds1302_Byte(0x85);//读取小时BCD数值
ucRtc[0]=(((Temp&0x1F)>>4)*10)+(Temp&0x0F);//12小时制,读取前应先把小时的高3位清零;并将小时(BCD数值)转换位十进制数值,存储到数组中第一个元素中
Temp=Read_Ds1302_Byte(0x83);//读取分钟BCD数值
ucRtc[1]=((Temp>>4)*10)+(Temp&0x0F);//将读取的分钟(BCD数值)转换位十进制数值,存储到数组中第二个元素中
Temp=Read_Ds1302_Byte(0x81);//读取秒钟BCD数值
ucRtc[2]=((Temp>>4)*10)+(Temp&0x0F);//将读取的秒钟(BCD数值)转换位十进制数值,存储到数组中第三个元素中
}
注:
- 小时寄存器的位7是小时模式控制位(为1是12小时制,为0是24小时制(默认));(当设置为12小时制时,小时寄存器的位5是上午/下午模式控制位(为1是下午,为0是上午),且读取小时寄存器时,寄存器的高3位需清0)。
- 一但小时模式寄存器改变,小时数据必须被重新初始化。
- 秒钟寄存器的位7是时钟启动控制位(为1时时钟振荡器停止运行,为0时时钟正常启动)
- 时钟初始化时,初始化数据要以BCD码格式存储,因此初始化时必须先把十进制数转换为BCD码格式(读取正好相反)
- 读取小时寄存器时,小时寄存器的位7是时钟模式控制位,读取时因排除该位。
如有不妥之处,还请指出,如有补充,洗耳恭听。此笔记仅供参考,如若对你有所帮助,点个赞呗谢谢,最后祝愿你旗开得胜,金榜题名。如果有其他相关问题,也可与我联系,我定力所能及的帮助你。