3桁7セグメントLED表示器と押しボタンスイッチを組み合わせて、数取り器やストップウォッチの実験をしました。
押しボタンスイッチを1回押すたびに数字が1ずつ増えていくプログラムです。回路図は下記の通りです。PB0〜GND間に押しボタンスイッチをつなぎます。

ブレッドボード上の配線図と試作写真を下に掲げます。
![]() |
![]() |
プログラムは下記の通りです。メインプログラム内でスイッチの状態を監視し、スイッチが押されて「Pinb.0=0」になったらサブルーチン「Switch」へ飛んで変数「N0」の値を1増やします。前項「7セグメントLEDの点灯 (その1)」ではLEDの各桁を10mSずつ点灯していましたが、至近距離で見ると若干ちらつくようなので、今回は5mSごとに点灯する桁を切り替えるようにしました。
プログラムファイル 7seg2a.bas
| 1 | $regfile = "at26def.dat" | ATtiny26Lを使用する。 | |
| 2 | $crystal = 1000000 | クロック周波数を1MHzに設定。 | |
| 3 | |||
| 4 | Config Porta = Output | ポートAを出力に設定する。 | |
| 5 | Config Portb = &B11111110 | PB0を入力に、PB1〜PB7を出力に設定する。 | |
| 6 | Config Debounce = 1 | デバウンス時間を1mSとする。 | |
| 7 | Declare Sub Switch | サブルーチン「Switch」を使用する。 | |
| 8 | Declare Sub Lednumber | サブルーチン「Lednumber」を使用する。 | |
| 9 | Dim N0 As Word | ワード型変数「N0」を使用する | |
| 10 | Dim N1 As Word | ワード型変数「N1」を使用する。 | |
| 11 | Dim N2 As Word | ワード型変数「N2」を使用する。 | |
| 12 | Dim N3 As Word | ワード型変数「N3」を使用する。 | |
| 13 | Dim M As Word | ワード型変数「M」を使用する。 | |
| 14 | Dim LED(10) As Byte | バイト型変数「LED」(値は10個)を使用する。 | |
| 15 | |||
| 16 | Led(1) = 63 | 変数「LED」の1番目の値は「63」(「0」の表示用)。 | |
| 17 | Led(2) = 6 | 変数「LED」の2番目の値は「6」(「1」の表示用)。 | |
| 18 | Led(3) = 91 | 変数「LED」の3番目の値は「91」(「2」の表示用)。 | |
| 19 | Led(4) = 79 | 変数「LED」の4番目の値は「79」(「3」の表示用)。 | |
| 20 | Led(5) = 102 | 変数「LED」の5番目の値は「102」(「4」の表示用)。 | |
| 21 | Led(6) = 109 | 変数「LED」の6番目の値は「109」(「5」の表示用)。 | |
| 22 | Led(7) = 125 | 変数「LED」の7番目の値は「125」(「6」の表示用)。 | |
| 23 | Led(8) = 7 | 変数「LED」の8番目の値は「7」(「7」の表示用)。 | |
| 24 | Led(9) = 127 | 変数「LED」の9番目の値は「127」(「8」の表示用)。 | |
| 25 | Led(10) = 111 | 変数「LED」の10番目の値は「111」(「9」の表示用)。 | |
| 26 | Portb = 1 | PB0をプルアップする。 | |
| 27 | |||
| 28 | Do | Doループここから。 | |
| 29 | Debounce Pinb.0 , 0 , Switch , Sub | 「Pinb.0=0」になったらサブルーチン「Switch」へ。 | |
| 30 | Call Lednumber | サブルーチン「Lednumber」を実行する。 | |
| 31 | Portb = 17 | PB0とPB4を「1」にする。DIG1が点灯。 | |
| 32 | Porta = Led(n1) | 変数「LED」の「N1」番目の値をポートAに出力。 | |
| 33 | Waitms 5 | 5ミリ秒間そのまま。 | |
| 34 | If N2 = 1 And N3 = 1 Then | 条件分岐1。「N2=1」かつ「N3=1」ならば、 | |
| 35 | Portb = 0 | ポートBの出力を「0」にする。 | |
| 36 | Else | 「N2≠1」あるいは「N3≠1」ならば、 | |
| 37 | Portb = 33 | PB0とPB5を「1」にする。DIG2が点灯。 | |
| 38 | Porta = Led(n2) | 変数「LED」の「N2」番目の値をポートAに出力。 | |
| 39 | End If | 条件分岐1ここまで。 | |
| 40 | Waitms 5 | 5ミリ秒間そのまま。 | |
| 41 | If N3 = 1 Then | 条件分岐2。「N3=1」ならば、 | |
| 42 | Portb = 0 | ポートBの出力を「0」にする。 | |
| 43 | Else | 「N3≠1」ならば、 | |
| 44 | Portb = 65 | PB0とPB6を「1」にする。DIG3が点灯。 | |
| 45 | Porta = Led(n3) | 変数「LED」の「N3」番目の値をポートAに出力。 | |
| 46 | End If | 条件分岐2ここまで。 | |
| 47 | Waitms 5 | 5ミリ秒間そのまま。 | |
| 48 | Loop | Doループここまで。 | |
| 49 | |||
| 50 | End | メインプログラム終わり。 | |
| 51 | |||
| 52 | Sub Switch | サブルーチン「Switch」ここから。 | |
| 53 | Incr N0 | 変数「N0」の値を1増やす。 | |
| 54 | If N0 > 999 Then N0 = 0 | 「N0>999」になったら「N0=0」にする。 | |
| 55 | End Sub | サブルーチン「Switch」ここまで。 | |
| 56 | |||
| 57 | Sub Lednumber | サブルーチン「Lednumber」ここから。 | |
| 58 | N3 = N0 ⁄ 100 | 「N0÷100」の商(整数部分)を「N3」とする。 | |
| 59 | M = N0 Mod 100 | 「N0÷100」の余りを「M」とする。 | |
| 60 | N2 = M ⁄ 10 | 「M÷10」の商(整数部分)を「N2」とする。 | |
| 61 | N1 = M Mod 10 | 「M÷10」の余りを「N1」とする。 | |
| 62 | N3 = N3 + 1 | 「N3+1」を新たな「N3」とする。 | |
| 63 | N2 = N2 + 1 | 「N2+1」を新たな「N2」とする。 | |
| 64 | N1 = N1 + 1 | 「N1+1」を新たな「N1」とする。 | |
| 65 | End Sub | サブルーチン「Lednumber」ここまで。 |
ポートBはPB0に入力スイッチ、PB4〜PB6にLED表示器がつながっています。よって5行目「Config Portb = &B11111110」でPB0を入力に、その他を出力に設定します。26行目「Portb= 1」でPB0をプルアップします。この場所にプルアップ命令を書いたのは、最初の数字を「0」にするためです。これを書かないと初期状態で「1」が表示されます。
Doループ内ではPB4, PB5, PB6を順に「1」にして表示桁を切り替えますが、このときスイッチがつながっているPB0も同時に「1」にしておかないとスイッチの操作に正しく反応しません。したがって、31, 33, 44行目はそれぞれ「Portb=17」,「Portb=33」,「Portb=65」と、先のプログラムよりも数字がひとつ大きくなっています。
馬鹿のひとつ覚えと言われそうですが、ロータリーエンコーダで数を増やしたり減らしたりするプログラムを作りました。右へ1クリック回すたびに数字が1増え、左へ1クリック回すたびに数字が1減ります。回路図は下記の通りです。PB0, PB1, GNDにロータリーエンコーダをつなぎました。

プログラムは下記の通りです。基本的に上のプログラムと同じやり方なんですが、ロータリーエンコーダのスイッチが短時間で切り替わるため、表示桁の切り替え時間を5mSにすると取りこぼしが多くなります。なので1mSごとに切り替えることにしました。ただ、それぞれに「Waitms 1」をつけるとDIG3 (最上位桁) だけが他の桁より明るくなったので、この部分には「Wait」命令がありません。サブルーチン「Lednumber」の処理にかかる時間が無視できなくなるためだと思います。それと、変数「N0」の範囲指定を簡単にするため、これだけインテジャー型で定義しました。
プログラムファイル 7seg2b.bas
| 1 | $regfile = "at26def.dat" | ATtiny26Lを使用する。 | |
| 2 | $crystal = 1000000 | クロック周波数を1MHzに設定。 | |
| 3 | |||
| 4 | Config Porta = Output | ポートAを出力に設定する。 | |
| 5 | Config Portb = &B11111100 | PB0, PB1を入力に、PB2〜PB7を出力に設定する。 | |
| 6 | Config Debounce = 1 | デバウンス時間を1mSとする。 | |
| 7 | Declare Sub Encode | サブルーチン「Encode」を使用する。 | |
| 8 | Declare Sub Lednumber | サブルーチン「Lednumber」を使用する。 | |
| 9 | Dim N0 As Integer | インテジャー型変数「N0」を使用する | |
| 10 | Dim N1 As Word | ワード型変数「N1」を使用する。 | |
| 11 | Dim N2 As Word | ワード型変数「N2」を使用する。 | |
| 12 | Dim N3 As Word | ワード型変数「N3」を使用する。 | |
| 13 | Dim M As Word | ワード型変数「M」を使用する。 | |
| 14 | Dim LED(10) As Byte | バイト型変数「LED」(値は10個)を使用する。 | |
| 15 | A Alias Pinb.0 | PB0入力を「A」という名前にする。 | |
| 16 | B Alias Pinb.1 | PB1入力を「B」という名前にする。 | |
| 17 | |||
| 18 | Led(1) = 63 | 変数「LED」の1番目の値は「63」(「0」の表示用)。 | |
| 19 | Led(2) = 6 | 変数「LED」の2番目の値は「6」(「1」の表示用)。 | |
| 20 | Led(3) = 91 | 変数「LED」の3番目の値は「91」(「2」の表示用)。 | |
| 21 | Led(4) = 79 | 変数「LED」の4番目の値は「79」(「3」の表示用)。 | |
| 22 | Led(5) = 102 | 変数「LED」の5番目の値は「102」(「4」の表示用)。 | |
| 23 | Led(6) = 109 | 変数「LED」の6番目の値は「109」(「5」の表示用)。 | |
| 24 | Led(7) = 125 | 変数「LED」の7番目の値は「125」(「6」の表示用)。 | |
| 25 | Led(8) = 7 | 変数「LED」の8番目の値は「7」(「7」の表示用)。 | |
| 26 | Led(9) = 127 | 変数「LED」の9番目の値は「127」(「8」の表示用)。 | |
| 27 | Led(10) = 111 | 変数「LED」の10番目の値は「111」(「9」の表示用)。 | |
| 28 | Portb = 3 | PB0, PB1をプルアップする。 | |
| 29 | |||
| 30 | Do | Doループここから。 | |
| 31 | Debounce A , 0 , Encode , Sub | 「A=0」になったらサブルーチン「Encode」へ。 | |
| 32 | Call Lednumber | サブルーチン「Lednumber」を実行する。 | |
| 33 | Portb = 19 | PB0, PB1, PB4を「1」にする。DIG1が点灯。 | |
| 34 | Porta = Led(n1) | 変数「LED」の「N1」番目の値をポートAに出力。 | |
| 35 | Waitms 1 | 1ミリ秒間そのまま。 | |
| 36 | If N2 = 1 And N3 = 1 Then | 条件分岐1。「N2=1」かつ「N3=1」ならば、 | |
| 37 | Portb = 3 | PB0, PB1を「1」にする。LED消灯。 | |
| 38 | Else | 「N2≠1」あるいは「N3≠1」ならば、 | |
| 39 | Portb = 35 | PB0, PB1, PB5を「1」にする。DIG2が点灯。 | |
| 40 | Porta = Led(n2) | 変数「LED」の「N2」番目の値をポートAに出力。 | |
| 41 | End If | 条件分岐1ここまで。 | |
| 42 | Waitms 1 | 1ミリ秒間そのまま。 | |
| 43 | If N3 = 1 Then | 条件分岐2。「N3=1」ならば、 | |
| 44 | Portb = 3 | PB0, PB1を「1」にする。LED消灯。 | |
| 45 | Else | 「N3≠1」ならば、 | |
| 46 | Portb = 67 | PB0, PB1, PB6を「1」にする。DIG3が点灯。 | |
| 47 | Porta = Led(n3) | 変数「LED」の「N3」番目の値をポートAに出力。 | |
| 48 | End If | 条件分岐2ここまで。 | |
| 49 | Loop | Doループここまで。 | |
| 50 | |||
| 51 | End | メインプログラム終わり。 | |
| 52 | |||
| 53 | Sub Encode | サブルーチン「Encode」ここから。 | |
| 54 | If B = 1 Then | 条件分岐3。「B=1」(右回転) ならば、 | |
| 55 | Incr N0 | 「N0」の値を1増やす。 | |
| 56 | If N0 > 999 Then N0 = 999 | 「N0」の最大値を「999」とする。 | |
| 57 | End If | 条件分岐3ここまで。 | |
| 58 | If B = 0 Then | 条件分岐4。「B=0」(左回転) ならば、 | |
| 59 | Decr N0 | 「N0」の値を1減らす。 | |
| 60 | If N0 < 0 Then N0 = 0 | 「N0」の最小値を「0」とする。 | |
| 61 | End If | 条件分岐4ここまで。 | |
| 62 | End Sub | サブルーチン「Encode」ここまで。 | |
| 63 | |||
| 64 | Sub Lednumber | サブルーチン「Lednumber」ここから。 | |
| 65 | N3 = N0 ⁄ 100 | 「N0÷100」の商(整数部分)を「N3」とする。 | |
| 66 | M = N0 Mod 100 | 「N0÷100」の余りを「M」とする。 | |
| 67 | N2 = M ⁄ 10 | 「M÷10」の商(整数部分)を「N2」とする。 | |
| 68 | N1 = M Mod 10 | 「M÷10」の余りを「N1」とする。 | |
| 69 | N3 = N3 + 1 | 「N3+1」を新たな「N3」とする。 | |
| 70 | N2 = N2 + 1 | 「N2+1」を新たな「N2」とする。 | |
| 71 | N1 = N1 + 1 | 「N1+1」を新たな「N1」とする。 | |
| 72 | End Sub | サブルーチン「Lednumber」ここまで。 |
99.9秒まで計測できるストップウォッチのプログラムです。スタート、ストップ、リセットの3つのスイッチが付いています。プログラムがスタートした時点では右端の「0」だけが表示されています。スタートスイッチを押すと、0.1秒刻みで数字がカウントアップします。ストップスイッチを押すとその時点でカウントが止まります。リセットスイッチを押すと表示が「0」に戻ります。
回路図を下に示します。PB0にスタートスイッチ (SW1)、PB1にストップスイッチ (SW2) をつなぎます。リセットスイッチ (SW3) はPB7 (ICのリセット端子) につなぎます。

![]()
プログラムは下記の通りです。
プログラムファイル 7seg2c.bas
| 1 | $regfile = "at26def.dat" | ATtiny26Lを使用する。 | |
| 2 | $crystal = 1000000 | クロック周波数を1MHzに設定。 | |
| 3 | |||
| 4 | Config Porta = Output | ポートAを出力に設定する。 | |
| 5 | Config Portb = &B11111100 | PB0, PB1を入力に、PB2〜PB7を出力に設定する。 | |
| 6 | Config Debounce = 1 | デバウンス時間を1mSとする。 | |
| 7 | Declare Sub Sw_start | サブルーチン「Sw_start」を使用する。 | |
| 8 | Declare Sub Sw_stop | サブルーチン「Sw_stop」を使用する。 | |
| 9 | Declare Sub Lednumber | サブルーチン「Lednumber」を使用する。 | |
| 10 | Dim N0 As Word | ワード型変数「N0」を使用する | |
| 11 | Dim N1 As Word | ワード型変数「N1」を使用する。 | |
| 12 | Dim N2 As Word | ワード型変数「N2」を使用する。 | |
| 13 | Dim N3 As Word | ワード型変数「N3」を使用する。 | |
| 14 | Dim M As Word | ワード型変数「M」を使用する。 | |
| 15 | Dim T As Byte | バイト型変数「T」を使用する。 | |
| 16 | Dim F As Bit | ビット型変数「F」を使用する。 | |
| 17 | Dim LED(10) As Byte | バイト型変数「LED」(値は10個)を使用する。 | |
| 18 | |||
| 19 | Led(1) = 63 | 変数「LED」の1番目の値は「63」(「0」の表示用)。 | |
| 20 | Led(2) = 6 | 変数「LED」の2番目の値は「6」(「1」の表示用)。 | |
| 21 | Led(3) = 91 | 変数「LED」の3番目の値は「91」(「2」の表示用)。 | |
| 22 | Led(4) = 79 | 変数「LED」の4番目の値は「79」(「3」の表示用)。 | |
| 23 | Led(5) = 102 | 変数「LED」の5番目の値は「102」(「4」の表示用)。 | |
| 24 | Led(6) = 109 | 変数「LED」の6番目の値は「109」(「5」の表示用)。 | |
| 25 | Led(7) = 125 | 変数「LED」の7番目の値は「125」(「6」の表示用)。 | |
| 26 | Led(8) = 7 | 変数「LED」の8番目の値は「7」(「7」の表示用)。 | |
| 27 | Led(9) = 127 | 変数「LED」の9番目の値は「127」(「8」の表示用)。 | |
| 28 | Led(10) = 111 | 変数「LED」の10番目の値は「111」(「9」の表示用)。 | |
| 29 | Portb = 3 | PB0, PB1をプルアップする。 | |
| 30 | |||
| 31 | Do | Doループここから。 | |
| 32 | Call Lednumber | サブルーチン「Lednumber」を実行する。 | |
| 33 | T = 0 | 変数「T」の値を「0」にする。 | |
| 34 | While T < 11 | While〜Wendループ。11回繰り返し。 | |
| 35 | Debounce Pinb.0, 0, Sw_start, Sub | 「Pinb.0=0」になったらサブルーチン「Sw_start」へ。 | |
| 36 | Debounce Pinb.1, 0, Sw_stop, Sub | 「Pinb.1=0」になったらサブルーチン「Sw_stop」へ。 | |
| 37 | Portb = 19 | PB0, PB1, PB4を「1」にする。DIG1が点灯。 | |
| 38 | Porta = Led(n1) | 変数「LED」の「N1」番目の値をポートAに出力。 | |
| 39 | Waitms 3 | 3ミリ秒間そのまま。 | |
| 40 | If N2 = 1 And N3 = 1 Then | 条件分岐1。「N2=1」かつ「N3=1」ならば、 | |
| 41 | Portb = 3 | PB0, PB1のみ「1」にする。LED消灯。 | |
| 42 | Else | 「N2≠1」あるいは「N3≠1」ならば、 | |
| 43 | Portb = 35 | PB0, PB1, PB5を「1」にする。DIG2が点灯。 | |
| 44 | Porta = Led(n2) + 128 | 変数「LED」の「N2」番目の値をポートAに出力。 | |
| 同時にDIG2の小数点も点灯する。 | |||
| 45 | End If | 条件分岐1ここまで。 | |
| 46 | Waitms 3 | 3ミリ秒間そのまま。 | |
| 47 | If N3 = 1 Then | 条件分岐2。「N3=1」ならば、 | |
| 48 | Portb = 3 | PB0, PB1のみ「1」にする。LED消灯。 | |
| 49 | Else | 「N3≠1」ならば、 | |
| 50 | Portb = 67 | PB0, PB1, PB6を「1」にする。DIG3が点灯。 | |
| 51 | Porta = Led(n3) | 変数「LED」の「N3」番目の値をポートAに出力。 | |
| 52 | End If | 条件分岐2ここまで。 | |
| 53 | Waitms 3 | 3ミリ秒間そのまま。 | |
| 54 | Incr T | 変数「T」の値を1増やす。 | |
| 55 | Wend | While〜Wendループここまで。34行目へ戻る。 | |
| 56 | If F = 1 Then | 条件分岐3。「F=1」ならば、 | |
| 57 | Incr N0 | 変数「N0」の値を1増やす。 | |
| 58 | If N0 > 999 Then N0 = 0 | 「N0 > 999」になったら「N0=0」にする。 | |
| 59 | End If | 条件分岐3ここまで。 | |
| 60 | Loop | Doループここまで。 | |
| 61 | |||
| 62 | End | メインプログラム終わり。 | |
| 63 | |||
| 64 | Sub Sw_start | サブルーチン「Sw_start」ここから。 | |
| 65 | F = 1 | 変数「F」の値を「1」にする。 | |
| 66 | End Sub | サブルーチン「Sw_start」ここまで。 | |
| 67 | |||
| 68 | Sub Sw_stop | サブルーチン「Sw_stop」ここから。 | |
| 69 | F = 0 | 変数「F」の値を「0」にする。 | |
| 70 | End Sub | サブルーチン「Sw_stop」ここまで。 | |
| 71 | |||
| 72 | Sub Lednumber | サブルーチン「Lednumber」ここから。 | |
| 73 | N3 = N0 ⁄ 100 | 「N0÷100」の商(整数部分)を「N3」とする。 | |
| 74 | M = N0 Mod 100 | 「N0÷100」の余りを「M」とする。 | |
| 75 | N2 = M ⁄ 10 | 「M÷10」の商(整数部分)を「N2」とする。 | |
| 76 | N1 = M Mod 10 | 「M÷10」の余りを「N1」とする。 | |
| 77 | N3 = N3 + 1 | 「N3+1」を新たな「N3」とする。 | |
| 78 | N2 = N2 + 1 | 「N2+1」を新たな「N2」とする。 | |
| 79 | N1 = N1 + 1 | 「N1+1」を新たな「N1」とする。 | |
| 80 | End Sub | サブルーチン「Lednumber」ここまで。 |
34〜55行目のWhile〜Wendループは0.1秒ごとにカウントアップするプログラムです。この部分は前項「7セグメントLEDの点灯 (その1)」の「7seg1f.bas」と同じ考え方です。44行目「Porta = Led(n2) + 128」では、DIG2 (中央の桁) に数字を表示するとともに小数点も点灯します (PA7を「1」にする)。
スタートスイッチ (SW1, Pinb.0) とストップスイッチ (SW2, Pinb.1) の状態を監視するプログラムは、反応が早いほうがいいだろうと思ってWhile〜Wendループの中に入れました (35, 36行目)。でも、よく考えたらPB0とPB1はつねに「1」になっているので、どこに置いても同じだったかもしれません。カウントするかしないかは変数「F」の値によって決まります。「F=1」でスタート、「F=0」でストップです。リセットスイッチ (SW3) はマイコンICのリセット端子につながっているので、外部割込みのような動作になります。したがってプログラム中で監視する必要はありません。
このプログラムは動作の確認が目的なので、時間の正確さには無頓着です。大雑把な見積りでは、While〜Wendループを1周するのに9.2mS、これが11回で101mS、サブルーチン「Lednumber」の実行に1mSかかります。つまり約102mSごとにカウントがアップします。正確な計時をするには、クロックに水晶発振器を用い、各プログラムの実行時間を詳細に検討する必要があります。と言うか、そもそも「Wait」命令でタイミングを合わせようとするのは邪道かもしれません。
ADC端子の入力電圧を表示するプログラムです。表示は「0.00」から「5.00」までになります。回路図を下に示します。ADC7 (PB4, 7番ピン) に10kΩのボリュームをつなぎ、電源電圧を分圧して加えます。LED表示器のDIG1はPB3へ移しました。

![]()
プログラムは下記の通りです。A⁄D変換については「A⁄D変換 (その1)」を見てください。A⁄D変換値 (0〜1023) を電圧値 (0.00〜5.00) に直すため、サブルーチン「Adconverter」内で、1000倍してから2048で割っています。これは電源電圧が5Vぴったりの場合を想定しています。変数「N0」は数字が大きくなるのでLong型にしました。それと、39行目「Porta=Led(n3)+128」の「+128」は、左端の桁 (DIG3) に小数点を付けるためのものです。
プログラムファイル 7seg2d.bas
| 1 | $regfile = "at26def.dat" | ATtiny26Lを使用する。 | |
| 2 | $crystal = 1000000 | クロック周波数を1MHzに設定。 | |
| 3 | |||
| 4 | Config Porta = Output | ポートAを出力に設定する。 | |
| 5 | Config Portb = Output | ポートBを出力に設定する。 | |
| 6 | Config Adc = Single , Prescaler = Auto | A⁄D変換の設定。 | |
| 変換方法は「単独変換」、分周値は「自動設定」。 | |||
| 7 | Declare Sub Lednumber | サブルーチン「Lednumber」を使用する。 | |
| 8 | Declare Sub Adconverter | サブルーチン「Adconverter」を使用する。 | |
| 9 | Dim N0 As Long | ロング型変数「N0」を使用する | |
| 10 | Dim N1 As Word | ワード型変数「N1」を使用する。 | |
| 11 | Dim N2 As Word | ワード型変数「N2」を使用する。 | |
| 12 | Dim N3 As Word | ワード型変数「N3」を使用する。 | |
| 13 | Dim M As Word | ワード型変数「M」を使用する。 | |
| 14 | Dim LED(10) As Byte | バイト型変数「LED」(値は10個)を使用する。 | |
| 15 | |||
| 16 | Led(1) = 63 | 変数「LED」の1番目の値は「63」(「0」の表示用)。 | |
| 17 | Led(2) = 6 | 変数「LED」の2番目の値は「6」(「1」の表示用)。 | |
| 18 | Led(3) = 91 | 変数「LED」の3番目の値は「91」(「2」の表示用)。 | |
| 19 | Led(4) = 79 | 変数「LED」の4番目の値は「79」(「3」の表示用)。 | |
| 20 | Led(5) = 102 | 変数「LED」の5番目の値は「102」(「4」の表示用)。 | |
| 21 | Led(6) = 109 | 変数「LED」の6番目の値は「109」(「5」の表示用)。 | |
| 22 | Led(7) = 125 | 変数「LED」の7番目の値は「125」(「6」の表示用)。 | |
| 23 | Led(8) = 7 | 変数「LED」の8番目の値は「7」(「7」の表示用)。 | |
| 24 | Led(9) = 127 | 変数「LED」の9番目の値は「127」(「8」の表示用)。 | |
| 25 | Led(10) = 111 | 変数「LED」の10番目の値は「111」(「9」の表示用)。 | |
| 26 | |||
| 27 | Do | Doループここから。 | |
| 28 | Start Adc | A⁄D変換を開始する。 | |
| 29 | N0 = Getadc(7) | ADC7の入力をA⁄D変換して「N0」に代入。 | |
| 30 | Call Adconverter | サブルーチン「Adconverter」を実行する。 | |
| 31 | Call Lednumber | サブルーチン「Lednumber」を実行する。 | |
| 32 | Portb = 8 | PB3を「1」にする。DIG1が点灯。 | |
| 33 | Porta = Led(n1) | 変数「LED」の「N1」番目の値をポートAに出力。 | |
| 34 | Waitms 5 | 5ミリ秒間そのまま。 | |
| 35 | Portb = 32 | PB5を「1」にする。DIG2が点灯。 | |
| 36 | Porta = Led(n2) | 変数「LED」の「N2」番目の値をポートAに出力。 | |
| 37 | Waitms 5 | 5ミリ秒間そのまま。 | |
| 38 | Portb = 64 | PB6を「1」にする。DIG3が点灯。 | |
| 39 | Porta = Led(n3) + 128 | 変数「LED」の「N3」番目の値をポートAに出力。 | |
| 同時にDIG3の小数点(DP)を点灯する。 | |||
| 40 | Waitms 5 | 5ミリ秒間そのまま。 | |
| 41 | Loop | Doループここまで。 | |
| 42 | |||
| 43 | End | メインプログラム終わり。 | |
| 44 | |||
| 45 | Sub Adconverter | サブルーチン「Adconverter」ここから。 | |
| 46 | N0 = N0 * 1000 | 「N0×1000」を新たな「N0」とする。 | |
| 47 | N0 = N0 ⁄ 2048 | 「N0÷2048」を新たな「N0」とする。 | |
| 48 | End Sub | サブルーチン「Adconverter」ここまで。 | |
| 49 | |||
| 50 | Sub Lednumber | サブルーチン「Lednumber」ここから。 | |
| 51 | N3 = N0 ⁄ 100 | 「N0÷100」の商(整数部分)を「N3」とする。 | |
| 52 | M = N0 Mod 100 | 「N0÷100」の余りを「M」とする。 | |
| 53 | N2 = M ⁄ 10 | 「M÷10」の商(整数部分)を「N2」とする。 | |
| 54 | N1 = M Mod 10 | 「M÷10」の余りを「N1」とする。 | |
| 55 | N3 = N3 + 1 | 「N3+1」を新たな「N3」とする。 | |
| 56 | N2 = N2 + 1 | 「N2+1」を新たな「N2」とする。 | |
| 57 | N1 = N1 + 1 | 「N1+1」を新たな「N1」とする。 | |
| 58 | End Sub | サブルーチン「Lednumber」ここまで。 |