2682|1

55

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

Micropython turnipbit带小夜灯的电子时钟 [复制链接]

实验目的:2  LED是什么2
光敏电阻是什么2  
DS3231模块2
电阻阻值的色环计算2
时钟模块DS3231()库的应用
所需器材:2
TurnipBit开发板 12
下载数据线 12
废旧纸盒 12  
导线若干2
DS3231时钟模块 12
光敏电阻 12
LED 12  
1K电阻 12
接入互联网的电脑 1台(推荐使用Google Chome或者Firefox浏览器
TurnipBit扩展板TurnipBit扩展板是用来将TurnipBit的引脚和主要功能脚引出的一个开发板。利用扩展板,我们可以完成一些更加复杂的工作和任务。TurnipBit扩展板包含以下几个区域:1、金手指插槽,主要用于与TurnipBit开发板进行连接,只需进行正常的插拔即可。2、电源区,包括GND3.3V5V区域,提供电源供电。3USB接口,负责电源接入。4GPIO口,主要包括P0P20GPIO接口、I2C接口、串口以及SPI接口。
  


意图DS3231的连接DS3231(图11-12)是一个时钟模块,其实就是像一个电子时钟,它自身带有电池,当设置好时间后,DS3231就会自动走时。DS3231与开发板之间的通讯是通过I2C接口来完成的。I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要SDA(串行数据线)和SCL(串行时钟线)两根线即可在连接于总线上的器件之间传送信息。SDA和SCL都是双向I/O线,连接时,只需要将DS3231上的SDA和SCL与TurnipBit扩展板上的SDA和SCL相连即可。表 11-1 DS3231连线表
DS3231
TurnipBit扩展板
GND
GND
VCC
3.3V
SCL
SCL
SDA
SDA


DS3231 线路设计本实验中需要进行连接的器件主要包括LED、光敏电阻、电阻、DS3231,具体连接方法:1、LED的长引脚(正极)与扩展板的P1相连,短引脚也就是负极与GND相连。我们只需要控制P1输出高电平还是低电平就可以控制LED是亮还是灭。当P1输出高电平时,LED两条引脚形成回路,LED亮起。当P1输出低电平时,LED熄灭。2、光敏电阻与1K阻串联后,一端连接正极,一端连接负责,中间引出一个引线,连接到扩展板的P2处。这里我们只需要读取P2引脚的模拟电压,就可以获取光线的变化。3、DS3231与扩展板的连接参见表11-1。具体连接实物图,如下:

连线图具体代码具体代码如下:
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='20'
for i in Date:
Time_s+=str(i)+'-'
Time_s=Time_s[:-1]+' '
for i in Time:
Time_s+=str(i)+':'

hour=Time[0]
sumnum=0

for j in range(0,5): #计算5次电压平均值

sumnum=sumnum+pin2.read_analog()
averagenum=sumnum/5
if averagenum < 54: #如果小于54说明光线弱
pin1.write_digital(1) #打开LED
else: #如果大于或者等于54,说明光线强
pin1.write_digital(0) #关闭LED

display.scroll(Time_s[:-1]) #显示时钟时间
if button_a.get_presses() > 0 or button_b.get_presses() > 0:
display.scroll(Time_s[:-1]) #如果按过按键,显示时钟时间
sleep(1000)

将以上代码,复制到TurnipBit编程区域,然后保存hex文件,并复制到TURNIPBIT磁盘后,会发现Turnipbit已经开始工作了。


最新回复

很好的知识,非常感谢分享,楼主辛苦了,谢谢。   详情 回复 发表于 2021-12-21 19:16
点赞 关注
 

回复
举报

21

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

很好的知识,非常感谢分享,楼主辛苦了,谢谢。

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表