2013年7月10日水曜日

PIC C18 メモ(A/D測定値の表示)

-----------------------------
A/D変換後の測定値を LCD に表示(初期の考え方)
-----------------------------
A/D 変換後の測定値を LCD に表示するために、書式を整える必要がある。

  • itoa 関数の戻り値は、左詰文字列である
  • itoa i関数は - の時だけ符号があり、+の場合は無い
  • LCD 表示は右詰にしたい
  • 極性の表示位置は、左側の固定位置にしたい
  • 小数点があるので、ゼロで埋める(ゼロフィル)
  • 上位桁のゼロ表示はせず空白(ブランキング)
  • 測定レンジに応じて小数点位置が変わる
手順
  1. itoa 戻り値の文字列をポインタを末尾まで送り文字数を調べる
  2. 表示用の配列の末尾にポインタを進め、NULLを入れておく
  3. 両ポインタをデクリメントしながら表示用配列へ一文字ずつコピー
  4. 小数点位置に来たらピリオドを表示用配列へ入れる
  5. 数値文字が終わったら、ゼロを書き込むか、空白を書き込む
  6. 表示用配列が先頭に戻るまで、繰り返す
  7. 表示用配列(文字列)を返す

-----------------------------
上の改良形
-----------------------------
しばらく上のやり方の関数を使ったが、すごく難しくしていることに気がつき、改めた。表示用のフォーマットに、数値を上書きすればいいだけのことだ。上の手順の 4, 5 が簡略化される。


  • 表示用配列に表示用フォームをコピーする
  • itoa 戻り値を表示用配列に上書きする
  • - の符号がでてきたら、それは先頭に記入する
  • 上はポインタをデクリメントしながら同時に処理する
最終形は、メモリ使用量150バイトくらい減った。sprintf 関数がこのような機能を持っている事を知ったのは、この形が出来た頃。この関数の作成は、着手から何枚もの手書きのメモが残っていたが、まとめるとほんのこれだけ。メモの内容は、ほとんどが「配列」やポインタ経由の受け渡しとなどの勉強と分岐条件の検証だった。

2006.12 - 2013.07.11