数模设计计时器,有分秒显示

请教一个问题就是那个计时器,秒要到0-99的显示器没有毫秒,直接是秒显示器那里显示到60后,分钟跳到1min,然后秒表继续从60到99,然后又从99到30,分钟跳到2min。这个改怎么设计😭

img

该回答引用GPT与博主@晓码自在合作编写:

您所描述的这个秒表显示问题,是因为显示器本身没有毫秒级别的显示精度,所以在秒数增加到60之后直接跳变到分钟显示,而秒数继续增长到99,然后再从99减少到30,这显然是不符合正常的计时显示逻辑的。

要解决这个问题,我们需要在软件算法级别实现秒表的逻辑并正确控制显示:

  1. 记录毫秒级别的精确时间,不依赖于显示器的显示。可以使用系统时间或时间戳进行记录。
  2. 在刷新显示时,首先将毫秒时间转换为分钟、秒的显示格式。例如123045毫秒可以显示为2分3秒45。
  3. 如果计算出的秒数超过59,则分钟位数增加1,秒数设为0。例如60542毫秒应显示为1分0秒42。
  4. 刷新显示器显示分钟和秒数,但内部记录的毫秒时间依然连续增加。
  5. 通过定时器不断刷新显示,以produce连续增加的显示效果。但增加幅度受显示器精度的限制。

基于上述逻辑,我们可以设计如下代码实现一个正确的秒表功能:

python
import time

second = 0  # 显示秒数
minute = 0  # 显示分钟数
last_time = 0  # 上次刷新的毫秒时间

def refresh_display():
    global second, minute, last_time
    now = int(time.time() * 1000)  # 获取当前毫秒时间
    duration = now - last_time     # 计算刷新间隔 
    
    # 根据刷新间隔更新显示秒和分钟
    second += duration // 1000     
    minute += second // 60
    second = second % 60
    
    # 刷新显示器
    print('%02d:%02d' % (minute, second))
    
    # 更新上次刷新时间 
    last_time = now 
    
if __name__ == '__main__':
    # 50ms刷新一次显示 
    timer = setInterval(refresh_display, 50)

这个代码实现了一个基于毫秒级精确时间的秒表逻辑,每50ms刷新一次分钟和秒数显示,并且正确处理秒数超过59的进位运算。

希望这个代码示例能够帮助您理解如何利用软件算法设计一个工作正常的秒表功能。