micro:bit 桌面秒表:暂停保留累计时间,停止后按键查看秒数

2026-11-2 / 0 评论 / 1 阅读

micro:bit 桌面秒表:暂停保留累计时间,停止后按键查看秒数 教程示意图

适用日期: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 而没有实时数字,是本项目的既定设计。官方显示文档说明,默认滚动显示会等待动画完成。把滚动显示放进运行循环会延迟按键响应,因此本程序只在暂停时展示数字。

双键清零没有成功,通常是两键按下相隔太久,或者保持时间不足。短按双键被识别后不会清零,但也不会自动暂停。若同时按键被当成左键操作,松开后重新同时按下。按键状态读取方式可查阅官方按键接口。

安全与回退

无需外接电池、传感器或电机,不要向边缘接口接入外部电压。移动开发板、检查接口或更换连接方式前先断电。上传程序会替换原程序,回退时重新传入先前保存的文件。累计时间在断电、复位或重新上传后丢失,重要记录应先抄到电脑。

参考资料与转载说明

本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。

评论一下?

OωO
取消