python数码时钟代码_micro:bit 编程模拟时钟表盘

使用 micro:bit 的屏幕显示模拟时钟,利用亮度表示秒。这里提供两种实现方式,分别是 MicroPython 和 MakeCode 图形化编程。效果如下。

20190112231410641.gif

MicroPython 实现代码如下。

from microbit import *

DS1302_REG_SECOND = (0x80)

DS1302_REG_MINUTE = (0x82)

DS1302_REG_HOUR = (0x84)

DS1302_REG_DAY = (0x86)

DS1302_REG_MONTH = (0x88)

DS1302_REG_WEEKDAY= (0x8A)

DS1302_REG_YEAR = (0x8C)

DS1302_REG_WP = (0x8E)

DS1302_REG_CTRL = (0x90)

DS1302_REG_RAM = (0xC0)

class DS1302:

def __init__(self, clk, dio, cs):

self.clk = clk

self.dio = dio

self.cs = cs

def DecToHex(self, dat):

return (dat//10) * 16 + (dat%10)

def HexToDec(self, dat):

return (dat//16) * 10 + (dat%16)

def write_byte(self, dat):

for i in range(8):

self.dio.write_digital((dat >> i) & 1)

self.clk.write_digital(1)

self.clk.write_digital(0)

def read_byte(self):

d = 0

for i in range(8):

d = d | (self.dio.read_digital()<

self.clk.write_digital(1)

self.clk.write_digital(0)

return d

def getReg(self, reg):

self.cs.write_digital(1)

self.write_byte(reg)

t = self.read_byte()

self.cs.write_digital(0)

return t

def setReg(self, reg, dat):

self.cs.write_digital(1)

self.write_byte(reg)

self.write_byte(dat)

self.cs.write_digital(0)

def wr(self, reg, dat):

self.setReg(DS1302_REG_WP, 0)

self.setReg(reg, dat)

self.setReg(DS1302_REG_WP, 0x80)

def start(self):

t = self.getReg(DS1302_REG_SECOND + 1)

self.wr(DS1302_REG_SECOND, t & 0x7f)

def stop(self):

t = self.getReg(DS1302_REG_SECOND + 1)

self.wr(DS1302_REG_SECOND, t | 0x80)

def Second(self, second = None):

if second == None:

return self.HexToDec(self.getReg(DS1302_REG_SECOND+1))%60

else:

self.wr(DS1302_REG_SECOND, self.DecToHex(second%60))

def Minute(self, minute = None):

if minute == None:

return self.HexToDec(self.getReg(DS1302_REG_MINUTE+1))

else:

self.wr(DS1302_REG_MINUTE, self.DecToHex(minute%60))

def Hour(self, hour = None):

if hour == None:

return self.HexToDec(self.getReg(DS1302_REG_HOUR+1))

else:

self.wr(DS1302_REG_HOUR, self.DecToHex(hour%24))

def Weekday(self, weekday = None):

if weekday == None:

return self.HexToDec(self.getReg(DS1302_REG_WEEKDAY+1))

else:

self.wr(DS1302_REG_WEEKDAY, self.DecToHex(weekday%8))

def Day(self, day = None):

if day == None:

return self.HexToDec(self.getReg(DS1302_REG_DAY+1))

else:

self.wr(DS1302_REG_DAY, self.DecToHex(day%32))

def Month(self, month = None):

if month == None:

return self.HexToDec(self.getReg(DS1302_REG_MONTH+1))

else:

self.wr(DS1302_REG_MONTH, self.DecToHex(month%13))

def Year(self, year = None):

if year == None:

return self.HexToDec(self.getReg(DS1302_REG_YEAR+1)) + 2000

else:

self.wr(DS1302_REG_YEAR, self.DecToHex(year%100))

mx=(2,3,4,4,4,3,2,1,0,0,0,1)

my=(0,0,1,2,3,4,4,4,3,2,1,0)

ds=DS1302(clk=pin13,dio=pin14,cs=pin15)

old = -1

while 1:

s = ds.Second()

if old != s:

old = s

m=ds.Minute()

a=s//5

b=s%5

if b==4:

display.set_pixel(mx[a],my[a],0)

else:

display.set_pixel(mx[a],my[a],b*3)

if s%2:

display.set_pixel(2, 2, 5)

else:

display.set_pixel(2, 2, 0)

sleep(200)

MakeCode 程序如下。

20190112231410745.jpg

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值