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


    电子时钟是一个很常用但是制作非常简单的小玩具了,对于Micropython初学者来说,制作一个电子时钟是非常简单又容易检验自己学习成果的实验了。TurnipBit相比于其他开发板,制作电子时钟就更加简单了,无需外接任何显示器,因为Turnipbit自带显示功能,只需将Turnipbit扩展板与时钟模块连接,编写相应的代码就OK了,那么接下来,就让我们一起学习下吧。                                                                                                                                                                                                                                                               
    所需元器件:
    TurnipBit一块
    TurnipBit扩展板一块
    DS3231时钟模块一个
    杜邦线若干
    usb数据线一条
    实验原理:
    DS3231时钟模块原理
    DS3231(图11-12)是一个时钟模块,其实就是像一个电子时钟,它自身带有电池,当设置好时间后,DS3231就会自动走时。DS3231与开发板之间的通讯是通过I2C接口来完成的。I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要SDA(串行数据线)和SCL(串行时钟线)两根线即可在连接于总线上的器件之间传送信息。SDASCL都是双向I/O线,连接时,只需要将DS3231上的SDASCLTurnipBit扩展板上的SDASCL相连即可。
     
     
    接线方法:
    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)
     
     
     
     
     
  • 相关阅读:
    程序安装打包
    sql 2005 分页存储过程
    带线的无限级下拉树列表
    MapXtreme 2005 学习心得 概述(一)
    存储过程中用到的年,月,周的函数
    委托/事件/线程传参简单理解
    清除svn/vss小工具
    查看数据库连接数
    MapXtreme 2005 学习心得 使用WebTool工具(七)
    C#日期格式化
  • 原文地址:https://www.cnblogs.com/xxosu/p/8572040.html
Copyright © 2020-2023  润新知