第16章 DS1302实时时钟实验
第十六章 DS1302实时时钟实验
1. DS1302介绍
DS1302 是 DALLAS 公司推出的涓流充电时钟芯片, 内含有一个实时时钟/日历和 31 字节静态 RAM, 通过简单的串行接口与单片机进行通信。 实时时钟/日历电路提供秒、 分、 时、 日、 周、 月、 年的信息, 每月的天数和闰年的天数可自动调整。 时钟操作可通过 AM/PM 指示决定采用 24 或 12 小时格式.
-
VCC2: 主电源引脚
-
X1、 X2: DS1302 外部晶振引脚, 通常需外接 32.768K 晶振
-
GND: 电源地
-
CE: 使能引脚, 也是复位引脚。
-
I/O: 串行数据引脚, 数据输出或者输入都从这个引脚
-
SCLK: 串行时钟引脚
-
VCC1: 备用电源
2. 硬件设计
本实验使用到硬件资源如下:
-
DS1302模块
-
ESP32 GPIO
DS1302模块电路如下:
由图可知, J10 端子的 CLK、 IO、 CE 脚为 DS1302 控制口, 可将该引脚与 ESP32的 GPIO 连接。
本章实验使用 ESP32 的 IO18、 19、 23 引脚, 接线如下所示:
3. 软件设计
3.1 MicroPython函数使用
MicroPython 固件库内并没有集成 DS1302 模块, 因此需要我们自己实现, 对于不了解 DS1302 底层寄存器命令和时序的用户来说, 要编写出驱动是困难的。MicroPython 拥有着庞大的用户群, 自然 DS1302 模块也有开源的代码, 直接拿过来使用即可, 这就是使用 MicroPython 开发的高效之处。
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 第一次修订,后期不再维护