查看: 2211|回复: 1

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

[复制链接]
  • TA的每日心情
    慵懒
    2018-1-6 09:01
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2018-3-15 09:50:11 | 显示全部楼层 |阅读模式
    分享到:
    电子时钟是一个很常用但是制作非常简单的小玩具了,对于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
    关于代码,这里我们就不用拼插编程了,代码太长拼插起来就有点费时间了
    源代码:
    1. from microbit import *

    2. DS3231_ADDR       = 0x68
    3. DS3231_REG_SEC    = b'\x00'
    4. DS3231_REG_MIN    = b'\x01'
    5. DS3231_REG_HOUR   = b'\x02'
    6. DS3231_REG_DAY    = b'\x04'
    7. DS3231_REG_MONTH  = b'\x05'
    8. DS3231_REG_YEAR   = b'\x06'
    9. DS3231_REG_TEMP   = b'\x11'
    10. class DS3231(object):
    11.    
    12.     def __init__(self):
    13.         pass
    14.     def DATE(self, dat=[]):
    15.         if dat==[]:
    16.             t = []
    17.             t.append(self.year())
    18.             t.append(self.month())
    19.             t.append(self.day())
    20.             return t
    21.         else:
    22.             self.year(dat[0])
    23.             self.month(dat[1])
    24.             self.day(dat[2])
    25.            
    26.     def TIME(self, dat=[]):
    27.         if dat==[]:
    28.             t = []
    29.             t.append(self.hour())
    30.             t.append(self.min())
    31.             t.append(self.sec())
    32.             return t
    33.         else:
    34.             self.hour(dat[0])
    35.             self.min(dat[1])
    36.             self.sec(dat[2])
    37.     def DateTime(self, dat=[]):
    38.         if dat==[]:
    39.             return self.DATE() + self.TIME()
    40.         else:
    41.             self.year(dat[0])
    42.             self.month(dat[1])
    43.             self.day(dat[2])
    44.             self.hour(dat[3])
    45.             self.min(dat[4])
    46.             self.sec(dat[5])

    47.     def dec2hex(self, dat):
    48.         return (int(dat/10)<<4) + (dat%10)

    49.     def setREG(self, dat,reg):
    50.         buf = bytearray(2)
    51.         buf[0] = reg[0]
    52.         buf[1] = dat
    53.         i2c.write(DS3231_ADDR,buf, repeat=False)
    54.       
    55.     def getREG_DEC(self,reg):
    56.         i2c.write(DS3231_ADDR,reg)
    57.         t = i2c.read(DS3231_ADDR,1)[0]
    58.         #print("--===",t,"----------")
    59.         return (t>>4)*10 + (t%16)

    60.     def sec(self, sec=''):
    61.         if sec == '':
    62.             return self.getREG_DEC(DS3231_REG_SEC)
    63.         else:
    64.             self.setREG(self.dec2hex(sec), DS3231_REG_SEC)

    65.     def min(self, min=''):
    66.         if min == '':
    67.             return self.getREG_DEC(DS3231_REG_MIN)
    68.         else:
    69.             self.setREG(self.dec2hex(min), DS3231_REG_MIN)

    70.     def hour(self, hour=''):
    71.         if hour=='':
    72.             return self.getREG_DEC(DS3231_REG_HOUR)
    73.         else:
    74.             self.setREG(self.dec2hex(hour), DS3231_REG_HOUR)

    75.     def day(self, day=''):
    76.         if day=='':
    77.             return self.getREG_DEC(DS3231_REG_DAY)
    78.         else:
    79.             self.setREG(self.dec2hex(day), DS3231_REG_DAY)

    80.     def month(self, month=''):
    81.         if month=='':
    82.             return self.getREG_DEC(DS3231_REG_MONTH)
    83.         else:
    84.             self.setREG(self.dec2hex(month), DS3231_REG_MONTH)

    85.     def year(self, year=''):
    86.         if year=='':
    87.             return self.getREG_DEC(DS3231_REG_YEAR)
    88.         else:
    89.             self.setREG(self.dec2hex(year), DS3231_REG_YEAR)

    90.     def TEMP(self):
    91.         i2c.write(DS3231_ADDR,DS3231_REG_TEMP, repeat=False)
    92.         t1 = i2c.read(DS3231_ADDR,1, repeat=False)[0]
    93.         i2c.write(DS3231_ADDR,b'\x12', repeat=False)
    94.         t2 = i2c.read(DS3231_ADDR,1, repeat=False)[0]
    95.         if t1>0x7F:
    96.             return t1 - t2/256 -256
    97.         else:
    98.             return t1 + t2/256
    99. ds=DS3231()
    100. ds.DATE([17,10,24])
    101. ds.TIME([10,03,00])
    102. while True:
    103.     Time=ds.TIME()
    104.     Time_s=''
    105.     for i in Time:
    106.         Time_s+=str(i)+':'
    107.     display.scroll(Time_s[:-1]+"-")
    108.    
    109.     #print(Time)
    110.     #print(ds.TEMP())
    111.     sleep(1000)
    复制代码

    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 13:07 , Processed in 0.120420 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.