micro:bit で7セグメントLEDを使おう(2桁プログラム詳細)

プログラミング

その1その2と2回に渡って紹介してきた7セグメントLEDですが2桁表示のプログラムについて軽く流しました。

そこで今回はそのプログラムについて詳細に紹介していきます。

数字表示用関数を作る

まずは数字表示用の関数を作成します。

これをしておかないと数字を表示するためにどの外部IOをどうするか、都度考えていかなければならずプログラムが冗長になってしまいます。

micro:bit で7セグメントLEDを使おう(その2)」で紹介していた10を表示させるために必要な「0」を表示する関数と「1」を表示する関数を作成します。

使用する7セグメントLEDはカソードコモンなのでGだけ消灯した外部IOの状態にします。

「0」を表示する関数

同様に「1」を表示するため、BとCのみ点灯した外部IOの状態にします。

「1」を表示する関数

これで数字表示用関数を作成できました。

0~9まで作りたい方は同様に関数を作ってみましょう。

micro:bit(マイクロビット)

価格:2,530円
(2020/2/23 07:01時点)
感想(0件)

ソウテン uxcell ジャンパーワイヤ リボン ケーブル Pi Pic ブレッドボード メスからオスへ 1P DIY 10cm 15Pcs 20営業日発送

価格:894円
(2020/4/22 04:15時点)
感想(0件)

<7セグ 7セグメントLED通販・販売><LG3622BH アノードコモン 7セグ2桁 赤>1個入<led-903>

価格:73円
(2020/4/22 04:08時点)
感想(0件)

600個 30値 * 20個 1%1/4 W 抵抗 セット diy 金属皮膜 固定 抵抗器 キット 使用色付き 金属皮膜抵抗器 (10オーム〜1 Mオーム)

価格:712円
(2020/4/7 04:00時点)
感想(0件)

桁表示用関数を作成する

数字が作成できたので次は桁表示用の関数を作成します。

カソードコモンなので10の位を表示させるにはDIG1側のカソードを0V、DIG2側のカソードを3Vにします。

10の位を表示する関数

1の位を表示させるには反対にします。

1の位を表示する関数

これで桁表示用関数を作成できました。

桁数を増やす場合にはそれぞれ表示させたい桁の共通を通電するように組む事でできます。

数字×桁表示用関数を作る

数字表示用関数と桁表示用関数を作成したのでこれらを組み合わせた数字×桁表示用の関数を作成します。

関数を作成する前に10の位と1の位を格納できる変数を作成しておきます。

10の位と1の位を格納する変数

ではdig1(10の位)の数字を表示させる関数を作成します。

10の位の値を表示させる関数

プログラムの内容はまずdig1(10の位)を表示できるように桁表示用関数を呼び出し、10の位の値に合った数字表示用関数を呼び出します。

これで変数「10の位」に格納された値をdig1へ表示させる事ができます。

同様にdig2(1の位)の数字を表示させる関数も作成します。

1の位の値を表示させる関数

これで表示させたい値を桁で分解して数字×桁表示用関数を呼び出すだけで表示させる事ができるようになりました。

3桁以上の場合にも同様にプログラムを組む事でできます。

桁分解関数を作る

桁事に表示させる関数を作成したので桁分解させる関数を作成します。

関数を作成する前に表示させる値を格納する変数を作成します。

値を格納する変数

桁を分解するには10で割ったり割ったあまりを使ったりして各桁の値として先に作っておいた桁毎の変数に格納します。

値を桁に分解する関数

これで値を桁毎に分解できるようになりました。

ループ処理を作る

必要な関数はすべて作成できたので後はこれらを呼び出す事で2桁以上の7セグメントLEDに値を表示させる事ができます。

ループ処理では繰り返す度に桁を変更する必要があるので表示させる桁を保持する変数が必要になります。

なのでまずは桁を保持する変数を作成します。

桁を格納する変数

これで全ての変数もそろいました。

ループ処理では桁分解、現在の桁部分を表示、現在の桁を移動の3つの処理を行います。

ループ処理のプログラム

これで値が変わればそれに合わせて7セグメントLEDの表示が変わるようにプログラムを組む事ができました。

初期処理を作る

10を表示するプログラムは値を変更していないので初期処理で値を格納しています。

初期処理のプログラム

値の格納と同時に変数の初期化も行っています。

初期処理は変数の初期化だけ行い、上記で作成したループ処理とは別のループ処理にて値を変更すると変更の度に7セグメントLEDの表示も変更すると思います。

まとめ

関数を使ったのでそれぞれのプログラムは小さく読みやすいようになっていると思います。

もしかしたらもっと短くできるかもしれませんがそれは各々好きなようにやったら良いと思います。

7セグメントLEDを使った紹介記事はこれにて完結です。

コメント

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