实现实时时钟在数码管上显示时间 实验介绍 DS1302 实时时钟在蓝桥杯单片机组比赛应用题中常考模块之一,我们需要学会 DS1302 实时时钟,准确在板子上显示时间。DS1302 模块是一种串行接口的实时时钟。在 DS1302 芯片的内部具备有可编程的日历时钟。它是通过简单的串行接口与微处理器通信,实时时钟/日历提供秒数,分钟、小时、星期、日期、月份和年份信息。月末日期自动调整为少于 31 天的月份,包括闰年的更正,时钟以 24 小时制或带 AM/PM 指示器的 12 小时制。本节我们将会主要学习如何实现 DS1302 实时时钟。 知识点 DS1302 芯片原理图DS1302 芯片模块引脚含义时间寄存器位的含义实时时钟演示示例 DS1302 芯片原理 DS1302 芯片使用同步串行通信,简化了 DS1302 与微处理器的连接。只有三个与时钟 RAM 通信需要电线:CE、I/O(数据线)和 SCLK(串行时钟)。数据可以每次向时钟 RAM 传输 1 个字节或以最多 31 个字节的突发传输。DS1302 旨在以非常低的功耗运行,并在不到 1μs 的时间内保留数据和时钟信息。 DS1302 是 DS1202 的后续产品。除了 DS1202 的基本计时功能外,DS1302 具有用于主电源和备用电源的双电源引脚的附加功能,可编程用于 VCC1 的涓流充电器,以及 7 个额外字节的暂存器存储器。另外 DS1302 是功耗比较低的时钟芯片,可以对年、月、日、周、时、分、秒进行计时,还具有闰年补偿等功能。 DS1302 模块在蓝桥杯单片机组板子上的原理图如下所示:
P17:SCLK 为时钟输入端。P23:I/O 为串行数据输入输出端(双向)。P13:RST 是复位。 下面是关于引脚的解释,大家可以初步了解一下即可。 X1 与 X2:标准 32.768kHz 石英晶体的连接。内部振荡器是设计用于与具有 6pF 指定负载电容的晶体一起工作。DS1302 也可以由外部 32.768kHz 振荡器驱动。在这个配置,X1 引脚连接到外部振荡器信号和 X2 引脚是浮动的。 工作电路原理图如下所示:显示串行计时器的主要素有移位寄存器,控制逻辑,振荡器,实时时钟,和内存。
日历时钟寄存器 这个是大家学习的重点,只有把时钟寄存器牢牢地掌握之后,才更高效的控制时钟模块。需要知道每个 bit 位的含义。另外在蓝桥杯单片机组比赛时,会提供数据资源包,里面会有日历时钟寄存器,大家可以去参阅寄存器手册。
第一行:秒的取值说明,秒的取值范围是 0 – 59,十位最大数为 5,需要三个 bit 位,即 bit4、bit5、bit6 表示秒的十位数值。个位数最大数为 9,需要四位,即 bit0、bit1、bit2、bit3。第二行:分钟的取值范围,取值范围为 0 – 59,与第一行一致。第三行:小时的取值范围,bit7 = 1 时,此时时钟以 12 小时制显示,当 bit7 = 0 时,此时 DS1302 时钟芯片以 24 小时制显示。当时钟以 12 小时制显示时,bit5 = 0 表示上午,bit5 = 1 时表示下午。当时钟以 24 小时制显示时,bit5 与 bit4 一起表示小时的十位。 其余行同理可得。 注意:倒数第二行,只看 bit7,当 bit7 = 1,即 WP = 1 时禁止写数据。所以必须写数据时,必须置 0。 再了解一下 DS1302 芯片内部框图,然后开始在蓝桥杯单片机组板子上实战演练。
官方提供 DS1302 芯片文件 在蓝桥杯单片机组比赛时,官方会提供 DS1302 芯片操作 与 文件。
文件如下: 由于官方已经给出驱动文件,把驱动文件加以修改,在结合自己的显示代码,最终可以实现实时时钟。 实时时钟部分只需要知道,如何读时间、如何写入初始值、转换公式是什么。 BCD 码与十进制的转换 对于 DS1302 实时时钟模块,写入或者读出的数据是 BCD 码,当需要写入数据时,需要把写入的十进制转换为 BCD 码。当需要读出数据时,需要把读取到的 BCD 码转换为十进制数。 下面来看一下 BCD 码与十进制数值的对应关系。
在上图中可以看出十进制数为 0 到 9 时 BCD 码都是以二进制数来计算的,但是从数值 10 以后 BCD 码开始变得不一样啦。 十进制数从 10 以后,BCD 码以四位二进制数为一单位来表示一个数,例如数值 10 的 BCD 码是 00010000,可以看出前四位二进制数为 0001 表示十进制数值 1,后四位二进制数 0000 表示十进制数值 0。我们可以得出如下转换公式: 十进制转换 BCD 码的公式为:BCD 码 = 十进制数 / 10 * 16 + 十进制数 % 10。 例如:十进制数值 18 的转换为 。 BCD 码转换十进制的公式为:十进制数 = BCD / 16 * 10 ^ 1 + BCD % 16。 写入初始值操作 例如:显示时间为 18:50:50,可以执行如下代码。 记着转换公式为:((value/10)<<4|(value%10))。 读出数据操作 记着转换公式为:。 另外写入、读出年、星期、月、日也是如此,只要修改写入、读出初始值就 OK 了。 实时时钟示例 用分模块实现 DS1302 时钟显示时间的代码层次架构更加清晰,以后多个功能的实现要分模块块处理,这样的代码修改比较方便。(建议模块化) 各个模块代码 文件代码: 文件代码: 文件代码: 结果与体会 运行后,结果如下所示: 此代码和官方给出的驱动有所修改,增加了 DS1302 初始化函数和时间的函数,还有在向 DS1302 单字节写入一字节数据,修改: 修改官方提供的实时时钟驱动文件,实时时钟 DS1302 单字节读出一字节数据函数修改为: 上述代码只要注意转换公式就可以了,在 中要增加函数说明。
https://www.zhihu.com/video/ 实验总结 DS1302 是功耗比较低的时钟芯片,可以对年、月、日、周、时、分、秒进行计时,还具有闰年补偿等功能。实时时钟章节需要大家熟悉 DS1302 芯片原理图连接方式,引脚含义等,另外还需要掌握寄存器 bit 位的含义。做到熟练使用。记得读写转换公式,做到这些便可进行下面章节的学习。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/34437.html