from microbit import * DS1307_I2C_ADDRESS = (104) DS1307_REG_SECOND = (0) DS1307_REG_MINUTE = (1) DS1307_REG_HOUR = (2) DS1307_REG_WEEKDAY = (3) DS1307_REG_DAY = (4) DS1307_REG_MONTH = (5) DS1307_REG_YEAR = (6) DS1307_REG_CTRL = (7) DS1307_REG_RAM = (8) class DS1307(): # set reg def setReg(self, reg, dat): i2c.write(DS1307_I2C_ADDRESS, bytearray([reg, dat])) # get reg def getReg(self, reg): i2c.write(DS1307_I2C_ADDRESS, bytearray([reg])) t = i2c.read(DS1307_I2C_ADDRESS, 1) return t[0] def start(self): t = self.getReg(DS1307_REG_SECOND) self.setReg(DS1307_REG_SECOND, t&0x7F) def stop(self): t = self.getReg(DS1307_REG_SECOND) self.setReg(DS1307_REG_SECOND, t|0x80) def DecToHex(self, dat): return (dat//10) * 16 + (dat%10) def HexToDec(self, dat): return (dat//16) * 10 + (dat%16) def DateTime(self, DT=None): if DT == None: i2c.write(DS1307_I2C_ADDRESS, bytearray([0])) buf = i2c.read(DS1307_I2C_ADDRESS, 7) DT = [0] * 8 DT[0] = self.HexToDec(buf[6]) + 2000 DT[1] = self.HexToDec(buf[5]) DT[2] = self.HexToDec(buf[4]) DT[3] = self.HexToDec(buf[3]) DT[4] = self.HexToDec(buf[2]) DT[5] = self.HexToDec(buf[1]) DT[6] = self.HexToDec(buf[0]) DT[7] = 0 return DT else: buf = bytearray(8) buf[0] = 0 buf[1] = self.DecToHex(DT[6]%60) # second buf[2] = self.DecToHex(DT[5]%60) # minute buf[3] = self.DecToHex(DT[4]%24) # hour buf[4] = self.DecToHex(DT[3]%8) # week day buf[5] = self.DecToHex(DT[2]%32) # date buf[6] = self.DecToHex(DT[1]%13) # month buf[7] = self.DecToHex(DT[0]%100) # year i2c.write(DS1307_I2C_ADDRESS, buf) def Year(self, year = None): if year == None: return self.HexToDec(self.getReg(DS1307_REG_YEAR)) + 2000 else: self.setReg(DS1307_REG_YEAR, self.DecToHex(year%100)) def Month(self, month = None): if month == None: return self.HexToDec(self.getReg(DS1307_REG_MONTH)) else: self.setReg(DS1307_REG_MONTH, self.DecToHex(month%13)) def Day(self, day = None): if day == None: return self.HexToDec(self.getReg(DS1307_REG_DAY)) else: self.setReg(DS1307_REG_DAY, self.DecToHex(day%32)) def Weekday(self, weekday = None): if weekday == None: return self.HexToDec(self.getReg(DS1307_REG_WEEKDAY)) else: self.setReg(DS1307_REG_WEEKDAY, self.DecToHex(weekday%8)) def Hour(self, hour = None): if hour == None: return self.HexToDec(self.getReg(DS1307_REG_HOUR)) else: self.setReg(DS1307_REG_HOUR, self.DecToHex(hour%24)) def Minute(self, minute = None): if minute == None: return self.HexToDec(self.getReg(DS1307_REG_MINUTE)) else: self.setReg(DS1307_REG_MINUTE, self.DecToHex(minute%60)) def Second(self, second = None): if second == None: return self.HexToDec(self.getReg(DS1307_REG_SECOND)) else: self.setReg(DS1307_REG_SECOND, self.DecToHex(second%60)) def ram(self, reg, dat = None): if dat == None: return self.getReg(DS1307_REG_RAM + (reg%56)) else: self.setReg(DS1307_REG_RAM + (reg%56), dat) def get_time(self): return self.Hour() + self.Minute() + self.Second() def get_date(self): return self.Year() + self.Month() + self.Day() def set_time(self, hour, minute, second): self.Hour(hour) self.Minute(minute) self.Second(second) def set_date(self, year, month, day): self.Year(year) self.Month(month) self.Day(day) ds = DS1307()