适用日期:2026-11-02。
适用场景
做装配练习或记录一道操作花费多久时,经常需要暂停后继续,而不是重新从零开始。本教程用 micro:bit V2 的内置按键和点阵制作桌面秒表,不增加外部接线。左键用于开始或暂停,暂停后右键显示累计秒数;同时按住双键一秒可以清零。运行时点阵显示字母 R,暂停时显示字母 P。
它适合学习程序计时和交互,不用于竞赛裁判、医疗计时或精密测量。显示结果取整到秒,人手按键、循环调度和板载时钟都会影响结果。
原理
不要用“每循环一次就加一秒”的方式计时,因为处理按键和显示也会花时间。这里读取开机后的毫秒数,开始时保存一个起点,暂停时把当前时刻与起点的差加入累计量。再次开始只更新起点,已有累计量保持不变。
micro:bit 官方模块文档说明,运行时间函数返回自开机或重启以来的毫秒数。本项目针对短时桌面实验,不处理长期连续运行可能遇到的计数边界。
程序还设置释放锁:一次按键被接受后,必须等两个按键都松开,才能接受下一次动作。这样按住左键不会让秒表不停切换。为了识别双键清零,程序在首次检测到按下后等待很短时间,再判断是否双键同时按住。
准备工作
准备 micro:bit V2、可传输数据的 USB 线和电脑。打开官方 Python 编辑器,先把板上原有程序保存到电脑。关闭其他占用串口的软件,确认开发板能被正常识别。整个项目只使用开发板的 USB 低压供电,边缘接口保持空置。
分步骤操作
第一步:明确操作规则
左键按一次开始,再按一次暂停;右键只有在暂停时才显示时间,运行时按右键不会滚动数字。清零需要先按住一个键,并在短暂识别窗口内按下另一个键,然后保持双键一秒。最容易的做法是同时按住两键。清零后秒表停在暂停状态。
第二步:输入完整程序
下面的变量都是程序内部状态,无需替换设备名或路径。累计量以毫秒保存,显示时除以一千并舍去小数。
from microbit import *
running = False
total_ms = 0
started_at = 0
locked = False
display.show('P')
while True:
a = button_a.is_pressed()
b = button_b.is_pressed()
if not a and not b:
locked = False
if not locked and (a or b):
sleep(60)
a = button_a.is_pressed()
b = button_b.is_pressed()
if a and b:
held_at = running_time()
while (button_a.is_pressed() and
button_b.is_pressed() and
running_time() - held_at < 1000):
sleep(10)
if (button_a.is_pressed() and
button_b.is_pressed()):
running = False
total_ms = 0
started_at = 0
display.show('P')
elif a:
now = running_time()
if running:
total_ms += now - started_at
running = False
display.show('P')
else:
started_at = now
running = True
display.show('R')
elif b and not running:
display.scroll(str(total_ms // 1000))
display.show('P')
locked = True
sleep(10)
第三步:传入开发板
在编辑器中检查缩进,再通过发送到 micro:bit(Send to micro:bit)传入程序;也可以使用下载(Download)取得程序文件,复制到开发板的可移动磁盘。不同编辑器版本的按钮位置可能不同,首次连接时按浏览器提示选择自己的开发板。
传输完成后应显示 P。若显示错误信息,先记录完整提示和行号,检查是否遗漏冒号、括号或缩进。不要只复制循环部分,开头的变量初始化同样必需。
第四步:观察交互
按左键开始,确认显示 R;再按左键暂停,确认显示 P。暂停后按右键,点阵会滚动显示累计秒数。显示完成后重新出现 P,先松开右键,再进行下一次操作。
验证方法
先运行约三秒再暂停,等待约五秒后查看,结果应接近三秒。随后继续运行约两秒再暂停,结果应接近五秒,而不是十秒。手动操作存在误差,判断重点是暂停的五秒没有计入。
再长按左键,确认只发生一次状态切换。最后同时长按双键清零,松手后按右键,应显示零。重启开发板也应回到零,因为程序没有把累计值写入非易失存储。
常见错误
只看到 R 或 P 而没有实时数字,是本项目的既定设计。官方显示文档说明,默认滚动显示会等待动画完成。把滚动显示放进运行循环会延迟按键响应,因此本程序只在暂停时展示数字。
双键清零没有成功,通常是两键按下相隔太久,或者保持时间不足。短按双键被识别后不会清零,但也不会自动暂停。若同时按键被当成左键操作,松开后重新同时按下。按键状态读取方式可查阅官方按键接口。
安全与回退
无需外接电池、传感器或电机,不要向边缘接口接入外部电压。移动开发板、检查接口或更换连接方式前先断电。上传程序会替换原程序,回退时重新传入先前保存的文件。累计时间在断电、复位或重新上传后丢失,重要记录应先抄到电脑。
参考资料与转载说明
本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。
评论一下?