【解析新特性】300W单路输出工业电源>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » MicroPython实战之TurnipBit开发板DIY电子时钟

共2条 1/1 1 跳转至

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

助工
2018-06-26 14:56:12    评分

   一、 实验目的:

    ?学习在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相连即可。


1.png

    四、接线方法:

    TurnipBit扩展板与发光二极管接口对应如下表:

2.png


    五、 源代码:


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)




管理员
2018-06-27 08:52:50    评分
2楼

谢谢楼主分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]