博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Micropython TurnipBit 电子时钟 青少年编程入门
阅读量:5769 次
发布时间:2019-06-18

本文共 3096 字,大约阅读时间需要 10 分钟。

电子时钟是一个很常用但是制作非常简单的小玩具了,对于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.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)

 

 
 
 
 
 

转载于:https://www.cnblogs.com/xxosu/p/8572040.html

你可能感兴趣的文章
分镜头脚本
查看>>
链表基本操作的实现(转)
查看>>
邮件发送1
查看>>
[转] libcurl异步方式使用总结(附流程图)
查看>>
编译安装LNMP
查看>>
[转]基于display:table的CSS布局
查看>>
企业级 SpringBoot 教程 (二)Spring Boot配置文件详解
查看>>
crm 02--->讲师页面及逻辑
查看>>
AS3.0 Bitmap类实现图片3D旋转效果
查看>>
Eigen ,MKL和 matlab 矩阵乘法速度比较
查看>>
带三角的面包屑导航栏(新增递增数字)
查看>>
Web应用程序安全与风险
查看>>
codeforces 984 A. Game
查看>>
CSS居中
查看>>
One Person Game(概率+数学)
查看>>
CodeForces 258B Little Elephant and Elections :于1-m中找出七个数,使六个数里面的4和7个数比第七个数严格小:数位dp+dfs...
查看>>
MAP
查看>>
手把手教你测——上网快鸟
查看>>
Best Time to Buy and Sell Stock III leetcode java
查看>>
APP icon 自动来做,photoshop 做圆角图片
查看>>