对时钟模块DS1302的学习

本文介绍了如何使用ds1302时钟芯片进行日期和时间的读写操作,包括晶振的概念、不同寄存器的处理、底层驱动的使用、以及如何通过位操作进行BCD码转换。同时提到在编程挑战中可能遇到的硬件连接问题和代码调试要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念和原理

说明:1.这个32.768K是晶振。2.重点关注读取日历时钟寄存器。

 说明:1.是一块物理单元,但因为我们读写指令不同,所以分开俩种寄存器加以区分;

2.第八位读写保护位只有一位有效,记住0和1的效果,0允许,1禁止;

        这个很好理解,指令不同,分俩组,指令和数据不同,分三组。 这里第三个数组可以自定义设置。咱们实验使用的是23年12月31日23时59分55秒。

         提一下这个是因为,客观题会考,是比较特殊的点,写时上升沿有效,读是下降沿有效。

然后这个蓝桥杯比赛会提供ds1302底层驱动程序给你,完善头文件和引脚定义就行,而且这种本身带了一根时钟线的,与单片机独立开来,不管是12T还是1T都没影响,不用改。

         不管考什么,都是建立在这两个基本操作上进行(可以独立按键挑时间和数码管显示)

二、题目

        额初始时间咱们设置成(23年)周7,12月31日23时59分55秒吧,这样方便检验时钟模块能不能用。

三、手写代码

        一、框架

二、 重头戏ds1302

        复制粘贴大赛给的底层驱动代码就不说了,重点是撰写这个读取和写入的两个函数,位操作大家不会的话可以仿照小蜜蜂的写法,我这种很简洁但是你要知道为什么,是跟国一学长学得。

切记:(坑了笔者不小啊)这个原理图上面就是AT24C02芯片的原理图,但是AT24C02中SDA是P21引脚,我们的DS1302是P23,就是那个I/O对应的引脚。

        为什么:直接定义一个数组,里面放上我们的时间数据。但是给写字节函数的是BCD码也就是二进制,那就可以通过移位和|的操作将十进制转换成BCD,读取就是将BCD转成十进制,右移四位得到的是十位上的数字,乘10加上个位上的数字就可以得到十进制数了,至于写读寄存器地址,是有规律的增加的,就可以一并用i来解决,而不是再定义俩个数组。

 说明:1.这个打印的话作者试过了,打到周几就没啥问题除了一些常见的不稳定,如果多打年份的话,秒数那里就会错误。

三、uart文件

        记住重新定义那个putchar函数,不然还真没法用printf。

四、结尾

        实验现象里面的??不管,正常的不稳定现象,会有完整数据的打印的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值