記事

I2C接続キャラクタLCDモジュール用の関数を作る(5)数値を表示する(2)

10進数表示、HEX表示、2進数などで表示を確認する

 前回、String型のオブジェクトの文字列をI2C接続のLCDモジュールに書き込む関数

i2cprint( String( data));


ができました。
 今回は、この関数を利用して、int、long型の変数を10進数表示、HEX表示、2進数表示で表示する方法を検討します。
 その後、float型の実数の少数点以下の表示桁数のコントロールも行います。

引数にString( n)で文字列オブジェクトに変換する
 次のように、int型の変数data1の値を1に初期化します。

  int data1=1;


 この変数が基底を指定しない場合にどのように表示されるかを確認し、それぞれのn進数を指定した表示を確認します。

  • 16進数表示のためHEXを指定
  • 10進数表示のためDECを指定
  • 8進数表示のためOCTを指定
  • 2進数表示のためBINを指定


 具体的なプログラムは次のようになります。
 変数data1を引数として基底の指定なしでString(data1)で表示用のオブジェクトの文字列にしてi2cprint()の引数に指定します。

i2cprint(String(data1));


 表示データを区別するために、次の1文字を使います。

  • HEX表示には ”H”
  • DEC表示には ”D”
  • OCT表示は ”O”
  • BIN表示は ”I”


 数値を変換したオブジェクト文字列にダブル・コーテーションで囲った見出しを + で連結します。

i2cprint("H" + String(data1, HEX));
i2cprint("D" + String(data1, DEC));


 2行目の先頭にカーソルをセットしOCT表示とBIN表示を出力します。

lcdcu_set(0, 1);
i2cprint("O" + String(data1,OCT));
i2cprint("I" + String(data1, BIN))


 プログラムの最初で int data1=1; と data1 のint型の変数を初期化する以外は、前回のプログラムと同じでsetup()とloop()関数を次のように設定し、テスト・プログラムを作りました。

実行結果
 プログラムを開始すると、1が表示されます。Iの見出しは2進数表示で1の表示は10進数表示などのほかの基底の表示と同じで、すべて同じ表示となります。

 基底を指定しないデフォルトの表示はDの見出しのある42と同じで、基底を指定しないデフォルトの表示は10進数表示となります。


 10進数では765、Hの見出しの16進数表示0x2FD、8進数表示1375、2進数表示では1011111101となりました。

実数の場合
 実数の場合は、intの代わりにfloat型の指定で初期値を12.5678と、小数以下4桁の値を設定しました。

float data1 = 12.5678;


 この変数の設定をプログラムの最初に行い、テスト・プログラムを次のように作りました。変数は毎回表示するたびに1.03を加算し、表示する値を変えてみました。


●実行結果
 最初の19.78は小数点以下の表示桁数を指定していません。デフォルトの場合は小数点以下2桁表示のようです。20.の表示は少数点以下の表示桁数を0と指定しています。少数点以下1位が7ですから19.7が四捨五入して20と表示されています。
 19.778は小数点以下3桁の指定で、19.7778が四捨五入して19.778と表示されています。
 19.8は小数点以下1桁表示で、四捨五入で0.1桁上がりしています。

 19.77780は少数以下5桁表示を指定しています。5桁目の値は設定されていないので、0で埋められています。
 以上の方法を利用すると、通常の数値を利用する処理にたいてい対応できそうです。
 
(2016/8/22 V1.0)


 
<神崎康宏>

連載メニュー I2C接続キャラクタLCDモジュール用の関数を作る

(1) コントローラはHD47780の互換がメイン

(2) LCD制御モジュールをコマンドによって制御できること

(3) カーソル・セット、ホーム、クリア関数の作成とテスト

(4) 文字列として数値をLCDに表示する

(5) 文字列として数値をLCDに表示する(2)