しずかなかずしコンテンツへスキップしずかなかずし前から読んでも後ろから読んでも...。2019年3月24日7セグLEDとは?IchigoJamは、プログラミング学習用の手のひらパソコンです。手のひらサイズの小さな基板でBASICのプログラミングの学習ができるすぐれものです。本日は、この手のひらパソコンに「7セグLED」をつないで、16進数の学習をしてみたいと思います。「7セグLED」をというのは、7つのLEDがひとつのボックスに格納された電子部品です。7つあるLEDのうちどれとどれを光らせるかで、0〜9までの数字や、ABCDEFくらいまでのアルファベットを表現できる、便利な表示装置です。コンピュータが動き出した頃の初期には、いや、コンピューター以前の歴史があるかも知れません。このたった7つの独立した部品をそれぞれ個別に光らせることで、数字を表現しようなどと考えた人は、賢い人ですね。写真では、7個の縦棒・横棒の他に右下に丸いポッチがありまして、ここも個別に光らせることができます。8個のLEDが付いていることになります。7セグLEDって言います、この部品。この「8」という数字。コンピュータの内部を語る上では、マジックワード。OUT5に示したLEDを光らせればいい訳です。本日、学習に使用する7セグLED7セグLEDで”4′′を表現IchigoJamに電子部品をつなぐ部品をつなぐには、ブレッドボードってのを使ってみました。そこに部品を並べます。IchigoJamと、LEDの間には適当に抵抗を噛ませています。ポイントは、結線ですね。IchigoJamの端子の仕様を見てみましょう。KUNINO)さんという方がわかりやすいピン配置の説明をしてくださっていますので、こちらを参考にします。IchigoJamのピン配列表OUT端子やIN端子は設定によって、入出力の方向も変えることができますが、今回は、7個のLEDを光らせるだけなので、OUT1からOUT7を使います。OUT7は基板に付いている赤い小さなLEDを光らるピンと共用のようです。キーボードから以下のように打つと、基板のLEDが光りますが、この時、OUT7のピンもONになります。1さて、OUT1〜OUT7をLEDにつなぐときは、どのようにつないでも構いません。後程算出する、16進数の”表示用コード”が変わってくるだけです。つなぎ方が違っても、ソフトで光らせるパターンを簡単に変更ができる、というのはひとつのポイントです。昔の人は「ハードウェア」、「ソフトウェア」と旨い事言ったものです。今回はブレッドボードなので結線を間違えてもすぐに抜き差しして、入れ替えることができます。本物の電気製品であれば、ハンダゴテ(古い!)で7セグLEDを本体とつないでしまいますよね。すると結線自体はすぐに変更できないから、ハードウェア(固い。変えられないってこと)と呼びます。結線を間違えても、後でプログラムで数字を変更できます。光らせるLEDの組み合わせを後からいくらでも変更可能。これがソフトウェア(柔らかい。変えられるってこと)の仕事。いう訳で、私は、以下の図のように適当に結線してしまいました。BASICには、”OUT”というコマンドが用意されています。数字2のように使います。3,0′′で消えます。IchigoJamで7セグLEDの一つを表示。0を複数個並べて書けば、ご希望の文字を表示することができることがわかりました。6,1と、順番に実行すれば、”4′′が表示されます。いえ、そうではありません。”4”という一つの文字を表示するのに4行もプログラムを書かないとならないのは、格好が悪いです。0と実行すると今まで光っていたものがすべて消えます。3,0′′としないと消せないのかと思います。実は、OUTコマンドは、数字一つだけ指定して実行することができます。3と実行してみましょう。あれ?LEDが2つ点灯します。一体、何が起こっているのでしょうか??まずは”2進数”の登場OUTコマンドは、数字が一つだけ指定すると、OUT1〜8のピンがONになる「組み合わせ」を指定していることになります。OUTの1と2をOn(光らせる)したい場合は、以下のようなオレンジ色の部分がを示したいと思います。この図をちょっと数字で表してみます。8の桁が0、つぎの7の桁も0、。2の桁が1、1の桁が1になっていればよいので、00000011という数字で表現できます。これがOUT端子の”2進数”表現という事になります。実は、これ、普通お金の計算などで使う数字でいうと3になります。10進数でいうと”3′′です。2進数は、0と1だけで表現された数字なので、00000001=100000010=200000011=3...という感じになります(=の後が10進数の表現)。3というコマンドを実行すると、OUT1とOUT2の端子につながった、”2つ”のLEDが光った、ということになります。0′′というコマンドは何を意味していたのでしょう?これは2進数で言うと、00000000という番号を指定したことになります。ONになるLEDはひとつもない状態にしろ、ということで、7セグLEDのすべてのLEDが消灯する結果になります。BASICでは、2進数は、”"とい記号とを数字の前につけることで、表現します。00000011とコマンドを実行すると、OUT1とOUT2の端子につながった、2つのLEDが同時に点灯します。最初の”4′′を表示するためには、私の結線方法だと、OUT6,OUT5,OUT4,OUT3につながったLEDを同時に光らせればいいので、以下のパターンとなります。オレンジ色のところを1にした2進数表現は00111100なので、以下のコマンドを実行するとめでたく、文字”4′′が現れることになります。00111100いよいよ"16進数"の登場16進数というのは、1,2,3,4,...と続いて、16個目の数字でひと桁、繰り上がるような数の表現方法です。残念ながら数字は9までしかないので、9以降は、A,B,C,D,E,Fの6文字を使って表現するものです。これが2進数と非常に相性がよく、順番にリストにしてみますと、以下のように4桁の0,1の2進数が、ちょうど16進数の1桁分に相当します。8桁の2進数があれば、単純に、機械的に、2桁の16進数にマッピングすることができます。00111100は7セグLEDで”4′′を表示させるためのコマンドでした。この2進数を、上位4桁と下位4桁に分けて、それぞれ上のテーブルの16進数で置き換えます。3、下位4桁1100→C。16進数は3Cになります。#3Cは、先ほど同様、7セグLEDで”4′′を表現させることができます。BASICの場合、16進数は頭に#記号を付けます。同様に、7セグLEDで表示させるパターンを16進数のコードで表してみましょう。わかりやすいように表にしてみました。OUT4端子につながったLEDです。上記の表で求めたように、16進数の表現で言うと#78です。#78というコマンドを実行すると、7セグLEDで”7′′が現れます。この表の、「基板に送る16進数」という列に書かれている#〇〇の16進数が、7セグLEDをどう光らせるかを表す「表示用のコード」になります。先ほど、結線をするときに、どの端子にどのLEDをつなぐかは適当でいい、と言いました。要は、実際の結線に合せて、この表示用のコードを作りなおせば、どんな結線にしておいてもソフトを書き換えれば表示可能なのです。この柔軟性こそ、まさにソフトウェア。プログラミングで実現することなのです。ここからプログラミングするさて、以上が下準備です。ここからが本当のプログラミングです。BASICには「配列」という変数の列が使えます。配列に入っている数字は、例えば、以下のように読み出せます。[5]これで、配列の5番目に入っている値が、IchigoJamの画面に表示されます。配列の7番目に、#78を入れておくことで、プログラムはこんな風に書けます。[7]16進数の難しい表示コードを覚えていなくても、これならLEDに7を表示する事が一目瞭然です。ソフトウェアって素晴らしいです。これが出来るようにするために、プログラムの最初に配列を”初期化”して置きます。以下のコードをプログラムの一番最初に実行します。LET[0],#7B,#30,#67,#76,#3C,#5E,#5F,#78,#7F,#7C最初の10はプログラムの行番号です。[3]と打てば、7セグLEDに”3′′が現れます。ここでプログラムの初心者が混乱します。[0]と打つことの違いがわからなくなります。わかりますか?わかった人は混乱していない人です。“0”という文字を表示することです。タイマーのプログラムを作るタイマーと言ってもひとけたの数字しか表現できないので、1秒毎に数字がカウントアップして9まで言ったらゼロに戻るようなプログラムです。[I]でその数字の16進数コードを7セグLEDに送ります。それをGotoでぐるぐる回すだけ。ほんとにそれだけです笑。