您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python怎么實(shí)現(xiàn)DIY電子時(shí)鐘的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Python怎么實(shí)現(xiàn)DIY電子時(shí)鐘文章都會(huì)有所收獲,下面我們一起來看看吧。
一、 實(shí)驗(yàn)?zāi)康模?br/> ?學(xué)習(xí)在PC機(jī)系統(tǒng)中擴(kuò)展簡(jiǎn)單I/O 接口的方法
?學(xué)習(xí)TurnipBit拼插編程
?學(xué)習(xí)TurnipBit擴(kuò)展板與DS3231時(shí)鐘模塊連接接線方式
?學(xué)習(xí)時(shí)鐘模塊的使用
二、所需原器件:
?TurnipBit一塊
?TurnipBit擴(kuò)展板一塊
?DS3231時(shí)鐘模塊一個(gè)
?杜邦線若干
?usb數(shù)據(jù)線一條
三、實(shí)驗(yàn)原理:
1. DS3231時(shí)鐘模塊原理
DS3231(圖11-12)是一個(gè)時(shí)鐘模塊,其實(shí)就是像一個(gè)電子時(shí)鐘,它自身帶有電池,當(dāng)設(shè)置好時(shí)間后,DS3231就會(huì)自動(dòng)走時(shí)。DS3231與開發(fā)板之間的通訊是通過I2C接口來完成的。I2C總線是由Philips公司開發(fā)的一種簡(jiǎn)單、雙向二線制同步串行總線。它只需要SDA(串行數(shù)據(jù)線)和SCL(串行時(shí)鐘線)兩根線即可在連接于總線上的器件之間傳送信息。SDA和SCL都是雙向I/O線,連接時(shí),只需要將DS3231上的SDA和SCL與TurnipBit擴(kuò)展板上的SDA和SCL相連即可。
四、接線方法:
TurnipBit擴(kuò)展板與發(fā)光二極管接口對(duì)應(yīng)如下表:
五、 源代碼:
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)
關(guān)于“Python怎么實(shí)現(xiàn)DIY電子時(shí)鐘”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Python怎么實(shí)現(xiàn)DIY電子時(shí)鐘”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。