Micropython TurnipBit 電子時鐘 青少年編程入門

電子時鐘是一個很常用但是製作非常簡單的小玩具了,對於Micropython初學者來說,製作一個電子時鐘是非常簡單又容易檢驗自己學習成果的實驗了。TurnipBit相比於其他開發板,製作電子時鐘就更加簡單了,無需外接任何顯示器,因爲Turnipbit自帶顯示功能,只需將Turnipbit擴展板與時鐘模塊連接,編寫相應的代碼就OK了,那麼接下來,就讓我們一起學習下吧。
所需元器件:
TurnipBit一塊
TurnipBit擴展板一塊
DS3231時鐘模塊一個
杜邦線若干
usb數據線一條
實驗原理:
DS3231時鐘模塊原理
DS3231(圖11-12)是一個時鐘模塊,其實就是像一個電子時鐘,它自身帶有電池,當設置好時間後,DS3231就會自動走時。DS3231與開發板之間的通訊是通過I2C接口來完成的。I2C總線是由Philips公司開發的一種簡單、雙向二線制同步串行總線。它只需要SDA(串行數據線)和SCL(串行時鐘線)兩根線即可在連接於總線上的器件之間傳送信息。SDA和SCL都是雙向I/O線,連接時,只需要將DS3231上的SDA和SCL與TurnipBit擴展板上的SDA和SCL相連即可。
接線方法:
Turnipbit擴展板與發光二極管接口對應如下表:

TurnipBit擴展板 - DS3231時鐘模塊
3V3 - VCC
GND - GND
SCL- SCL
SDA-SDA
關於代碼,這裏我們就不用拼插編程了,代碼太長拼插起來就有點費時間了
源代碼:
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)

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)

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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章