|
一、 實(shí)驗(yàn)?zāi)康模?br />
?學(xué)習(xí)在PC機(jī)系統(tǒng)中擴(kuò)展簡單I/O 接口的方法
?學(xué)習(xí)TurnipBit拼插編程
?學(xué)習(xí)TurnipBit擴(kuò)展板與DS3231時鐘模塊連接接線方式
?學(xué)習(xí)時鐘模塊的使用
二、所需原器件:
?TurnipBit一塊
?TurnipBit擴(kuò)展板一塊
?DS3231時鐘模塊一個
?杜邦線若干
?usb數(shù)據(jù)線一條
三、實(shí)驗(yàn)原理:
1. DS3231時鐘模塊原理
DS3231(圖11-12)是一個時鐘模塊,其實(shí)就是像一個電子時鐘,它自身帶有電池,當(dāng)設(shè)置好時間后,DS3231就會自動走時。DS3231與開發(fā)板之間的通訊是通過I2C接口來完成的。I2C總線是由Philips公司開發(fā)的一種簡單、雙向二線制同步串行總線。它只需要SDA(串行數(shù)據(jù)線)和SCL(串行時鐘線)兩根線即可在連接于總線上的器件之間傳送信息。SDA和SCL都是雙向I/O線,連接時,只需要將DS3231上的SDA和SCL與TurnipBit擴(kuò)展板上的SDA和SCL相連即可。
1.png (132.24 KB, 下載次數(shù): 41)
下載附件
2018-6-26 11:18 上傳
四、接線方法:
TurnipBit擴(kuò)展板與發(fā)光二極管接口對應(yīng)如下表:
2.png (8.13 KB, 下載次數(shù): 51)
下載附件
2018-6-26 11:18 上傳
五、 源代碼:
- 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)
復(fù)制代碼
|
|