0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在树莓派Pico上编程使用DS1302时钟模块?

jf_zGNBEhbi 来源:趣无尽 2023-11-28 09:16 次阅读

常用的计时时钟芯片有 DS1302、DS1307、DS3231,各型号还有衍生型号。都是 Dallas 生产的芯片。其中 DS1302 和 DS1307 可以看成是同一芯片的不同协议版本(I2C 和 SPI)。他们在树莓派 Pico 上的用法几乎一致,下面将简单介绍 DS1302 的用法。

硬件连接

时钟模块的 VCC 引脚接 Pico 的 VSYS。
时钟模块的 GND 引脚接 Pico 的 GND。
时钟模块的 CLK 引脚接 Pico 的 GP21。
时钟模块的 DAT 引脚接 Pico 的 GP20。
时钟模块的 RST 引脚接 Pico 的 GP19。

编程

使用开源的 MicroPython DS1302 库,可以在这里下载源码。也可以将下面的代码保存在 Pico 上,命名为 DS1302.py。

from machine import Pin
 
W_SECOND      = const(0x80)
W_MINUTE      = const(0x82)
W_HOUR        = const(0x84)
W_DATE        = const(0x86)
W_MONTH       = const(0x88)
W_WEEK        = const(0x8A)
W_YEAR        = const(0x8C)
W_WP          = const(0x8E)
 
R_SECOND      = const(0x81)
R_MINUTE      = const(0x83)
R_HOUR        = const(0x85)
R_DATE        = const(0x87)
R_MONTH       = const(0x89)
R_WEEK        = const(0x8B)
R_YEAR        = const(0x8D)
 
class DS1302():
    def __init__(self,SCLK,DAT,RST):
        self.resetPin = DAT
        self.SCLK = Pin(SCLK,Pin.OUT)
        self.DAT = Pin(DAT,Pin.OUT)
        self.RST = Pin(RST,Pin.OUT)
        self.SCLK.off()
        self.RST.off()
         
    def SetTime(self,YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,WEEK):
        self.WriteByte(W_WP,0x00);
        YEAR = int(YEAR/10)*16+YEAR%10
        self.WriteByte(W_YEAR,YEAR);
        MONTH = int(MONTH/10)*16+MONTH%10
        self.WriteByte(W_MONTH,MONTH);
        DAY = int(DAY/10)*16+DAY%10
        self.WriteByte(W_DATE,DAY);
        self.WriteByte(W_HOUR,HOUR);
        MINUTE = int(MINUTE/10)*16+MINUTE%10
        self.WriteByte(W_MINUTE,MINUTE);
        SECOND = int(SECOND/10)*16+SECOND%10
        self.WriteByte(W_SECOND,SECOND);
        self.WriteByte(W_WEEK,WEEK);
        self.WriteByte(W_WP,0x80);
         
    def GetTime(self):
        date = []
        Temp = self.ReadByte(R_YEAR)
        Temp = ((Temp&0xF0)>>4)*10+(Temp&0x0F)
        date.append(Temp)
        Temp = self.ReadByte(R_MONTH)
        Temp = ((Temp&0x10)>>4)*10+(Temp&0x0F)
        date.append(Temp)
        Temp = self.ReadByte(R_DATE)
        Temp = ((Temp&0x20)>>4)*10+(Temp&0x0F)
        date.append(Temp)
        Temp = self.ReadByte(R_HOUR)
        Temp = (Temp&0x1F)
        date.append(Temp)
        Temp = self.ReadByte(R_MINUTE)
        Temp = ((Temp&0x70)>>4)*10+(Temp&0x0F)
        date.append(Temp)
        Temp = self.ReadByte(R_SECOND)
        Temp = ((Temp&0x70)>>4)*10+(Temp&0x0F)
        date.append(Temp)
        Temp = self.ReadByte(R_WEEK)
        date.append(Temp)
        return date
     
    def Now(self):
        date = self.GetTime()
        Now = []
        Year = "20{0}".format(date[0])
        Now.append(Year)
        Month = "0{0}".format(date[1]) if (date[1]/10)<1 else "{0}".format(date[1])
        Now.append(Month)
        Day = "0{0}".format(date[2]) if (date[2]/10)<1 else "{0}".format(date[2])
        Now.append(Day)
        Hour = "0{0}".format(date[3]) if (date[3]/10)<1 else "{0}".format(date[3])
        Now.append(Hour)
        Minute = "0{0}".format(date[4]) if (date[4]/10)<1 else "{0}".format(date[4])
        Now.append(Minute)
        Second = "0{0}".format(date[5]) if (date[5]/10)<1 else "{0}".format(date[5])
        Now.append(Second)
        Now.append(date[6])
        return Now
 
    def WriteByte(self,Command,Data):
        self.RST.on()
        Pin(self.resetPin,Pin.OUT)
        for i in range(0,8):
            if Command&(0x01<

将下面的代码命名为 main.py 保存在 Pico 上。首次使用,或者需要修改时钟模块上的时间时,可以将代码中的 ds1302.SetTime(23,11,22,18,00,00,3) 这行代码前的注释去除,并将参数指定为你想要的时间。SetTime 方法有 7 个参数,分别是年(两位数,23 表示 2023 年)、月、日、小时(24 小时制)、分、秒、星期(1-7)。

from machine import Pin,I2C
from DS1302 import DS1302
import time
 
ds1302 = DS1302(21,20,19)
# 设置时钟模块的时间 2023-11-22 1800 星期三
# ds1302.SetTime(23,11,22,18,00,00,3)
 
while True:
    date = ds1302.Now()
    print("{0}-{1}-{2} {3}:{4}:{5}".format(date[0],date[1],date[2],date[3],date[4],date[5]))
    time.sleep(1)

运行上面的代码之后,Shell 窗口将会每一秒钟打印一行从时钟模块获取的当前时间。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 时钟芯片
    +关注

    关注

    2

    文章

    229

    浏览量

    39577
  • DS1302
    +关注

    关注

    8

    文章

    448

    浏览量

    50226
  • 时钟模块
    +关注

    关注

    1

    文章

    45

    浏览量

    14242
  • CLK
    CLK
    +关注

    关注

    0

    文章

    122

    浏览量

    16912
  • 树莓派
    +关注

    关注

    113

    文章

    1639

    浏览量

    104746

原文标题:在树莓派 Pico 上编程使用 DS1302 时钟模块

文章出处:【微信号:趣无尽,微信公众号:趣无尽】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    #硬声创作季 #树莓 树莓教程-33 时钟DS1302模块显示实验讲解-1

    DS1302树莓DS1302时钟芯片DS1302驱动
    水管工
    发布于 :2022年10月09日 03:27:09

    DS1302时钟模块

    DS1302时钟模块
    发表于 08-13 18:52

    DS1302时钟模块简介

    【Arduino】使用DS1302时钟模块搭配TM1637四位数码管制作简易电子钟材料准备DS1302时钟
    发表于 07-26 06:34

    实时时钟DS1302程序列子

    实时时钟DS1302程序列子     /*********************************************************************//* 实时时钟
    发表于 07-08 16:26 142次下载

    ds1302时钟电路

    ds1302时钟电路
    发表于 05-17 13:17 7770次阅读
    <b class='flag-5'>ds1302</b><b class='flag-5'>时钟</b>电路

    ds1302时钟程序详解,ds1302程序流程图(C程序)

    ds1302时钟程序详解 DS1302 的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历
    发表于 05-17 13:22 8.7w次阅读
    <b class='flag-5'>ds1302</b><b class='flag-5'>时钟</b>程序详解,<b class='flag-5'>ds1302</b>程序流程图(C程序)

    DS1302时钟模块原理图

    ds1302时钟芯片简单介绍及其原理图。
    发表于 04-06 16:01 15次下载

    DS1302时钟(并)

    电子专业单片机相关知识学习教材资料——DS1302时钟(并)
    发表于 08-23 15:55 36次下载

    基于DS1302芯片的时钟设计

    基于DS1302芯片的时钟设计
    发表于 03-01 12:21 11次下载

    基于实时时钟模块 时钟芯片DS1302

    基于实时时钟模块 时钟芯片DS1302
    发表于 10-16 11:35 39次下载
    基于实时<b class='flag-5'>时钟</b><b class='flag-5'>模块</b> <b class='flag-5'>时钟</b>芯片<b class='flag-5'>DS1302</b>

    DS1302芯片的使用,时钟芯片DS1302功能汇总

    DS1302大家都知道他是时钟芯片,知道了原理肯定想知道功能和操作方法,这篇文章就是主要来说DS1302芯片的功能以及时钟芯片DS1302
    发表于 10-19 10:43 8964次阅读

    微雪电子RTC 时钟模块 DS1302简介

    RTC 时钟模块 DS1302实时时钟 SPI接口 板载纽扣电池座 支持三线或四线同步串行通信 应用于手持设备 电子手表 闹钟 型号 D
    的头像 发表于 12-30 10:03 2781次阅读
    微雪电子RTC <b class='flag-5'>时钟</b><b class='flag-5'>模块</b> <b class='flag-5'>DS1302</b>简介

    时钟模块DS1302万年历设计

    时钟模块DS1302万年历设计说明。
    发表于 04-13 09:35 24次下载

    毕业设计之时钟模块设计DS1302

    模块:使用的芯片是:DS1302芯片,DS1302芯片是一个自动计时的时钟模块,有8个时钟寄存
    发表于 11-15 11:51 4次下载
    毕业设计之<b class='flag-5'>时钟</b><b class='flag-5'>模块</b>设计<b class='flag-5'>DS1302</b>

    实验18:DS1302时钟

    实验18:DS1302时钟主程序
    发表于 01-18 09:08 28次下载
    实验18:<b class='flag-5'>DS1302</b><b class='flag-5'>时钟</b>