1桁7セグメントLEDを表示させてみる。~C言語編~

1桁7セグメントLEDを表示させてみる。~C言語編~

はじめに

7セグメントLEDをRaspberryPiを使って表示させていきます。
今回使用するのは1桁です。0~9の数字を表示することが目標です。
以前力業で点灯させましたが、今回は入力した数字に対応して点灯するようにプログラムを作成します。

Python編はこちら。

1桁7セグメントLEDを表示させてみる。~python編~
1桁7セグメントLEDを表示させてみる。~python編~はじめに7セグメントLEDをRaspberryPiを使って表示させていきます。今回使用するのは1桁です。0~9の数字を表示することが目標です。以前力業で点灯させまし...


用意するもの
Raspberry Pi Raspberry Pi 4
1桁7セグメントLED     OSL10561-LRA
抵抗100Ω抵抗
ジャンパーケーブルジャンパーケーブル     
ブレッドボードブレッドボード


1桁7セグメントLEDはカソードコモンの物を使用します。
抵抗については8本使用します。

素子の接続


7セグメントのピンは以下のようになっています。
データシートの抜粋です。

Raspberry Piと7セグメントのピンの対応は次のようにしました。
7セグの8番は使っていません。

7セグピンGPIO点灯箇所
124E
225D
3GND
412C
516DP
621B
720A
8
923F
1018G


GPIOの出力をHIGHにすることで、対応する箇所が点灯します。
数字を点灯させるにはHIGHLOWの組み合わせをうまくすれば表現できます。
対応は以下の表のとおりです。

数字GPIO24GPIO25GPIO12GPIO16GPIO21GPIO20GPIO23GPIO18
011101110
100101000
211001101
301101101
400101011
501100111
611100111
700101100
811101111
901101111



プログラムを作成する

まずは、おまじない。

#include <stdio.h>
#include <time.h>
#include <wiringPi.h>
#include <math.h>


続いてメインの処理です。

int main()
{
    int gpionum[8] = {24,25,12,16,21,20,23,18}; //使用するGPIO番号

    //使用するGPIO番号に対応したHIGHLOWを格納。
    int ledhl[10][8] = { {1,1,1,0,1,1,1,0} , //「0」の時  
                         {0,0,1,0,1,0,0,0} , //「1」の時
                         {1,1,0,0,1,1,0,1} , //「2」の時
                         {0,1,1,0,1,1,0,1} , //「3」の時
                         {0.0,1,0,1,0,1,1} , //「4」の時
                         {0,1,1,0,0,1,1,1} , //「5」の時
                         {1,1,1,0,0,1,1,1} , //「6」の時
                         {0,0,1,0,1,1,0,0} , //「7」の時
                         {1,1,1,0,1,1,1,1} , //「8」の時
                         {0,1,1,0,1,1,1,1} }; //「9」の時


gpionum[8]は使用するGPIO番号を格納していきます。
光らせるセグは8個あるので[8]としています。

ledhl[10][8]はGPIOの対応表を参考にgpionum[8]と対応させます。
[10]は光らす数字の数、[8]はセグの数です。

HIGH、LOWと表現していますが、HIGH=1、LOW=0です。
どちらを使ってもOKです。

    
    wiringPiSetupGpio(); //pinをGPIO番号選択に
    
    //①使用するgpioのモードをoutputに出力をLOWに
    for ( int i = 0 ; i < 8 ; i++){ 
        pinMode(gpionum[i] , OUTPUT);
        digitalWrite(gpionum[i] , LOW);
    }
    
    printf("表示したい数字を入力");

    int num;
    scanf("%d" , &num); //②表示する数字を外部入力
    
    //③入力された数字に応じてGPIOのHIGHLOWを変更
    for ( int i = 0 ; i < 8 ; i++){
        digitalWrite(gpionum[i] , ledhl[num][i]);
    }
    
    return 0;    
}

GPIOのモードをすべてOUTPUTに変更します。for分で簡単にできます。(①)
外部入力で表示したい数字0~9を受け付けます。入力された数字がnumに格納されます(②)
入力された数字に対応したGPIOの出力を変更します。こちらもfor分で繰り返し処理で簡単にできます。(③)

gcc -o 7sec_c.c 7seg_c -lwiringPi
./7seg_c
表示したい数字を入力

コンパイルして実行すると入力待ちになるので0~9の数字を入力します。
エラー処理を入れていないので、0~9以外を入れたときの動作はわかりません。
入力した数字が点灯したら成功です。

終わりに

7セグメントの数字点灯をC言語で作成しました。
思っていたよりも簡単で手動で7セグメントを表示するよりも簡単なのでは・・・?と思ったほどでした。
自動で表示させてみたい方はお試しください。

今後は4連7segなども使って自作の温度計などを作っていきたいと考えてます。

タイトルとURLをコピーしました