目次
はじめに
このディスプレイは数字や一部のアルファベットを非常にきれいに表示することができます。
時間や簡単な文字を表示するのに便利なディスプレイです。
リンク
動作の仕組み
正式名称は、「4-digit 7セグメントディスプレイ」です。
直訳すると、4桁 7分割のディスプレイとなります。
4桁:4つの数字または文字を表現できます。
7分割:特定のパターン(「8」の字)に並んだ7つのLEDを指しています。
これらのLEDは「TM1637 Serial LED driverで」制御されています。
LEDのon/off、輝度、各LEDへのアクセスを制御しています。
配線
RaspberryPi Pico | 4-digitディスプレイ |
VSYS(39番) | VCC |
GND(38番) | GND |
GP0(1番) | CLK |
GP1(2番) | DIO |
1分間カウントダウンして「PICO」という文字を出し、消灯する
ライブラリをimportもしくは下記のファイルを準備します。tm1637.pyで保存してください
import time
from machine import Pin
class TM1637:
def __init__(self, clk, dio):
self.clk = clk
self.dio = dio
self.clk.init(Pin.OUT)
self.dio.init(Pin.OUT)
self.dbuf = [0, 0, 0, 0]
self.cmd(0x40)
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)
if b & 1:
self.dio(1)
else:
self.dio(0)
b >>= 1
self.clk(1)
self.clk(0)
self.dio.init(Pin.IN)
self.clk(1)
ack = self.dio()
if ack == 0:
self.dio.init(Pin.OUT)
self.clk(0)
self.dio.init(Pin.OUT)
def cmd(self, cmd):
self.start()
self.write_byte(cmd)
self.stop()
def display(self, data):
self.cmd(0x40)
self.start()
self.write_byte(0xc0)
for i in range(4):
self.write_byte(data[i])
self.stop()
self.cmd(0x88 + 7)
def clear(self):
self.display([0, 0, 0, 0])
def numbers(self, num):
digits = [0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f]
self.display([digits[int(d)] for d in "{:04d}".format(num)])
# 追加: アルファベットを表示する関数
def show_text(self, text):
# 表示可能なアルファベットの16進コード
char_map = {
'A': 0x77, 'b': 0x7C, 'C': 0x39, 'd': 0x5E,
'E': 0x79, 'F': 0x71, 'G': 0x3D, 'H': 0x76,
'I': 0x06, 'J': 0x1E, 'L': 0x38, 'O': 0x3F,
'P': 0x73, 'S': 0x6D, 'U': 0x3E, ' ': 0x00 # 空白は消灯
}
# 入力された文字列のうち、4文字分を表示
data = []
for char in text[:4]:
data.append(char_map.get(char.upper(), 0x00)) # マップにない文字は消灯
while len(data) < 4:
data.append(0x00) # 4桁未満なら空白で埋める
# 表示
self.display(data)
以下がメインのコードです
from machine import Pin
from tm1637 import TM1637
import time
# GPIOピンの定義
clk = Pin(0)
dio = Pin(1)
# TM1637のインスタンスを作成
tm = TM1637(clk, dio)
# カウントダウンタイマーの関数
def countdown(minutes, seconds):
# 総秒数を計算
total_seconds = minutes * 60 + seconds
# 1秒ずつカウントダウン
while total_seconds >= 0:
# 分と秒を計算
mins = total_seconds // 60
secs = total_seconds % 60
# 分と秒を4桁で表示 (例: 01:30 は 0130 と表示)
tm.numbers(mins * 100 + secs)
# 1秒待機
time.sleep(1)
# 残り秒数を1減らす
total_seconds -= 1
# カウントダウン終了後、「PICO」を表示
tm.show_text("PICO")
# 10秒待機してから消去
time.sleep(10)
tm.clear()
# 1分間のカウントダウンを開始 (1分 = 0分60秒)
countdown(1, 0)
リンク
コメント