zoukankan      html  css  js  c++  java
  • Micropython turnipbit带小夜灯的电子时钟

    实验目的:

    ²  LED是什么² 
    光敏电阻是什么²  
    DS3231模块² 
    电阻阻值的色环计算² 
    时钟模块DS3231()库的应用
     所需器材:²  
    TurnipBit开发板 1块² 
    下载数据线 1条² 
    废旧纸盒 1个²  
    导线若干² 
    DS3231时钟模块 1个² 
    光敏电阻 1个² 
    LED 灯 1个²  
    1K电阻 1个² 
    接入互联网的电脑 1台(推荐使用Google Chome或者Firefox浏览器
    TurnipBit扩展板TurnipBit扩展板是用来将TurnipBit的引脚和主要功能脚引出的一个开发板。利用扩展板,我们可以完成一些更加复杂的工作和任务。TurnipBit扩展板包含以下几个区域:1、金手指插槽,主要用于与TurnipBit开发板进行连接,只需进行正常的插拔即可。2、电源区,包括GND、3.3V和5V区域,提供电源供电。3、USB接口,负责电源接入。4、GPIO口,主要包括P0到P20的GPIO接口、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已经开始工作了。
  • 相关阅读:
    菜鸟学习Spring Web MVC之二
    菜鸟学习Spring Web MVC之一
    Internet Explorer 6 的15个讨厌的bug和简单的解决方法
    前端遇到的跨域问题及解决方案二
    前端遇到的跨域问题及解决方案一
    第六 添加文字
    第五章、使用预绘制图片
    第四、渐变和图案
    第三 画曲线
    第二、画线和路径
  • 原文地址:https://www.cnblogs.com/xxosu/p/9049948.html
Copyright © 2011-2022 走看看