【ESP32-C3 lua】I2C 与 PCF8563实时时钟日历芯片

学习目标:【ESP32-C3 lua】I2C 与 PCF8563实时时钟日历芯片

例如:

  • 使用lua语言,ESP32-C3与PCF8563实现I2C通信

学习内容:

1.搭建硬件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  1. 掌握 lua I2C基本语法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "i2c  PCF8563 demo"
VERSION = "1.0.0"

-- sys库是标配
sys = require("sys")

local softI2C = i2c.createSoft(0, 1, 110)
local i2caddr = 0xA2
local i2caddr1 =bit.arshift(0XA2,1)   --寄存器左移一位

log.info("i2c initial1",i2caddr1) --观察一下地址


sys.taskInit(function()
    log.info("i2c initial",softI2C)
    --[[设置一次初始时间和日期
    i2c.writeReg(softI2C, 0x51, 0x02, string.char(0x02))  --秒
    sys.wait(10)
    i2c.writeReg(softI2C, 0x51, 0x03, string.char(0x00))  --分
    sys.wait(10)
    i2c.writeReg(softI2C, 0x51, 0x04,string.char(0x14))   --时
    sys.wait(10)
    i2c.writeReg(softI2C, 0x51, 0x05,string.char(0x20))  --日期
    sys.wait(10)
    i2c.writeReg(softI2C, 0x51, 0x06,string.char(0x02))  --星期
    sys.wait(10)
    i2c.writeReg(softI2C, 0x51, 0x07,string.char(0x02))  --月
    sys.wait(10)
    i2c.writeReg(softI2C, 0x51, 0x08,string.char(0x24))  --年
    sys.wait(10)
    --]]
    while true do
            --i2c.send(softI2C, 0xD6, 0x02) --写A5
        
            local data = i2c.recv(softI2C, 0x51, 1)  --读1字节 --无意义

            i2c.send(softI2C, 0x51,{0x02}) --写2字节A5 11  --地址51 读地址02
            local data1 = i2c.recv(softI2C, 0x51, 1)  --读1字节  读1个字节,输出时间   秒 分 时

            i2c.send(softI2C, 0x51,{0x03}) --写2字节A5 11  --地址51 读地址03
            local data2 = i2c.recv(softI2C, 0x51, 1)  --读1字节  读1个字节,输出时间   秒 分 时

            i2c.send(softI2C, 0x51,{0x04}) --写2字节A5 11  --地址51 读地址04
            local data3 = i2c.recv(softI2C, 0x51, 1)  --读1字节  读1个字节,输出时间   秒 分 时



            i2c.send(softI2C, 0x51,{0x05}) --写2字节A5 11
            local data4 = i2c.recv(softI2C, 0x51, 4)  --读1字节 --读 日期 星期 月 年

            i2c.send(softI2C, 0x51,{0x09}) --写2字节A5 11
            local data5 = i2c.recv(softI2C, 0x51, 4)  --读1字节  分钟报警 小时报警 日报警 星期报警 当输出为80的时候最高为置1,表示不启用(看文档第4页)


        sys.wait(950)
        n1 =  string.toHex(data1) 
        n2 =  string.toHex(data2) 
        n3 =  string.toHex(data3) 


        log.info("i2c initial", n3, n2,n1 )
    
    end

end)

-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

学习产出:

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

时光荏苒2024

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值