第16章 DS1302实时时钟实验

第十六章 DS1302实时时钟实验

1. DS1302介绍

DS1302 是 DALLAS 公司推出的涓流充电时钟芯片, 内含有一个实时时钟/日历和 31 字节静态 RAM, 通过简单的串行接口与单片机进行通信。 实时时钟/日历电路提供秒、 分、 时、 日、 周、 月、 年的信息, 每月的天数和闰年的天数可自动调整。 时钟操作可通过 AM/PM 指示决定采用 24 或 12 小时格式.

屏幕截图 2024 08 11 090915

  1. VCC2: 主电源引脚

  2. X1、 X2: DS1302 外部晶振引脚, 通常需外接 32.768K 晶振

  3. GND: 电源地

  4. CE: 使能引脚, 也是复位引脚。

  5. I/O: 串行数据引脚, 数据输出或者输入都从这个引脚

  6. SCLK: 串行时钟引脚

  7. VCC1: 备用电源

2. 硬件设计

本实验使用到硬件资源如下:

  • DS1302模块

  • ESP32 GPIO

DS1302模块电路如下:

屏幕截图 2024 08 11 091334

由图可知, J10 端子的 CLK、 IO、 CE 脚为 DS1302 控制口, 可将该引脚与 ESP32的 GPIO 连接。

本章实验使用 ESP32 的 IO18、 19、 23 引脚, 接线如下所示:

屏幕截图 2024 08 11 091442

3. 软件设计

3.1 MicroPython函数使用

MicroPython 固件库内并没有集成 DS1302 模块, 因此需要我们自己实现, 对于不了解 DS1302 底层寄存器命令和时序的用户来说, 要编写出驱动是困难的。MicroPython 拥有着庞大的用户群, 自然 DS1302 模块也有开源的代码, 直接拿过来使用即可, 这就是使用 MicroPython 开发的高效之处。

屏幕截图 2024 08 11 091625

3.2 代码分析

from machine import Pin
import time
import DS1302

# 定义DS1302的控制对象
ds1302 = DS1302.DS1302(clk=Pin(18), dio=Pin(19), cs=Pin(23))

week = ("星期一","星期二","星期三","星期四","星期五","星期六","星期日")

if __name__ == '__main__':
    while True:
        # 获取当前时间
        now = time.localtime()
        # 显示时间
        print("日期:{}年{}月{}日 {} {}:{}:{}".format(now[0], now[1], now[2], week[now[6]], now[3], now[4], now[5]))
        # 延时1秒
        time.sleep(1)


2024.8.22 第一次修订,后期不再维护

posted @ 2024-08-22 08:55  hazy1k  阅读(20)  评论(0编辑  收藏  举报