物联网开发笔记(99)- Micropython ESP32 C3开发之DS1302时钟模块并用st7789屏幕显示时间

131 篇文章 237 订阅
订阅专栏
53 篇文章 32 订阅
订阅专栏

一、目的

        这一节我们学习如何使用合宙的ESP32 C3开发板开发DS1302T时钟模块(模块带电池),然后通过1.3寸彩色TFT显示屏模块(分辨率240*240,SPI接口,ST7789驱动芯片)来显示。

二、环境

        ESP32 C3(MicroPython v1.19.1 on 2022-06-18) + Thonny(V4.0.1) + 1.3寸 ST7789 显示屏模块 +DS1302时钟模块 + 几根杜邦线 + Win10 商业版

st7789屏幕接线方法,st7789屏幕驱动和字体请参考下文:
物联网开发笔记(89)- 使用Micropython开发ESP32开发板之合宙ESP32 C3开发板通过串口SPI控制st7789 TFT液晶屏1.3寸_魔都飘雪的博客-CSDN博客使用Micropython开发ESP32开发板之合宙ESP32 C3开发板通过串口SPI控制st7789 TFT 1.3寸液晶屏https://blog.csdn.net/zhusongziye/article/details/129347036?spm=1001.2014.3001.5501

DS1302T时钟模块接线方法:

三、DS1302T时钟模块驱动

from machine import Pin

DS1302_REG_SECOND = (0x80)
DS1302_REG_MINUTE = (0x82)
DS1302_REG_HOUR   = (0x84)
DS1302_REG_DAY    = (0x86)
DS1302_REG_MONTH  = (0x88)
DS1302_REG_WEEKDAY= (0x8A)
DS1302_REG_YEAR   = (0x8C)
DS1302_REG_WP     = (0x8E)
DS1302_REG_CTRL   = (0x90)
DS1302_REG_RAM    = (0xC0)

class DS1302:
    def __init__(self, clk, dio, cs):
        self.clk = clk
        self.dio = dio
        self.cs = cs
        self.clk.init(Pin.OUT)
        self.cs.init(Pin.OUT)

    def _dec2hex(self, dat):
        return (dat//10) * 16 + (dat % 10)

    def _hex2dec(self, dat):
        return (dat//16) * 10 + (dat % 16)

    def _write_byte(self, dat):
        self.dio.init(Pin.OUT)
        for i in range(8):
            self.dio.value((dat >> i) & 1)
            self.clk.value(1)
            self.clk.value(0)

    def _read_byte(self):
        d = 0
        self.dio.init(Pin.IN)
        for i in range(8):
            d = d | (self.dio.value() << i)
            self.clk.value(1)
            self.clk.value(0)
        return d

    def _get_reg(self, reg):
        self.cs.value(1)
        self._write_byte(reg)
        t = self._read_byte()
        self.cs.value(0)
        return t

    def _set_reg(self, reg, dat):
        self.cs.value(1)
        self._write_byte(reg)
        self._write_byte(dat)
        self.cs.value(0)

    def _wr(self, reg, dat):
        self._set_reg(DS1302_REG_WP, 0)
        self._set_reg(reg, dat)
        self._set_reg(DS1302_REG_WP, 0x80)
    #开启
    def start(self):
        t = self._get_reg(DS1302_REG_SECOND + 1)
        self._wr(DS1302_REG_SECOND, t & 0x7f)
    #关闭
    def stop(self):
        t = self._get_reg(DS1302_REG_SECOND + 1)
        self._wr(DS1302_REG_SECOND, t | 0x80)
    #秒
    def second(self, second=None):
        if second == None:
            return self._hex2dec(self._get_reg(DS1302_REG_SECOND+1)) % 60
        else:
            self._wr(DS1302_REG_SECOND, self._dec2hex(second % 60))
    #分
    def minute(self, minute=None):
        if minute == None:
            return self._hex2dec(self._get_reg(DS1302_REG_MINUTE+1))
        else:
            self._wr(DS1302_REG_MINUTE, self._dec2hex(minute % 60))
    #时
    def hour(self, hour=None):
        if hour == None:
            return self._hex2dec(self._get_reg(DS1302_REG_HOUR+1))
        else:
            self._wr(DS1302_REG_HOUR, self._dec2hex(hour % 24))
    #工作日
    def weekday(self, weekday=None):
        if weekday == None:
            return self._hex2dec(self._get_reg(DS1302_REG_WEEKDAY+1))
        else:
            self._wr(DS1302_REG_WEEKDAY, self._dec2hex(weekday % 8))
    #天
    def day(self, day=None):
        if day == None:
            return self._hex2dec(self._get_reg(DS1302_REG_DAY+1))
        else:
            self._wr(DS1302_REG_DAY, self._dec2hex(day % 32))
    #月
    def month(self, month=None):
        if month == None:
            return self._hex2dec(self._get_reg(DS1302_REG_MONTH+1))
        else:
            self._wr(DS1302_REG_MONTH, self._dec2hex(month % 13))
    #年
    def year(self, year=None):
        if year == None:
            return self._hex2dec(self._get_reg(DS1302_REG_YEAR+1)) + 2000
        else:
            self._wr(DS1302_REG_YEAR, self._dec2hex(year % 100))
            
    #获取或设置时间
    def date_time(self, dat=None):
        if dat == None:
            return [self.year(), self.month(), self.day(), self.weekday(), self.hour(), self.minute(), self.second()]
        else:
            self.year(dat[0])
            self.month(dat[1])
            self.day(dat[2])
            self.weekday(dat[3])
            self.hour(dat[4])
            self.minute(dat[5])
            self.second(dat[6])
            
    #返回设置结果
    def ram(self, reg, dat=None):
        if dat == None:
            return self._get_reg(DS1302_REG_RAM + 1 + (reg % 31)*2)
        else:
            self._wr(DS1302_REG_RAM + (reg % 31)*2, dat)

四、示例代码1

        DS1302_clock.py

from machine import Pin,SPI
from st7789py import ST7789,color565
from ds1302 import DS1302
import vga2_8x16 as font8x16
import vga2_bold_16x32 as font16x32
import time

# 创建SPI对象
spi = SPI(1,baudrate = 60_000_000,polarity = 1,sck = Pin(2),mosi = Pin(3),miso = None)
# 创建屏幕对象
tft = ST7789(spi,240,240,reset=Pin(10,Pin.OUT), dc=Pin(6,Pin.OUT),cs = None,backlight=Pin(8),rotation=180) 
# 创建DS1302时钟对象
ds  = DS1302(clk = Pin(12), dio = Pin(18), cs = Pin(19))

# 定义时钟函数
def Time():
    # 定义一个星期列表
    week = ['Mon','Tues','Wednes','Thurs','Fri','Satur','Sun']
    #年,月,日,星期,时,分,秒
    if ds.date_time()[0] != 2023:
        # 设置DS1302时间
        ds.date_time((2023,3,24,4,21,28,20))
        tft.text(font8x16,"Initialization time    ",20,0,color565(255,0,0),color565(0,0,0))
        time.sleep(1)
        
    tft.text(font8x16,"Initialization completed",20,0,color565(0,255,0),color565(0,0,0))
    
     # year, month, mday, weekday, hour, minute, second
    date = ds.date_time()
    
    year    = date[0]
    month   = date[1]
    mday    = date[2]
    weekday = date[3]
    hour    = date[4]
    minute  = date[5]
    second  = date[6]
    
    tft.text(font8x16,"%d-%.2d-%.2d %.2d:%.2d:%.2d [%s]" % (year,month,mday,hour,minute,second,week[weekday]),14,60,color565(0,255,0),color565(0,0,0))
    tft.text(font16x32,"%.2d:%.2d:%.2d"%(hour,minute,second),50,108,color565(255,255,0),color565(0,0,0))
    
def main():
    while True:
        Time()
    
    
if __name__ == "__main__":
    main()

显示效果:

五、上电自动运行

        我们把代码写在main.py中,代码则可以上电后自动运行。

from DS1302_clock import Time

def main():
    while True:
        Time()
     
   
if __name__ == "__main__":
    main()

六、DS1302 实时时钟模块购买

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.6ea92e8dsqtsNJ&id=609527215102&_u=op01rch5634https://item.taobao.com/item.htm?spm=a1z09.2.0.0.6ea92e8dsqtsNJ&id=609527215102&_u=op01rch5634          

DS1302实时时钟模块

DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)RST 复位(2)I/O 数据线(3)SCLK串行时钟。时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信。DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW

DS1302主要性能指标:
★ 实时时钟具有能计算2100 年之前的秒、分、时、日、星期、月、年的能力,还有闰年调整的能力
★ 31 8 位暂存数据存储RAM
★ 串行 I/O 口方式使得管脚数量最少
★ 宽范围工作电压2.0 5.5V
★ 工作电流 2.0V 时,小于300nA
★ 读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式
★ 8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配
★ 简单 3 线接口
★ 与 TTL 兼容Vcc=5V
★ 可选工业级温度范围-40 +85
★ 双电源管用于主电源和备份电源供应
DS1302实时时钟模块参数如下:

1.PCB为单面板,尺寸:44mm*23mm*1.6mm

2.带4个定位孔,直径3.1mm

3.备用电池为正品天球CR2032,电压3V,电流260mAh,非可充电电池。理论数据保持时间大于10年!

4.晶振32.768KHz,日本原装进口晶振,匹配电容为6pF,尺寸2*6mm

5.DS1302为8脚直插国产大芯片,芯片下面有IC座,方便更换及插拔芯片

6.模块工作电压兼容3.3V/5V,可与5V及3.3V单片机连接

7.工作温度:0°---70°

接线方法(以提供的程序为例,可以接任意IO口,在程序中修改端口定义即可):

VCC→+5V/3.3V

GND→GND

CLK→P02

DAT→P01

RST→P00

注意事项:

1. VCC与GND千万不要接反,以免烧坏芯片

2. 51单片机P0口需要接上拉电阻,如果您的单片机没有接上拉电阻,可以将数据线接到其它端口

写文章

热门文章

  • if __name__ == '__main__' 如何正确理解? 215201
  • Jupyter notebook快速入门教程 106310
  • 软件测试面试必考题:自我介绍 96444
  • 笔记本电池冲不进电或不存电的修复方法 84941
  • 面试常见逻辑题小整理 75060

分类专栏

  • 物联网开发 131篇
  • ESP32 1篇
  • MicroPython 53篇
  • 嵌入式软件测试开发 4篇
  • 单元测试 1篇
  • 测试管理 2篇
  • 测试经理管理学 3篇
  • yaml 1篇
  • 敏捷开发 3篇
  • 软件评测师
  • 数据结构和算法 1篇
  • Python语言 181篇
  • Selenium自动化测试 32篇
  • Jmeter测试 8篇
  • Web开发 1篇
  • Appium自动化测试 3篇
  • 软件测试基础 46篇
  • 数据库 34篇
  • CI持续集成 5篇
  • Pycharm 13篇
  • Eclipse
  • APP测试 29篇
  • 软件测试面试宝典 81篇
  • 软件测试进阶 79篇
  • WEB测试 28篇
  • Python接口测试 4篇
  • 软件测试职业发展 22篇
  • 抓包工具 8篇
  • 软件测试其它实用小工具 32篇
  • 接口测试 30篇
  • C语言与visual studio2015 2篇
  • linux知识 16篇
  • 大数据和人工智能 16篇
  • 区块链 3篇
  • Python爬虫 131篇
  • AutoLine自动化测试平台 2篇
  • Java相关
  • Jython 1篇
  • 人工智能 5篇
  • OpenCV:模板匹配 1篇

最新评论

  • 物联网开发笔记(57)- 使用Micropython开发ESP32开发板之控制ESP32-CAM摄像头

    Bonjir: 写的真好啊表情包网上关于micropython挂载sd卡的文章很少,你这篇直接把esp32cam讲透了表情包 另外要说一点,那个oserror:camera init失败的问题,不用deinit,只需reset一下,然后在每次capture之后sleep个0.5s就可以了

  • 物联网开发笔记(79)- 使用Micropython开发ESP32开发板之UART串口编解码(Thonny+串口调试助手+Python IDE)

    jyh1103: 我发现几乎所有关于【thonny自带库模块安装到设备】都漏了一个大问题: 即 thonny自带库模块无法 import(如 ImportError: no module named 'websockets'。诸如 Lib 下的 asyncio、logging、site-packages 等也都不行)。 实际上,自己编的库.py 一般放到设备的 /common 下、下载的常用库(如 microdot-main)一般放到设备的 /lib 下。 回到主题,那 thonny自带库模块,怎么【挑出来(否则太多太大)】放到设备 ?

  • 物联网开发笔记(1)- 使用Wokwi仿真树莓派Pico点亮LED灯

    人生心電圖: 点击运行为什么没有反应

  • 制作一个App的完整流程是哪些

    2301_77221418: 作者讲的流程很清晰易懂表情包

  • 物联网开发笔记(29)- 使用Micropython开发ESP32开发板之控制240x240的oled屏幕显示动态图片GIF(ST7789芯片)

    ??462: 显示不是很流畅咋办

大家在看

  • CTF杂项——[UTCTF 2020]Basics(MISC)
  • 【开题报告】基于django+vue江服服饰陈列馆管理系统(论文+源码)计算机毕业设计 891
  • 小红书私域引流实战打粉手册(2)
  • springboot vue前后端分离:网上生鲜商城系统设计与实现计算机毕业设计作品和开题报告
  • 刷c语言练习题9(牛客网) 1672

最新文章

  • 物联网开发131 - Micropython ESP32 C3连接TB6600驱动42BYGH39步进电机
  • 物联网开发130 - Micropython ESP32 C3连接K型 MAX6675K型热电偶模块
  • 物联网开发129 - Micropython ESP32 C3连接BMP180压力传感器模块
2024年7篇
2023年57篇
2022年75篇
2021年22篇
2020年25篇
2019年113篇
2018年510篇
2017年132篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔都飘雪

您的1毛奖励是我创作的源源动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家贵州玻璃钢雕塑厂北海玻璃钢景观雕塑襄阳玻璃钢雕塑制作厂家新密玻璃钢雕塑厂六安卡通玻璃钢雕塑厂家黄山美陈商场北京人物玻璃钢雕塑安装广东玻璃钢雕塑摆件制造山东佛像玻璃钢雕塑定制浙江节庆商场美陈市场泰州五一商场美陈浙江玻璃钢蔬菜景观雕塑定做玻璃钢雕塑定制工厂新疆玻璃钢雕塑制作视频成品玻璃钢雕塑摆件哪里有武威抽象人物玻璃钢雕塑哪家好户外商场美陈销售企业校园玻璃钢雕塑现货四川玻璃钢仿铜雕塑定制全球玻璃钢雕塑发展玻璃钢雕塑梅花鹿制作教程视频3dmax 商场美陈教程茂名玻璃钢造型雕塑深圳玻璃钢雕塑厂怎么找温州玻璃钢雕塑摆件市场报价昭通玻璃钢雕塑制作玻璃钢半身人像雕塑工艺品成都汕头玻璃钢雕塑广东室外玻璃钢雕塑四川玻璃钢雕塑摆件费用香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化