配置図
7セグメントLEDのピン配置は以下の通り(コモンカソードの場合)。
セグメントコード
各セグメントを0で消灯、1で点灯するとして、a~g及びDPを逆順にして0~Fを表示させるビット配列は以下のようになる。
表示 | dp g f e d c b a | Hex |
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 |
A | 01110111 | 0x77 |
B | 01111100 | 0x7c |
C | 00111001 | 0x39 |
D | 01011110 | 0x5e |
E | 01111001 | 0x79 |
F | 01110001 | 0x71 |
GPIOに直接接続
7セグメントLEDの動作を確認するため、以下の様にRaspberry Pi 4BのGPIOに接続した。
点灯テストは以下のコードで行った。
- LEDの各ピンにGPIOのピンを割り当て
- 0~9, A~Fの表示に対応するビットパターンを定義
- ビット配列はdp, g, f, e, d, c, b, aの逆順
- 16個のパターンを0.5秒ずつ表示
- パターン表示はビット配列を必要分だけシフトして、ピンに対応するビットが1の場合にセグメントを点灯、0の場合に消灯
- 終了時に全セグメントを消灯
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import RPi.GPIO as GPIO import time # Assign pins of 7-segment LED to GPIO pins led = {'a':2, 'b':3, 'c':4, 'd':5, 'e':6, 'f':7, 'g':8, 'dp':9} # Dfine inverted bit patterns of 0, ..., 9, A, ..., F (dp,g,f,e,d,c,b,a) patterns = [0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71] # Define function to call before ending def destroy(): for pin in led.values(): GPIO.output(pin, GPIO.LOW) # Start execution GPIO.setmode(GPIO.BCM) # Light off all segments for pin in led.values(): GPIO.setup(pin, GPIO.OUT, initial=GPIO.LOW) # Light each pattern 0.5sec for pattern in patterns: # Decode each bit of a pattern and send the level to GPIO pin for n, pin in enumerate(led.values()): if (pattern >> n) & 1: GPIO.output(pin, GPIO.HIGH) else: GPIO.output(pin, GPIO.LOW) print(pattern) time.sleep(0.5) destroy() |
このような接続の場合、LEDの8つのピンに対応してGPIOのピンも8つ消費される。
より少ないピンの数で7セグメントLEDを接続するためには、シフトレジスターを用いるのが一般的。