ds1302时钟实验_ds1302时钟实验报告

ds1302时钟实验_ds1302时钟实验报告实现实时时钟在数码管上显示时间实验介绍DS1302 实时时钟在蓝桥杯单片机组比赛应用题中常考模块之一,我们需要学会 DS1302 实时时钟,准确在板子上显示时间。DS1302 模块是一种串行接口的实时时钟。在 DS1302 芯片的

实现实时时钟在数码管上显示时间
  实验介绍

  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 模块在蓝桥杯单片机组板子上的原理图如下所示:

  ds1302时钟实验_ds1302时钟实验报告ds1302时钟实验_ds1302时钟实验报告

  P17:SCLK 为时钟输入端。P23:I/O 为串行数据输入输出端(双向)。P13:RST 是复位。

  下面是关于引脚的解释,大家可以初步了解一下即可。

  X1 与 X2:标准 32.768kHz 石英晶体的连接。内部振荡器是设计用于与具有 6pF 指定负载电容的晶体一起工作。DS1302 也可以由外部 32.768kHz 振荡器驱动。在这个配置,X1 引脚连接到外部振荡器信号和 X2 引脚是浮动的。

  工作电路原理图如下所示:显示串行计时器的主要元素有移位寄存器,控制逻辑,振荡器,实时时钟,和内存。

  ds1302时钟实验_ds1302时钟实验报告ds1302时钟实验_ds1302时钟实验报告

  日历时钟寄存器

  这个是大家学习的重点,只有把时钟寄存器牢牢地掌握之后,才更高效的控制时钟模块。需要知道每个 bit 位的含义。另外在蓝桥杯单片机组比赛时,会提供数据资源包,里面会有日历时钟寄存器,大家可以去参阅寄存器手册。

  ds1302时钟实验_ds1302时钟实验报告ds1302时钟实验_ds1302时钟实验报告

  第一行:秒的取值说明,秒的取值范围是 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时钟实验报告ds1302时钟实验_ds1302时钟实验报告

  官方提供 DS1302 芯片文件

  在蓝桥杯单片机组比赛时,官方会提供 DS1302 芯片操作 与 文件。

  ds1302时钟实验_ds1302时钟实验报告ds1302时钟实验_ds1302时钟实验报告

  文件如下:

  由于官方已经给出驱动文件,把驱动文件加以修改,在结合自己的显示代码,最终可以实现实时时钟。

  实时时钟部分只需要知道,如何读时间、如何写入初始值、转换公式是什么。

  BCD 码与十进制的转换

  对于 DS1302 实时时钟模块,写入或者读出的数据是 BCD 码,当需要写入数据时,需要把写入的十进制转换为 BCD 码。当需要读出数据时,需要把读取到的 BCD 码转换为十进制数。

  下面来看一下 BCD 码与十进制数值的对应关系。

  ds1302时钟实验_ds1302时钟实验报告ds1302时钟实验_ds1302时钟实验报告

  在上图中可以看出十进制数为 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 单字节读出一字节数据函数修改为:

  上述代码只要注意转换公式就可以了,在 中要增加函数说明。ds1302时钟实验_ds1302时钟实验报告https://www.zhihu.com/video/1736154060712144896

  实验总结

  DS1302 是功耗比较低的时钟芯片,可以对年、月、日、周、时、分、秒进行计时,还具有闰年补偿等功能。实时时钟章节需要大家熟悉 DS1302 芯片原理图连接方式,引脚含义等,另外还需要掌握寄存器 bit 位的含义。做到熟练使用。记得读写转换公式,做到这些便可进行下面章节的学习。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/95903.html

(0)
上一篇 2024年 5月 23日 下午11:42
下一篇 2024年 5月 24日

相关推荐

关注微信