Arduino

7セグメントドライバICを使って7セグLEDを表示する

過去に7セグLEDを一つまたは二つ制御する回路を作成しましたが、配線が複雑だったり、入力端子数が多くなっていました。世の中には7セグメントドライバICというものがあり、7セグLEDの点灯に役立つ電子部品となっていますので、今回はこれを使いたいと思います。

回路は「1桁表示用の7セグ」と「4桁表示用の7セグ」を使った2パターンを作成します。

7セグメントドライバIC(TC4511BP)

7セグメントドライバICは、2進数で入力を受け付けてその数字にあった形で7セグLEDを点灯してくれる電子部品です。そのため、予め表示したい数字のパターンをプログラム上で用意する必要がなくなります。出力する数字を2進数(4ビット)で出力するため、必要な端子数を抑えられます。そのほかにもLEDの電源はドライバICの電源を取るため、電流について考慮する必要がなくなります。

まとめると以下のようなメリットがあります。

・プログラムで数字の形状を準備する必要がない

・必要な入力端子数を抑えられる

・7セグLEDの電流制御は考えなくていい

今回、使用する7セグメントドライバICは東芝製のTC4511BPです。下図にように16ピンあるICとなっており、1,2,6,7ピンがArduinoから受けとる2進数の入力端子です。BCDの入力に関係なく、全出力をHかLのどちらかにするLT、BIが3,4ピンにあり、4本の入力線をコントロールするLEもあります。7セグLEDの点灯には9~15ピンの出力を対応する7セグLEDのピンと接続します。

下表の真理値表から今回の回路では、LEはL、LT、BIはHにしています。

1桁の7セグLEDを表示する

まず、以前に使った1桁(0~9)までを表示する7セグに順番に0から9までの数字を表示させ、以降繰り返す回路を作成しました。

回路図

回路図は以下となります。

この回路作成で使用した装置及び部品は下表をご覧ください。

Arduinoマイコン搭載の小型コンピュータ
ブレッドボード抵抗・ジャンパー線などを使って回路を作る基板
7セグLED0~9の数字を表示できるディスプレイ
7セグメントドライバIC(TC4511BP)7セグLEDを制御するドライバIC
抵抗510Ω×8電圧を下げる端子
ジャンパー線電気を中継する線

併せて以下の図もご参考ください。

※Frizzingに7セグメントドライバICが無かったので形状が近い(ICL3232)を使っていますが、実際とは異なります。

プログラムコード

プログラムコードは以下をご覧ください。

const int PIN_BIT[] = {2,3,4,5};//表示する数字を2進数で送り出す信号の出力ピン

//7セグ表示の値
const int disp[] = {0,1,2,3,4,5,6,7,8,9};

void setup() {
  // put your setup code here, to run once:

  //ピンの設定
  for(int i = 0; i < 4; i++){
   pinMode(PIN_BIT[i],OUTPUT);
  }
}

void loop() {
  // put your main code here, to run repeatedly:

  int cnt = 0;

  while(cnt < 10){
    for(int i = 0;i < 4; i++){
      digitalWrite(PIN_BIT[i],disp[cnt] & (0x01 << i));
    }
     delay(1000);
    cnt++;
  }
}

実行結果

実行結果は以下をご覧ください。

4桁の7セグLEDを表示する

次に4桁の数字を表示できる7セグに日付(この時は8月29日)を表示する回路を作成しました。ただし、日付は予めプログラムで指定する仕様となっています。

4桁の7セグLED

今回使用した4桁の7セグLEDは、カソードコモンのOSL40391-LWです。

手前に8ピンあり、後ろに8ピンついています。Aが14ピン、Bが16ピン、Cが13ピン、Dが3ピン、Eが5ピン、Fが11ピン、Gが15ピン、ドットが7ピンとなっています。また4桁目(DIG1)が1ピン、3桁目(DIG2)が2ピン、2桁目(DIG3)が6ピン、1桁目(DIG4)が8ピンです。ダイナミック制御で表示するためにこれら桁のピンを個別に切り替えます。

回路図

作成した回路は以下となります。

使った部品は下表をご覧ください。

Arduinoマイコン搭載の小型コンピュータ
ブレッドボード抵抗・ジャンパー線などを使って回路を作る基板
7セグLED0~9の数字を表示できるディスプレイ
7セグメントドライバIC(TC4511BP)7セグLEDを制御するドライバIC
抵抗510Ω×8電圧を下げる端子
ジャンパー線電気を中継する線

プログラムコード

プログラムコードは以下のようになります。

const int PIN_BIT[] = {2,3,4,5};//表示する数字を2進数で送り出す信号の出力ピン
const int PIN_DIG[] = {7,8,9,10};//表示する桁数のピン

//7セグ表示の値
const int disp[] = {0,8,2,9};

void setup() {
  // put your setup code here, to run once:

  //ピンの設定
  for(int i = 0; i < 4; i++){
   pinMode(PIN_BIT[i],OUTPUT);
  }

    for(int i = 0; i < 4; i++){
   pinMode(PIN_DIG[i],OUTPUT);
   digitalWrite(PIN_DIG[i],HIGH);
  }
}

void loop() {
  // put your main code here, to run repeatedly:

  for(int j = 0; j < 4; j++){
    digitalWrite(PIN_DIG[j],LOW);
    for(int i = 0;i < 4; i++){
      digitalWrite(PIN_BIT[i],disp[j] & (0x01 << i));
    } 
    delay(5);
    digitalWrite(PIN_DIG[j],HIGH);
  }
}

実行結果

実行結果は以下の動画をご覧ください。

まとめ

今回は、7セグメントドライバICを使って7セグLEDを表示する方法をご紹介しました。7セグメントドライバICを使うと入力端子の節約や電流制御を意識しなくて済むなどのメリットがありますが、一方で使用する部品数が多くなるデメリットがあります。しかし、デメリットに比べてメリットの方が大きいので、使う価値はあります。入力が2進数になるものの、その他は今までとは変わらないので比較的簡単に扱える電子部品となっていますので、7セグLEDを点灯させる時にはこの電子部品を検討してみてもいいでしょう。

参考書籍

Arduino電子工作