极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8160|回复: 1

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

[复制链接]
发表于 2018-3-15 10:08:14 | 显示全部楼层 |阅读模式
电子时钟是一个很常用但是制作非常简单的小玩具了,对于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
关于代码,这里我们就不用拼插编程了,代码太长拼插起来就有点费时间了
源代码:
f
  1. rom 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)
复制代码
回复

使用道具 举报

发表于 2018-3-15 22:13:11 | 显示全部楼层
有图就更好了
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 17:30 , Processed in 0.037411 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表