from machine import Pin
import utime
# ① 以列表推導式批次初始化 7 個線段腳位(GP2~GP8 對應 a~g)
segments = [Pin(i, Pin.OUT) for i in range(2, 9)]
# ② 共陽極段碼字典:Key 為數字字元,Value 為 [a,b,c,d,e,f,g](0=亮, 1=滅)
segment_map = {
'0': [0,0,0,0,0,0,1],
'1': [1,0,0,1,1,1,1],
'2': [0,0,1,0,0,1,0],
'3': [0,0,0,0,1,1,0],
'4': [1,0,0,1,1,0,0],
'5': [0,1,0,0,1,0,0],
'6': [0,1,0,0,0,0,0],
'7': [0,0,0,1,1,1,1],
'8': [0,0,0,0,0,0,0],
'9': [0,0,0,0,1,0,0],
'-': [1,1,1,1,1,1,0], # 橫線(錯誤或待機符號)
}
def show_char(char):
"""依字典查表,設定各線段輸出值"""
code = segment_map.get(char, segment_map['-']) # 查無此字元則顯示 '-'
for i, seg in enumerate(segments):
seg.value(code[i])
def all_off():
"""全滅(共陽極:全部輸出 1)"""
for seg in segments:
seg.value(1)
def blink(times=3, interval_ms=200):
"""閃爍效果:亮 → 滅,重複 times 次"""
for _ in range(times):
for seg in segments:
seg.value(0) # 全亮(共陽極輸出 0)
utime.sleep_ms(interval_ms)
all_off()
utime.sleep_ms(interval_ms)
# ③ 倒數計時:9 → 0
print(">>> 倒數計時開始...")
for count in range(9, -1, -1):
show_char(str(count)) # 將整數轉字串再查字典
print(f"顯示:{count}")
utime.sleep(1)
# ④ 計時結束:閃爍 3 下後全滅
print("計時結束!")
blink(times=3)
all_off()
print("顯示器已關閉")