5.2 数字表示

7セグメントディスプレイは日常生活で至るところで見かけます。 例えば、エアコンでは温度を表示するために使われ、交通信号機ではタイマーを表示するために用いられます。

7セグメントディスプレイは基本的に8つのLEDで構成されています。このうち7つの帯状のLEDが「8」の形を形成し、小さな点状のLEDが小数点として機能します。これらのLEDはa、b、c、d、e、f、g、およびdpとマークされています。各LEDは独自のアノードピンを持ち、カソードは共有されています。ピンの位置は以下の図で示されています。

img_7seg_cathode

これは、7セグメントディスプレイが完全に動作するためには同時に8つのデジタル信号で制御する必要があることを意味します。74HC595がこれを可能にします。

必要な部品

このプロジェクトでは以下の部品が必要です。

一式で購入すると便利です、そのリンクはこちらです:

名前

このキットに含まれるアイテム

リンク

ケプラーキット

450+

Kepler Kit

以下のリンクから個々の部品も購入することができます。

SN

部品

数量

リンク

1

Raspberry Pi Pico W

1

BUY

2

マイクロUSBケーブル

1

3

ブレッドボード

1

BUY

4

ジャンパーワイヤー

数本

BUY

5

抵抗器

1(220Ω)

BUY

6

7セグメントディスプレイ

1

BUY

7

74HC595

1

BUY

回路図

sch_74hc_7seg

こちらの配線原理は基本的に 5.1 マイクロチップ - 74HC595 と同じで、唯一の違いはQ0~Q7が7セグメントディスプレイのa~gピンに接続されている点です。

配線

74HC595

LED セグメントディスプレイ

Q0

a

Q1

b

Q2

c

Q3

d

Q4

e

Q5

f

Q6

g

Q7

dp

配線図

wiring_74hc_7seg

コード

注釈

  • kepler-kit-main/micropython のパス内にある 5.2_number_display.py ファイルを開くか、このコードをThonnyにコピーしてから「Run Current Script」をクリックするか、F5を押して実行してください。

  • 右下隅の「MicroPython(Raspberry Pi Pico)」インタプリタをクリックすることを忘れないでください。

  • 詳細なチュートリアルは、 コードを直接開いて実行する を参照してください。

import machine
import time

SEGCODE = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f]

sdi = machine.Pin(0,machine.Pin.OUT)
rclk = machine.Pin(1,machine.Pin.OUT)
srclk = machine.Pin(2,machine.Pin.OUT)

def hc595_shift(dat):
    rclk.low()
    time.sleep_ms(5)
    for bit in range(7, -1, -1):
        srclk.low()
        time.sleep_ms(5)
        value = 1 & (dat >> bit)
        sdi.value(value)
        time.sleep_ms(5)
        srclk.high()
        time.sleep_ms(5)
    time.sleep_ms(5)
    rclk.high()
    time.sleep_ms(5)

while True:
    for num in range(10):
        hc595_shift(SEGCODE[num])
        time.sleep_ms(500)

プログラムが実行されていると、LEDセグメントディスプレイが0〜9を順番に表示するのが確認できます。

動作原理

hc595_shift() 関数によって74HC595は8つのデジタル信号を出力します。 この関数は、2進数の最後のビットをQ0に、最初のビットをQ7に出力します。つまり、2進数「00000001」を書き込むと、Q0は高レベルを、Q1〜Q7は低レベルを出力します。

7セグメントディスプレイが「1」と表示する場合、bとcに高レベルを書き込み、a、d、e、f、g、およびdgに低レベルを書き込む必要があります。

img_1_segment

すなわち、2進数「00000110」を書き込む必要があります。可読性のため、16進数表記「0x06」を使用します。

同様にして、LEDセグメントディスプレイに他の数字を表示させることもできます。以下の表は、それぞれの数字に対応するコードを示しています。

グリフコード

数字

2進数コード

16進数コード

0

00111111

0x3f

1

00000110

0x06

2

01011011

0x5b

3

01001111

0x4f

4

01100110

0x66

5

01101101

0x6d

6

01111101

0x7d

7

00000111

0x07

8

01111111

0x7f

9

01101111

0x6f

これらのコードを hc595_shift() 関数に書き込むことで、LEDセグメントディスプレイが対応する数字を表示するようにできます。