MicroPython实战之TurnipBit开发板DIY电子时钟

Posted 小小su

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MicroPython实战之TurnipBit开发板DIY电子时钟相关的知识,希望对你有一定的参考价值。

一、 实验目的:
?学习在PC机系统中扩展简单I/O 接口的方法
?学习TurnipBit拼插编程
?学习TurnipBit扩展板与DS3231时钟模块连接接线方式
?学习时钟模块的使用

二、所需原器件:
?TurnipBit一块
?TurnipBit扩展板一块
?DS3231时钟模块一个
?杜邦线若干
?usb数据线一条

三、实验原理:
1. DS3231时钟模块原理
DS3231(图11-12)是一个时钟模块,其实就是像一个电子时钟,它自身带有电池,当设置好时间后,DS3231就会自动走时。DS3231与开发板之间的通讯是通过I2C接口来完成的。I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要SDA(串行数据线)和SCL(串行时钟线)两根线即可在连接于总线上的器件之间传送信息。SDA和SCL都是双向I/O线,连接时,只需要将DS3231上的SDA和SCL与TurnipBit扩展板上的SDA和SCL相连即可。


四、接线方法:
TurnipBit扩展板与发光二极管接口对应如下表:


五、 源代码:

from microbit import *

DS3231_ADDR       = 0x68
DS3231_REG_SEC    = b\'\\x00\'
DS3231_REG_MIN    = b\'\\x01\'
DS3231_REG_HOUR   = b\'\\x02\'
DS3231_REG_DAY    = b\'\\x04\'
DS3231_REG_MONTH  = b\'\\x05\'
DS3231_REG_YEAR   = b\'\\x06\'
DS3231_REG_TEMP   = b\'\\x11\'
class DS3231(object):
    
    def __init__(self):
        pass
    def DATE(self, dat=[]):
        if dat==[]:
            t = []
            t.append(self.year())
            t.append(self.month())
            t.append(self.day())
            return t
        else:
            self.year(dat[0])
            self.month(dat[1])
            self.day(dat[2])
            
    def TIME(self, dat=[]):
        if dat==[]:
            t = []
            t.append(self.hour())
            t.append(self.min())
            t.append(self.sec())
            return t
        else:
            self.hour(dat[0])
            self.min(dat[1])
            self.sec(dat[2])
    def DateTime(self, dat=[]):
        if dat==[]:
            return self.DATE() + self.TIME()
        else:
            self.year(dat[0])
            self.month(dat[1])
            self.day(dat[2])
            self.hour(dat[3])
            self.min(dat[4])
            self.sec(dat[5])

    def dec2hex(self, dat):
        return (int(dat/10)<<4) + (dat%10)

    def setREG(self, dat,reg):
        buf = bytearray(2)
        buf[0] = reg[0]
        buf[1] = dat
        i2c.write(DS3231_ADDR,buf, repeat=False)
        
    def getREG_DEC(self,reg):
        i2c.write(DS3231_ADDR,reg)
        t = i2c.read(DS3231_ADDR,1)[0]
        #print("--===",t,"----------")
        return (t>>4)*10 + (t%16)

    def sec(self, sec=\'\'):
        if sec == \'\':
            return self.getREG_DEC(DS3231_REG_SEC)
        else:
            self.setREG(self.dec2hex(sec), DS3231_REG_SEC)

    def min(self, min=\'\'):
        if min == \'\':
            return self.getREG_DEC(DS3231_REG_MIN)
        else:
            self.setREG(self.dec2hex(min), DS3231_REG_MIN)

    def hour(self, hour=\'\'):
        if hour==\'\':
            return self.getREG_DEC(DS3231_REG_HOUR)
        else:
            self.setREG(self.dec2hex(hour), DS3231_REG_HOUR)

    def day(self, day=\'\'):
        if day==\'\':
            return self.getREG_DEC(DS3231_REG_DAY)
        else:
            self.setREG(self.dec2hex(day), DS3231_REG_DAY)

    def month(self, month=\'\'):
        if month==\'\':
            return self.getREG_DEC(DS3231_REG_MONTH)
        else:
            self.setREG(self.dec2hex(month), DS3231_REG_MONTH)

    def year(self, year=\'\'):
        if year==\'\':
            return self.getREG_DEC(DS3231_REG_YEAR)
        else:
            self.setREG(self.dec2hex(year), DS3231_REG_YEAR)

    def TEMP(self):
        i2c.write(DS3231_ADDR,DS3231_REG_TEMP, repeat=False)
        t1 = i2c.read(DS3231_ADDR,1, repeat=False)[0]
        i2c.write(DS3231_ADDR,b\'\\x12\', repeat=False)
        t2 = i2c.read(DS3231_ADDR,1, repeat=False)[0]
        if t1>0x7F:
            return t1 - t2/256 -256
        else:
            return t1 + t2/256
ds=DS3231()
ds.DATE([17,10,24])
ds.TIME([10,03,00])
while True:
    Time=ds.TIME()
    Time_s=\'\'
    for i in Time:
        Time_s+=str(i)+\':\'
    display.scroll(Time_s[:-1]+"-")
    
    #print(Time)
    #print(ds.TEMP())
    sleep(1000)

 

以上是关于MicroPython实战之TurnipBit开发板DIY电子时钟的主要内容,如果未能解决你的问题,请参考以下文章

Micropython Turnipbit自动窗帘模拟系统

TurnipBit开发板DIY呼吸的吃豆人教程实例

TurnipBit之DIY无线遥控智能小车

TurnipBit:和孩子一起动手DIY“滚动”的生日礼物

3分钟利用TurnipBit制作电子时钟

MicroPython之TPYBoard v102开发板控制OLED显示中文