• 欢迎大家分享资料!前往留言板评论即可!

实时时钟驱动

合宙 模组资料网 2年前 (2021-05-15) 316次浏览 0个评论 扫描二维码

— 模块功能:BM8563时钟功能测试
— @author zwp0273
— @module BM8563
— @license MIT
— @copyright zwp0273
— @release 2020.12.14

require “pins”
require “ntp”
module(,package.seeall)
local i2cslaveaddr = 0x51
local i2cid = 1
local setdata = {0x00,0x00,0x00,0x01,0x01,0x01,0x014,0x01,0x12,0x20–地址位   秒分时 日 星期 月 年     20年 12月 14日 1时 1分 1秒   星期1   00    14/12/20
function set_BM8563(tm)

if i2c.setup(i2cid, i2c.SLOW,i2cslaveaddr) ~= i2c.SLOW then

            log.info(“BM8563 设置失败”)        
else
–tm.year % 100, tm.month, tm.day, tm.hour, tm.min, tm.sec
            setdata[4] = bit.lshift(tm.sec / 10,4) + tm.sec % 10
            setdata[5] = bit.lshift(tm.min / 10,4) + tm.min % 10
            setdata[6] = bit.lshift(tm.hour / 10,4) + tm.hour % 10
            setdata[7] = bit.lshift(tm.day / 10,4) + tm.day % 10
            setdata[9] = bit.lshift(tm.month / 10,4) + tm.month % 10
            setdata[10] = bit.lshift(tm.year % 100 / 10,4) + tm.year % 100 % 10

            i2c.send(i2cid,i2cslaveaddr,setdata)
            log.info(“BM8563 设置成功”)
end
        i2c.close(i2cid)

end

local function read_BM8563()
—set_time()

if i2c.setup(i2cid, i2c.SLOW,i2cslaveaddr) ~= i2c.SLOW then

        log.info(“BM8563 打开失败”)        
else

        i2c.send(i2cid,i2cslaveaddr,{0x02})
local data = i2c.recv(i2cid, i2cslaveaddr, 7)  
local ,D1,D2,D3,D4,D5,D6,D7 = pack.unpack(data, 'b7')
        D1 = 10 * bit.rshift(D1,4) + bit.band(D1,0x0f— 秒
        D2 = 10 * bit.rshift(D2,4) + bit.band(D2,0x0f— 分
        D3 = 10 * bit.rshift(D3,4) + bit.band(D3,0x0f— 小时
        D4 = 10 * bit.rshift(D4,4) + bit.band(D4,0x0f— 日
        D5 = bit.band(D5,0x0f— 星期
        D6 = 10 * bit.rshift(D6,4) + bit.band(D6,0x0f— 月
        D7 = 10 * bit.rshift(D7,4) + bit.band(D7,0x0f— 年
        log.info(“BM8563 read”,D7,D6,D4,D3,D2,D1)
end
    i2c.close(i2cid)

end

local function BM8563_to_local()
—set_time()

if i2c.setup(i2cid, i2c.SLOW,i2cslaveaddr) ~= i2c.SLOW then

        log.info(“BM8563 打开失败”)        
else

        i2c.send(i2cid,i2cslaveaddr,{0x02})
local data = i2c.recv(i2cid, i2cslaveaddr, 7)  
local 
,D1,D2,D3,D4,D5,D6,D7 = pack.unpack(data, 'b7')
        D1 = 10  bit.rshift(D1,4) + bit.band(D1,0x0f— 秒
        D2 = 10 
 bit.rshift(D2,4) + bit.band(D2,0x0f— 分
        D3 = 10  bit.rshift(D3,4) + bit.band(D3,0x0f— 小时
        D4 = 10 
 bit.rshift(D4,4) + bit.band(D4,0x0f— 日
        D5 = bit.band(D5,0x0f— 星期
        D6 = 10  bit.rshift(D6,4) + bit.band(D6,0x0f— 月
        D7 = 10 
 bit.rshift(D7,4) + bit.band(D7,0x0f— 年
        misc.setClock({year=2000 + D7,month=D6,day=D4,hour=D3,min=D2,sec=D1})
        log.info(“BM8563 local”,D7,D6,D4,D3,D2,D1)
end
    i2c.close(i2cid)

end
local function time()
local rc = false

BM8563_to_local()
while true do

if ntp.isEnd()  true and rc  false then
local tm = misc.getClock()
set_BM8563(tm)
            rc = true
end
if rc then read_BM8563() end
        sys.wait(1000)
end

end

sys.taskInit(time)


转载请注明原文链接:实时时钟驱动
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址