3分钟利用TurnipBit制作电子时钟
2017-10-27 21:45
267 查看
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi
欢迎加入讨论群 64770604
TurnipBit(www.turnipbit.com)是一个面向青少年的开发板,其基于microbit开发板开发制作完成,青少年可以利用其自带的LED点阵、磁敏传感器、加速度传感器等进行快速的开发和学习。TurnipBit是micropython学习的一个很好的工具,直接利用其本身进行的实验及开发教程当前已经有很多了(docs.turnipbit.com),这里我得用该开发板加DS3231快速实现一个电子时钟。
2、TurnipBit扩展板1块
3、DS3231模块1块
4、杜邦线4根
5、外置电池盒及电池
2、将DS3231与扩展板进行连接,连接引脚如下:
以上代码保存为settime.py,然后打开www.turnipbit.com,点击“开始编程”,将以上代码复制到浏览器的编辑框中,如下图:
点击“下载hex”,然后算成一个hex文件,将TurnipBit连接电脑后,会出现一个“TURNIPBIT”文件夹,然后将hex文件入该文件夹,TurnipBit会自动完成硬件的烧写过程。
这时会发现,TurnipBit已经开始显示你设定的时间了。
视频效果:http://v.youku.com/v_show/id_XMzExNTM1MTI0OA==.html?spm=a2h3j.8428770.3416059.1#paction
欢迎加入讨论群 64770604
TurnipBit(www.turnipbit.com)是一个面向青少年的开发板,其基于microbit开发板开发制作完成,青少年可以利用其自带的LED点阵、磁敏传感器、加速度传感器等进行快速的开发和学习。TurnipBit是micropython学习的一个很好的工具,直接利用其本身进行的实验及开发教程当前已经有很多了(docs.turnipbit.com),这里我得用该开发板加DS3231快速实现一个电子时钟。
一、材料准备
1、TurnipBit开发板1块2、TurnipBit扩展板1块
3、DS3231模块1块
4、杜邦线4根
5、外置电池盒及电池
二、线路连接
1、将TurnipBit插入TurnipBit扩展板,扩展板上已经将TurnipBit的引脚全面引出来了,扩展板的具体分布如下图:2、将DS3231与扩展板进行连接,连接引脚如下:
DS3231 | TurnipBit扩展板 |
VCC | 3V3 |
GND | GND |
SCL | SCL |
SDA | SDA |
三、程序设计
考虑到相对简单,本实验中未做时间调整的设计,因此采用了两个程序的方法,第一个程序用来设定时间,因为DS3231模块带有氧化银电池,所以设定时间后,就算是TurnipBit断电,DS3231依然可以工作。第二程序用来完成时间的读取与显示。1、定义DS3231类
该类用来完成DS3231的基本操作,包括日期、时间的设定及读取,代码如下: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
2、设定时钟程序
设计时钟程序,先利用1里的代码定义DS3231类,然后调用,具体代码为: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,27])#设定年,月,日
ds.TIME([19,10,00])#设定时,分,秒
while True:
Date=ds.DATE()
Time=ds.TIME()
Time_s='20'
for i in Date:
Time_s+=str(i)+'-'
Time_s=Time_s[:-1]+' '
for i in Time:
Time_s+=str(i)+':'
display.scroll(Time_s[:-1])
#print(Time)
#print(ds.TEMP())
sleep(1000)
以上代码保存为settime.py,然后打开www.turnipbit.com,点击“开始编程”,将以上代码复制到浏览器的编辑框中,如下图:
点击“下载hex”,然后算成一个hex文件,将TurnipBit连接电脑后,会出现一个“TURNIPBIT”文件夹,然后将hex文件入该文件夹,TurnipBit会自动完成硬件的烧写过程。
这时会发现,TurnipBit已经开始显示你设定的时间了。
3、时钟运行程序
设定好时间后,我们只需要烧写时钟运行程序,这样每次通电后,就能显示正常时间了。如果有一天发现你的时间不准了,就说明你DS3231上的氧化银电池需要更换了,更换后再重新进行一次settime.py,然后再运行时钟运行程序就可以了,具体代码如下: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()
while True:
Date=ds.DATE()
Time=ds.TIME()
Time_s=''
for i in Date:
Time_s+=str(i)+'-'
Time_s=Time_s[:-1]+' '
for i in Time:
Time_s+=str(i)+':'
display.scroll(Time_s[:-1])
#print(Time)
#print(ds.TEMP())
sleep(1000)
四、完成效果
连接外置电池盒及电池,这样一个电子时钟就完成了。视频效果:http://v.youku.com/v_show/id_XMzExNTM1MTI0OA==.html?spm=a2h3j.8428770.3416059.1#paction
相关文章推荐
- Micropython TurnipBit 电子时钟 青少年编程入门
- 电子时钟的制作
- 解析如何利用iframe标签以及js制作时钟
- 利用PowerPoint制作电子相册 推荐
- java 制作电子时钟
- 利用JavaScript的AngularJS库制作电子名片的方法
- [TPYBoard - Micropython之会python就能做硬件 3] 制作电子时钟
- [原创]利用php和javascript实现服务器时间电子时钟
- 利用 BitmapShader 制作自带边框圆形头像
- date制作电子时钟
- 利用js制作简单的时钟
- date制作电子时钟(二)
- 利用Android中BitmapShader制作自带边框的圆形头像
- 利用Flash+XML制作可后台管理的电子地图
- 利用多线程实现电子时钟
- 利用canvas制作一个时钟
- 利用html5制作一个时钟动画
- 利用WPS文字制作电子印章
- 利用Flash制作一个可以自由拨动的时钟模具
- 使用Arduino和DS12C887芯片制作电子时钟(附Arduino源代码)