7セグメントディスプレイ(1桁)

このエントリーをはてなブックマークに追加

 

 今回は7セグメントディスプレイ(ウィキペディア)1桁の制御です。7セグメントディスプレイとはデジタル時計などでよく使われている数字を表現するディスプレイです。一般的に8個の発光ダイオード(LED)がついているだけです。
 7セグメントディスプレイでは沢山のIOを使用するため、今まで使用していた「PIC12F1822」では制御できません。そこで今回は「PIC16F1829」を使用します。基本的な使い方はPIC12F1822とそれほど変わりません。
 1桁の7セグメントディスプレイの制御とは、簡単に言ってしまうとIOの制御です。どの部分の発光ダイオード(LED)を点灯・消灯させるかだけですので、プログラム自体は非常に簡単です。

 

1.今回使用するPICについて

 今回使用するPICは「PIC16F1829」です。

 

2.回路

2.1 電子回路図

 

 

2.2 電子回路の写真

 

 

2.3 回路説明

2.3.1 今回使用する7セグメントディスプレイ

 今回使用する7セグメントディスプレイはアノードコモンタイプです。PICからローの信号を出力すると対応した発光ダイオード(LED)が点灯します。またアノードコモンタイプは電源に接続する必要があります。

注:アノードコモンとカソードコモンがあり、接続および制御の方法が変わるので注意してください。

 

2.3.2 PICと7セグメントディスプレイとの接続関係

 PICと7セグメントディスプレイは以下のように接続しています。

PIC 7セグメントディスプレイ
RA0 g
RA1 f
RA2 a
RC0 b
RC3 e
RC6 d
RC7 c
RB7 dp

電源:PICと7セグメントディスプレイのアノードコモンに5[V]電源を接続

 

3.プログラム

3.1 初期設定

OSCCON = 0b01110000 ;    // 内部クロック8MHz

ANSELA = 0b00000000 ;    // すべてデジタルI/Oに割当てる
TRISA  = 0b00001000 ;    // ピンは全て出力に割当てる(RA3は入力のみとなる)
PORTA  = 0b00000000 ;    // 出力ピンの初期化(全てLOWにする)

ANSELB = 0b00000000 ;    // すべてデジタルI/Oに割当てる
TRISB  = 0b00000000 ;    // ピンは全て出力に割当てる
PORTB  = 0b00000000 ;    // 出力ピンの初期化(全てLOWにする)

ANSELC = 0b00000000 ;    // すべてデジタルI/Oに割当てる
TRISC  = 0b00000000 ;    // ピンは全て出力に割当てる
PORTC  = 0b00000000 ;    // 出力ピンの初期化(全てLOWにする)

 PIC16F1829でも初期設定は基本的にPIC12F1822と同様です。ただ、ピンの数が多くなっているため、設定する量が増えています。

 内部クロックは8[MHz]に設定します。
OSCCON = 0b01110000;

 ポートAグループの設定をします。すべてのポートをデジタル出力に設定し、出力をLowにします。ただし、RA3は入力専用なので入力に設定しています。
ANSELA = 0b00000000;
TRISA = 0b00001000;
PORTA = 0b00000000;

 ポートBグループの設定をします。すべてのポートをデジタル出力に設定し、出力をLowにします。
ANSELB = 0b00000000;
TRISB = 0b00000000;
PORTB = 0b00000000;

 ポートCグループの設定をします。すべてのポートをデジタル出力に設定し、出力をLowにします
ANSELC = 0b00000000;
TRISC = 0b00000000;
PORTC = 0b00000000;

 

3.2 IOの組み合わせ設定

 7セグメントディスプレイのピンと対応するように、それぞれの組み合わせを設定します。

 

3.2.1 7セグメントディスプレイのそれぞれ1つ

 7セグメントディスプレイの発光ダイオード(LED)それぞれ1つだけを点灯させる組み合わせです。

PIC 7セグメントディスプレイ
0b00000001 a ピン
0b00000010 b ピン
0b00000100 c ピン
0b00001000 d ピン
0b00010000 e ピン
0b00100000 f ピン
0b01000000 g ピン
0b10000000 dp ピン
3.2.2 7セグメントディスプレイで数字の表現

 7セグメントディスプレイで数字を表現するための組み合わせです。同時に複数の発光ダイオード(LED)を点灯させます。例えば、0を表現したい場合、中心とドット以外を光らせればいいので、0b00111111となります。

 

PIC 7セグメントディスプレイ
0b00111111 0
0b00000110 1
0b01011011 2
0b01001111 3
0b01100110 4
0b01101101 5
0b01111101 6
0b00100111 7
 0b01111111  8
 0b01100111  9

 

3.3 7セグメントディスプレイの制御

 「3.2.2 7セグメントディスプレイで数字の表現」 で作成した組み合わせを利用します。0の場合、0b00111111となります。今回はアノードコモンタイプなので、PICからの出力はローで点灯です。なので、1が入っている場合はローを出力、0の場合はハイを出力するようにします。
 例えば7セグメントディスプレイの「a」を光らせるかの判定は以下のようになります。

if( (対象のビットデータ & 0x01) != 0 )
    RA2 = 0;
else
    RA2 = 1;

 1ビット目が1の場合、RA2に対してローを出力し点灯させます。1ビット目が0の場合、ハイを出力し消灯させます。
補足:対象のビットデータとは、「0」の場合「0b00111111」です。

 以上の判定を7セグメントディスプレイに接続しているピン全てに行います。ここでは長くなるので省略しますので、プログラムを見て確認してください。

 

3.4 ソースコード

 プログラムの全文を掲載します。

  プログラム

<注意>
本サイトの注意事項を確認してください。
ソースコードや回路図などを使用する場合、上記注意とともに、自己責任でお願いします。

    

 

4.動作確認

 動画撮影後に気づいたのですが、9を点灯時に下の発光ダイオード(LED)を点灯させていませんでした。もしプログラムを利用する場合、その部分を修正して使ってください。

 

<更新履歴>

新規作成:2015年6月15日

 

メニューへ          次へ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)