2023.6.30
前へ
次へ
ホームページトップへ戻る


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第43回]



●PRINT文で表示できる文字

PICBASICコンパイラのPRINT文では文字を” ”で囲うことでコマンドプロンプト画面またはLCD表示器にその文字(列)を表示することができますが表示できる文字には制約があります。
” ”の中に書くことのできる文字は半角の英大文字、小文字、数字、記号に限られます。
カナおよびカナ関連の記号は書くことができません。
半角カナはコマンドプロンプトのシステムとしては使うことが可能なのですがPICBASICコンパイラの入力システムでは都合によって半角カナは(勿論全角文字も)入力することはできません。
入力することはできないのですが半角カナを表示させる方法はあります。
PICBASICコンパイラのPRINT文を最初に紹介した[第38回]で使ったCHR$()関数を使う方法です。
CHR$()関数の中に文字コードを書くことでその文字コードに対応する文字を表示することができます。
英数文字及び一部の記号の文字コードは20〜7F(16進数表記)に割り当てられています。
これは一般にASCIIコードと言われています。
00〜1Fは制御用のコードなので表示に使うことはできません。

文字コード20〜7Fに対応する文字を表示するプログラムです。

最初の
5 R2F=0
はLCD表示モードを解除するための命令です。
R2Fは前回説明しました。
PICターゲットボードをWindowsパソコンに接続した状態で(通常はその状態ではPRINT文の表示はコマンドプロンプト画面に対して行なわれますが)強制的にターゲットボードに接続したLCD表示器に対して表示を行なうためにR2F=1を使います。
これはいわばルール違反の裏技的な使い方なので一度R2F=1を実行するとそれ以後は電源を切るまでPRINT文の表示はLCD表示器に対して行なわれます。
R2F=0はそれを解除してPRINT文の表示を通常の通りコマンドプロンプト画面に対して行なうようにします。
/RUNでプログラムを実行した結果20〜7Fに対応する文字がコマンドプロンプト画面に表示されました。
ここで表示されている文字のほとんどは” ”の中に記述することで画面に表示することができます。
ただし ”(コードは16進数の22)は” ”の中には書けませんからこのプログラムのようにCHR$()を使うことになります。

半角カナ文字を表示するプログラムです。

半角カナおよび記号の文字コードは16進数のA0〜DFです。
80〜9F、E0〜FFは半角文字のコードには割り当てられていませんから使うことができません。
/RUNを実行した結果A0〜DFに対応する半角文字がコマンドプロンプト画面に表示されました。

同じプログラムでLCD表示器に表示することもできます。

ただしPICターゲットボードをWindowsパソコンに接続した状態でそのボードに接続したLCD表示器に文字を表示させるためにはプログラムの先頭でR2F=1を実行する必要があります(正確には先頭でなくてもよいのですが最初のPRINT文よりも前で少なくとも1回は必要です)。

上のプログラムを実行したときのLCD表示器の写真です。

LCD表示器は20字×4行(80字)ですがそこに表示させた文字は16進数の20〜7Fに対応する96文字なので終わりの16文字が先頭に戻って表示された結果最初の16文字が上書きされてしまっています。
LCD表示器のもともとの機能のままでは81文字目は表示されませんがそれでは都合が悪いのでPICに組み込んだシステムサブルーチンによって80字を越える桁位置への表示は先頭の桁に戻って表示するようにしてあります。

上のほうで説明しましたようにコマンドプロンプト画面に対する文字表示では文字コードのE0〜FFは指定できませんがLCD表示器ではE0〜FFにも文字が割り当てられていて表示させることが可能です。
LCD表示器に対する文字表示プログラムです。

表示文字コードとしてA0〜FFをCHR$()に指定することで対応する文字をLCDに表示させます。
PICBASICコンパイラのFOR NEXT文では注意する点があります。
PICBASICコンパイラは今のところ扱える数の範囲は8ビット(00〜FF)なのでFOR文の終わりの値にFFを指定するとNEXT文の働きとしてTOで指定した数値を「越えた」ときにFOR NEXT文のループから抜けますが、FFを越えると00になってしまうためそこで無限ループになってしまいます。
それを避けるために上のプログラムではTOの値は1つ少ないFEにした上でNEXTを抜けたところで(このときaの値はFFになっています)PRINT CHR$(a)を実行しています。

上のプログラムを実行したときのLCD表示器の写真です。

LCD表示器に表示させた文字は16進数のA0〜FFに対応する96文字なので先ほどと同じように終わりの16文字が先頭に戻って先頭の16文字を上書きするはずなのですがそのようにはなっていません。
実は先ほどの英数文字をLCD表示器に表示させたすぐあとで今回のプログラムを実行したために先頭からではなくて上で表示を終った次の17桁目から表示が行なわれました。
そのため80桁では表示されなかった終わりの文字は16字ではなくて32文字になりました。
この写真では最後の32文字が先頭に戻って表示されています。

PICBASICコンパイラ[第43回]
2023.6.30upload

前へ
次へ
ホームページトップへ戻る