from machine import Pin
from time import sleep_us
TM1637_CMD1 = 0x40 # Command 1: Set data
TM1637_CMD2 = 0xC0 # Command 2: Set address
TM1637_CMD3 = 0x80 # Command 3: Set display control
TM1637_DSP_ON = 0x88 # Display on with no brightness control
TM1637_DSP_OFF = 0x80 # Display off
SEGMENTS = [0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f]
class TM1637:
def __init__(self, clk, dio):
self.clk = clk
self.dio = dio
self.clk.init(Pin.OUT)
self.dio.init(Pin.OUT)
def start(self):
self.dio(1)
self.clk(1)
self.dio(0)
self.clk(0)
def stop(self):
self.clk(0)
self.dio(0)
self.clk(1)
self.dio(1)
def write_byte(self, b):
for i in range(8):
self.clk(0)
self.dio((b >> i) & 1)
self.clk(1)
self.clk(0)
self.dio(1)
self.clk(1)
def set_segments(self, segments, pos=0):
self.start()
self.write_byte(TM1637_CMD1)
self.stop()
self.start()
self.write_byte(TM1637_CMD2 | pos)
for seg in segments:
self.write_byte(seg)
self.stop()
self.start()
self.write_byte(TM1637_DSP_ON)
self.stop()
def encode_digit(self, digit):
return SEGMENTS[digit]
def show(self, num):
digits = [self.encode_digit(int(d)) for d in '{:04d}'.format(num)]
self.set_segments(digits)
def clear(self):
self.set_segments([0, 0, 0, 0])
def show_colon_time(self, minutes, seconds):
"""顯示時間格式 MM:SS 並啟用冒號"""
minute_tens = minutes // 10
minute_ones = minutes % 10
second_tens = seconds // 10
second_ones = seconds % 10
segments = [
self.encode_digit(minute_tens),
self.encode_digit(minute_ones) | 0x80, # 啟用冒號
self.encode_digit(second_tens),
self.encode_digit(second_ones)
]
self.set_segments(segments)
show_colon_time():新增此函數來顯示時間格式 MM:SS,並且在兩個時間之間顯示冒號。冒號是通過在第二個數字後面加上 0x80 來啟用的。
SEGMENTS:這是七段顯示器的數字編碼表,編碼對應於每個數字 0-9。如果顯示不正確,你可以檢查並修改此表格。
在你的主程式中,這樣顯示時間:
python
複製程式碼
from machine import Pin
import time
import tm1637 # 引入 tm1637 驅動程式
# 定義 TM1637 LED 顯示模組的 CLK 和 DIO 腳位
tm = tm1637.TM1637(clk=Pin(16), dio=Pin(17))
# 設定相關變數
start_time = time.time()
while True:
elapsed_time = time.time() - start_time
minutes = int(elapsed_time // 60)
seconds = int(elapsed_time % 60)
# 顯示 MM:SS 格式的時間
tm.show_colon_time(minutes, seconds)
time.sleep(1) # 每秒更新一次顯示
檢查數字顯示:這段代碼應該能夠正確顯示 4 位數的時間格式「分:秒」在 LED 上,並且會在兩個數字之間顯示冒號。
調整 SEGMENTS:如果某些數字顯示錯誤,可以檢查 SEGMENTS 列表中的編碼,確保它正確對應每個數字。