Raspberry Piで電子工作(4) 7セグディスプレイ

今回は、7セグメントディスプレイを使用して、数字の1~9を順番に表示するプログラムを作成したいと思う。

準備するもの

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

7セグメントディスプレイとは、以下の図のように9つのLEDを備えており、点灯させるLEDの組み合わせを工夫することによって、数字を表示させることができるものである。

信号ピンは10個存在するが、数字の表示に使用するのが、7つ、右下のドット表示に使用するのが1つ、GNDに接続するのが2つとなっている。

今回使用する7セグディスプレイは、ポジティブトリガーエッジのため、正論理で点灯(つまり1を出力すると点灯)となる。

0~9までの数字を表示する際の各セグメントのビットは、次の表のようになる。

Display
digital
a b c d e f g
0 1 1 1 1 1 1 0
1 0 1 1 0 0 0 0
2 1 1 0 1 1 0 1
3 1 1 1 1 0 0 1
4 0 1 1 0 0 1 1
5 1 0 1 1 0 1 1
6 1 0 1 1 1 1 1
7 1 1 1 0 0 0 0
8 1 1 1 1 1 1 1
9 1 1 1 1 0 1 1

製作する回路

今回はGPIO21~27ピンを使用する。

ごちゃごちゃしているが、以下のように接続する。
なお、今回dpは使用しないので、LOWにして(GNDに接続して)消灯しておく。

作成したプログラム

#include <wiringPi.h>

int main(void) {
    wiringPiSetup();
    int num[10][7] = {
        {1, 1, 1, 1, 1, 1, 0}, // 0
        {0, 1, 1, 0, 0, 0, 0}, // 1
        {1, 1, 0, 1, 1, 0, 1}, // 2
        {1, 1, 1, 1, 0, 0, 1}, // 3
        {0, 1, 1, 0, 0, 1, 1}, // 4
        {1, 0, 1, 1, 0, 1, 1}, // 5
        {1, 0, 1, 1, 1, 1, 1}, // 6
        {1, 1, 1, 0, 0, 0, 0}, // 7
        {1, 1, 1, 1, 1, 1, 1}, // 8
        {1, 1, 1, 1, 0, 1, 1}, // 9
    };

    for (int i = 21; i < 28; i++) {
        pinMode(i, OUTPUT); // 21~27ピンをすべて出力に設定
    }

    for (int count = 0; count < 10; count++) {
        for (int i = 0; i < 8; i++)
        {
            digitalWrite(i, num[count][i]); // num配列の中身を各端子に出力
        }
        delay(1000); // 1秒停止
    }

    return 0;
}

プログラムの説明

5行目で、2次元配列numを用意し、外側は表示させるための数字、内側はA~Gに出力する値を格納している。

18行目~のfor文で21~27ピンを出力設定で初期化している。

22行目~はforの2重ループとなっており、外側のループで表示させる数字、内側のループで送信するピン番号を指定している。 ピン番号は21~27だが、配列は0~7で格納しているため、注意が必要である。

このままfor文を回すと早すぎるので、delay()関数で1秒間停止している。


トップページに戻る