Micropython TurnipBit 电子时钟 青少年编程入门

qn1521090455 2018-03-15 13:10:40 1581

电子时钟是一个很常用但是制作非常简单的小玩具了,对于Micropython初学者来说,制作一个电子时钟是非常简单又容易检验自己学习成果的实验了。TurnipBit相比于其他开发板,制作电子时钟就更加简单了,无需外接任何显示器,因为Turnipbit自带显示功能,只需将Turnipbit扩展板与时钟模块连接,编写相应的代码就OK了,那么接下来,就让我们一起学习下吧。
所需元器件:
TurnipBit一块
TurnipBit扩展板一块
DS3231时钟模块一个
杜邦线若干
usb数据线一条
实验原理:
DS3231时钟模块原理
DS3231(图11-12)是一个时钟模块,其实就是像一个电子时钟,它自身带有电池,当设置好时间后,DS3231就会自动走时。DS3231与开发板之间的通讯是通过I2C接口来完成的。I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要SDA(串行数据线)和SCL(串行时钟线)两根线即可在连接于总线上的器件之间传送信息。SDA和SCL都是双向I/O线,连接时,只需要将DS3231上的SDA和SCL与TurnipBit扩展板上的SDA和SCL相连即可。
接线方法:
Turnipbit扩展板与发光二极管接口对应如下表:

TurnipBit扩展板 DS3231时钟模块
3V3 - VCC
GND-GND
SCL-SCL
SDA-SDA
关于代码,这里我们就不用拼插编程了,代码太长拼插起来就有点费时间了
源代码:
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.dec2he&#120;(sec), DS3231_REG_SEC)

def min(self, min=''):
    if min == '':
        return self.getREG_DEC(DS3231_REG_MIN)
    else:
        self.setREG(self.dec2he&#120;(min), DS3231_REG_MIN)

def hour(self, hour=''):
    if hour=='':
        return self.getREG_DEC(DS3231_REG_HOUR)
    else:
        self.setREG(self.dec2he&#120;(hour), DS3231_REG_HOUR)

def day(self, day=''):
    if day=='':
        return self.getREG_DEC(DS3231_REG_DAY)
    else:
        self.setREG(self.dec2he&#120;(day), DS3231_REG_DAY)

def month(self, month=''):
    if month=='':
        return self.getREG_DEC(DS3231_REG_MONTH)
    else:
        self.setREG(self.dec2he&#120;(month), DS3231_REG_MONTH)

def year(self, year=''):
    if year=='':
        return self.getREG_DEC(DS3231_REG_YEAR)
    else:
        self.setREG(self.dec2he&#120;(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)
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
关于作者
qn1521090455

qn1521090455

暂无个性签名~

原创1
阅读1.6k
收藏0
点赞0
评论0
打赏用户 0
我要创作
分享技术经验,可获取创作收益
分类专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
qn1521090455
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区