zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    第五周
    第三章 程序的机器级表示
    第二章 信息的表示和处理
    嵌入式Linux应用开发——Linux下的C编程基础
    Linux基础入门(20135207 王国伊)
    Java实验报告(实验四)
    linux系统之pam模块
    linux 从入门到跑路-时间,日期问题
    linux 从入门到跑路-Shell和部分命令
    linux 从入门到跑路-挂载,命令的执行顺序
  • 原文地址:https://www.cnblogs.com/xxosu/p/9229126.html
Copyright © 2011-2022 走看看