1 微型二进制时钟开源分享-德赢Vwin官网 网
×

微型二进制时钟开源分享

消耗积分:0 | 格式:zip | 大小:0.04 MB | 2022-11-02

石飞鹏

分享资料个

描述

之前创建了一个教程 ( Binary DVM ),它利用二进制的有限显示区域。

之前创建用于十进制到二进制转换的主代码模块以创建二进制时钟只是一小步,但唯一缺少的是 RTC(实时时钟)。

但是,Microbit 没有内置 RTC。

RTC 支持使用备用电池实现时钟项目。

因此,以下项目使用 Microbit 和 Kitronik RTC 创建具有二进制显示的 24 小时时钟,并且还具有闹钟选项。

将在 Microbit 上运行的项目软件将在 Makecode Blocks 中创建。

补给品

这些用品可从多个网点购买,您可能有自己的首选供应商。

第 1 步:定义显示区域

 
 
 
 
pYYBAGNh1cuASyE_AABYwVg1tao276.png
 
1 / 2
 

尽管显示区域在任何时候可以显示的数据量都受到限制,但它非常适合于位数据的显示。

因此,有足够的区域来显示 4 x 4 位二进制字,以通过通知和选择模式来表示时间。

显示屏分为 3 个主要区域;时间、选择和模式。

时间

16 个 LED 分配给时间,每列 4 个 LED 分配给一个时间间隔,间隔的形式为 H、H、M 和 M。

二进制字的每个位的权重为 1、2、4 和 8,LSB 在第 4 行,MSB 在第 1 行。

每个二进制 4 位字允许 0 到 15 的计数,这对于 24 小时时间格式来说绰绰有余,要求每列的最大计数为 2、9、5 和 9。

选择

第 0 行的一行 4 个 LED 用于识别输入时间时选择的时间列。

模式

第 4 列的一列 5 个 LED 用于识别模式、功能和操作。

Tick - LED 4、0 闪烁开和关,用于指示秒数和操作。

时间 - LED 4、1 亮时指示时间模式。(开机默认模式)

警报 - LED 4、2 亮起时指示警报模式。

警报通知 - LED 4、3 和 LED 4、4 会在警报触发时闪烁。

.

第 2 步:RTC(实时时钟)

 
 
 
 
pYYBAGNh1c2AK4bTAABY5hJFP8w691.png
 
1 / 4
 

RTC 是应用程序的跳动心脏,允许设置和保持准确的时间。

有关 RTC 的更多详细信息,请访问Kitronik

RTC 提供稳压电源,无需通过自己的 USB 或 JST 连接器为 Microbit 供电,并提供备用电池以在断电时保持时间。

在使用 RTC 之前,您需要加载扩展包。

使用设置图标中的 Makecode,选择扩展并在搜索中键入 Kitronik RTC。

选择要安装的软件包,它将被添加到其他扩展中。

有许多代码块可以读取和写入 RTC。

对于二进制时钟,我们只需要其中的 4 个代码块。

这些将用于将设置的时间写入 RTC 并读回时间以更新时钟显示。

第 3 步:对时钟进行编码

 
 
 
 
poYBAGNh1dOAYf62AACKlFdGTYM199.png
 
1 / 12
 

代码的第一部分是变量、数组和信息文本的程序初始化。

在里面

Bclk——二进制时钟

>Inc – B 按钮增加时间。

同时按下 A 和 B 按钮可更改时间和闹钟之间的模式。

Strval – 是包含从 RTC 返回的“HH:MM:SS”形式的时间的字符串值

只有 HH 和 MM 用于显示或设置时间。

Mode – 保留使用 A+B 按钮组合选择的 Time = 1 和 Alarm = 2 的模式值。

Period – 是时间列的值,使用 A 按钮选择。

0 = 第 0 列 (H), 1 = 第 1 列 (H), 2 = 第 2 列 (M), 3 = 第 3 列 (M)

Tick_en – Enables = 1 或 Disables = 0 滴答(秒)指示器。

Inc – 增量时间设置值的中间存储。

Tm_list[] – 存储设置期间每个时间列的值。

警报 – 启用或禁用警报指示器。

永远不断地调用刻度函数。

打钩

通常启用的刻度功能在右上角显示交替的开/关 LED 以指示操作和秒数。

此外,它调用 showtm 函数读取 RTC 并将其处理为二进制显示,同时还调用 alarm_mode,如果启用,则在右下角显示警报通知 LED。

Showtm

函数 showtm,调用 rdtime 并且从中使用的值是包含时间字符串的 strval。

创建了一个循环,该循环通过 strval 提取每个单个数字并忽略分隔符“:”而递增。

然后使用函数 dec2bin 将每个单个数字转换为其二进制等效项并分配给正确的列。

时间

函数 rdtime,读取从 RTC 返回的字符串中的前 5 个字符(忽略秒部分),并将其传递给 strval。

如果设置了警报(模式 = 2),则将警报设置值与 RTC 返回的值进行比较,如果匹配,则警报 = 1,如果不匹配,则警报 = 0。

启用后的 Alarm_mode 在第 4 列的右下角显示两个交替开/关的 LED。

Dec2bin

函数 dec2bin 将十进制数转换为二进制数并将其显示在正确的列中。

需要转换的数字通过 value 传入,显示列通过 col 传入。

List2[] 是存储来自二进制转换过程的 4 位二进制字的数组。

启动一个循环,继续将该值除以 2,余数存储在数组元素中,整数值除以 2,重复此操作直到整数值 <=1,并将最后一个值放入数组中。

最大的一位十进制值是 9,在二进制中这是 1001 作为 4 位字。

然后需要以相反的顺序处理数组以获得正确的结果。

然后启动一个循环以打开相应列中的正确 LED,这是在 4 位二进制字中每次出现一个 1 时完成的。

人机界面是通过按钮完成的。

A 按钮。

这将选择要输入时间值的列,并在第 4 行的所选列上显示一个发光的 LED。

更新所有时间列后,将选择增加到第 5 列会更新时间变量。

如果模式 = 1,则更新 RTC,否则更新闹钟时间。

B 按钮

这是递增按钮,用于递增选定的时间列。

为了减少错误并节省获取正确值的时间,每列可以输入的最大值根据 24 小时制时间值设置上限。

这些最大值存储在 tm_max[] 中,每个时间列一个,并根据时间列自动选择。

最大值为 H = 2、H = 9、M = 5、M = 9

增量值在 dec2bin 中转换为二进制并更新显示。

按钮 A+B 模式选择。

同时按下两个按钮可以在时间模式或警报模式之间进行选择,相应的模式将显示在显示屏上。

根据选择的模式,显示屏会更新以显示时间或警报设置时间。

 

第四步:操作

 
 
 
 
poYBAGNh1ceAfUGeAASZg0TFchc259.jpg
 
1 / 3
 

将 Hex 文件下载到 Microbit,将 CR2032 电池插入 RTC。

将 Microbit 插入 RTC 并通过 USB 或螺丝端子为 RTC 板供电。

Tick LED 将开始闪烁,此后不久将显示时间。

如果这是第一次使用,显示的时间很可能是错误的,需要设置为正确的时间。

模式选择。

同时按下选择 (A) 和增量 (B) 按钮将允许在时间和警报之间循环模式选项。

设置时间

时间设置为 24H 模式。

使用选择按钮 (A) 将 LED 移动到顶行,这表示可以更改时间的列。选择列对应于 H、H、M 和 M。

其中 H = 小时,M = 分钟。

选择一列后,按递增按钮 (b),每按一次重复以将计数递增一。计数以二进制表示,毕竟它是一个二进制时钟。

增量按钮只会增加计数,一旦达到最大值就会重置为零,进一步按下将再次增加计数。

设置第一列时间后,按下下一列的选择按钮,然后使用增量按钮设置列时间。

注意:*** 当您设置时间或闹钟时,您需要在所选列中输入时间,即使列中的时间保持不变,因为跳过一列会将该列时间设置为零 ****

重复该过程,直到使用所有 4 列设置时间。

第五次按下选择按钮,将其移动到第五列,时间就设置好了。

设置闹钟

设置闹钟时间的方式与设置时间完全相同。

为了在所需时间触发警报,请将模式设置为警报。

要关闭警报,请将模式设置为时间。

要显示设置的闹钟时间,请在时间和闹钟之间循环模式,闹钟时间将显示一小段时间,然后恢复显示当前时间。

闹钟时间不存储在 RTC 中,因此如果断电,则需要重新设置。

第5步:装箱

 
 
 
 
poYBAGNh1eeAMSxsAAEoklUQRqI811.png
 
1 / 2
 

该项目将坐在适当的角度观看时钟,但一个盒子增加了一种永恒感。

您可以购买一个大小合适的盒子,然后在适当的区域切割和钻出,以使 Microbit 能够安装在插座中。

然而; 此外,我想复制 Microbit 按钮以及其他控件和指示器。

通常,需要将图例应用于框以识别按钮。

这些可以用手涂抹;涂漆、雕刻或应用标签。

实现所有这些选项的一种方法是 3D 打印盒子,但首先我们需要创建一个 CAD 文件来创建打印机文件。

文件创建选项是手绘或使用代码绘制的。

我选择使用Tinkercad CodeBlocks “用代码绘制”

Box LidBox Base的文件可以在 Tinkercad CodeBlocks 上找到

第 6 步:块代码设计

 
 
 
 
poYBAGNh1euAAms4AADkuj2m_mw495.png
 
1 / 2
 

盒子是由底座和盖子组成的两部分设计。

四个角螺丝孔将用于固定盖子,左侧有一个切口,以便插入 USB 插头。

盖子将有一个用于 Microbit 连接器和所需开关的切口,此外,任何文本都将直接打印在盖子上,螺丝孔将与基柱对齐。

RTC 板将通过 4 个支柱和 4 个螺钉固定在盖子的底部。

盒子加盖子的尺寸是 70 x 105 x 31 mm

盖子和底座的代码可在 TinkerCad 代码块中找到。

第 7 步:3D 打印

将文件加载到 Cura 并应用您喜欢的切片器设置。

应用的设置。

质量:0.15mm

填充物:80%,三六边形

底座:边缘

保存文件然后打印。

使用 Cura,您可以将两个文件一起加载到同一打印区域并一次性打印。

第 8 步:填充

盒盖印有凹槽文字,将填充彩色 2 部分环氧树脂。

将树脂以 2 份树脂与 1 份硬化剂的比例混合,然后混入不透明的彩色颜料。

选择的颜色是黄色以与背景形成对比。白色将是另一种选择。

混合后,使用鸡尾酒棒将树脂滴入凹槽中,以转移用于逐渐填充字母凹槽的小树脂团。

不要一次性加入过多的树脂,因为您最终可能会产生气泡,或者在周围表面产生过多的溢出,这意味着一旦固化,您将需要进行更多的清理和打磨。

所以慢慢填充,确保字母的底部被覆盖,并用轻微的凸起表面完成它。

树脂固化后,需要轻轻打磨以平整表面,从 P240 等级开始,根据需要逐步升级到更精细的等级,以获得光滑的饰面,最后用抛光剂完成。

不要施加太大的压力和太快的速度,否则会使 PLA 和树脂过热,从而由于砂粒的吸收而导致表面变暗,在打磨过程中施加的少量水将起到润滑剂和冷却剂的作用。

第 9 步:组装

Microbit 将以两个方向装入插槽,面向 RTC 的主要部分或背对。

但是,如果面向 RTC 的主要部分,则无法使用链接连接,如果 Microbit 背对板的主要部分,那么我们可以使用这些连接。

组装首先将直角 SIL 排针焊接到 RTC 上,这是为了能够使用推入式连接器进行连接。

RTC 由 4 * M3 (10+6mm)、M/F 支架和 M3 螺母安装,这些螺母用 4 * M3 (8mm) 螺钉固定在预制孔中的盖子上。

开关安装在盖子上的预制孔中。

所需的连接是:

GND, 3V, P1 (set), P2 (alert), P5 (sel) & P11 (inc)

注意 *** P5 和 P11 图表上的电阻器 (1R) 只是参考连接点,因为此时无法直接连接到 Microbit in Code 块上的这些引脚。***

P5 是按钮 A 的外部连接,由 SPST 瞬时开关连接。一个连接到 P5,另一个引脚连接到 GND,此按钮用于时间设置期间的列选择。

P11 是按钮 B 的外部连接,由 SPST 瞬时开关连接。一个连接到 P11,另一个引脚连接到 GND,他的按钮用于在时间设置期间增加数字。

P1 是一个 SPDT(on-on)开关,用于启用或禁用设置选项。中心引脚连接到 P1,而一个引脚通过 10k 电阻连接到 GND,另一个连接到 3V。这使得 H (3V) 和 L (0V) 能够应用于该引脚。当 P1 连接到 3V 时,这将启用时间设置选项,而当 0V 时禁用时间设置。从而控制A&B按钮是否有任何作用。

P2 是一个 SPDT(on-off-on)开关,用于启用或禁用警报发声器和可选的外部灯。

警报发声器是压电蜂鸣器(简单地贴有双面粘性垫),需要由 Microbit 提供的脉冲驱动。

第10步:最后

您已经在盒子中组装了元件,对 Microbit 进行了编程并将其安装到盒子上的插座中。

接下来应用电源并设置时间。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"//www.hzfubeitong.com/m/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="https://m.elecfans.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'微型二进制时钟开源分享',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.hzfubeitong.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);