桜のはなびらどっとねっとロゴ

桜のはなびらどっとねっと

Raspberry Pi 2でキャラクタ液晶の制御(2.5)

この記事は1年以上前に投稿された記事です。 この警告表示について

IMG_4645_20150607

(同じ画像3回使い回し)

前回、色々な文字を液晶に転送してみましたが、いちいちコードを調べて転送用コマンドに送信するのは正直手間ですよね。そこで今回は文字コードを転送するコマンドを実装してみたいと思います。

仕組み

code

まず、この液晶の文字コードと、ASCIIコードは同じ(水色の部分)でカナも含めるとJISコードの冒頭8bit分 (JIS X 0201)に準拠しています。(薄い緑色の部分)

ただし、未定義領域にオリジナルの文字が入っているのと一部の文字が違う文字に置き換わっているので厳密に言うと違います。例えばASCIIコードだと本来「~」がくるところに「→」、制御文字(DEL)が来るはずの所に「←」がそれぞれ割り当てられています。(おそらく「^」と「~」が5ドットでは区別できないのと、制御文字(DEL)がそもそも必要ないからでしょう。)

要するに、C言語で入力された文字の文字コードを調べて、その文字コードを液晶に転送してやる関数を作れば、ユーザーは転送したい文を関数に転送するだけで楽に液晶に文字を転送できると言うことですね。

そこで今回はその関数を作ります。

コーディング

ベースのコードは前回・前々回と同じものです。そのコードを変更する形になります。

始めに関数を定義します。

line変数で書き込み先の行を指定、SendTextは実際に表示する文字列を入れます。
一度に表示可能な文字数は16文字ですが、液晶のバッファ最大値である40文字分確保します。

渡された変数の他に使用する変数を定義します。

次に指定された行によってアドレス指定をかえます。

1行目の場合と、2行目の場合。それぞれの行頭のアドレスを定義します。
私の買った液晶では&h00が1行目行頭、&h40が2行目行頭でしたのでそれを転送します。

次に、読み取ったデータを1文字ずつ液晶に転送します。

このデータでは、char変数の先頭から1文字ずつ抜き出して、それを2進数に変換して、転送しています。

最後に転送後に残った文字バッファを全て空白で埋めます。

以下の通りのコードになるはずです。

使い方

例えば1行目に「Sakura87.net」を転送するコマンドはこうなります。

実行すると以下の通りになるはずです。

IMG_4657_20150610

次に2行目に「サクラノハナビラ.net」を転送するコードを追加します。
※カナを扱う為にはソースコードおよび入力の文字コードをShift_JISにする必要があります。

これで以下の通りの表示になると思います。

IMG_4658_20150610

文字コードについて

英数字データを表示するだけなら文字コード指定は関係ありませんが、カナを出力するときはJISコードもしくはShift_JISコードでソースファイルおよび入力データを作成する必要があります。ただし、内容によってはJISコードでは表示がおかしくなる場合がありますので、基本的にShift_JISで作成してください。

例えば先ほどの表示をソースファイルの文字コードを変えてみるとどうなるかというと。

  • Shift_JIS(正常表示)
    IMG_4658_20150610
  • JIS(正常に表示できない)
    IMG_4656_20150609
  • EUC-JP(変なスペースが入る)
    IMG_4655_20150609
  • UTF-8(正常に表示できない)
    IMG_4654_20150609

このように、正常に表示できなくなります。
ですのでカナを扱う場合、文字コードはShift_JISで作成しましょう。(英数字のみの場合は何も気にしなくて問題ないです。)

ちなみに、JISコードで未定義の、液晶オリジナルの文字を表示する場合はsprintfにて文字コードを指定してそれをくっつけてやります。

例えば、「ゴウケイ「1200万円」デス」と表示させたい場合「万」と「円」のコードは0xFBと0xFCなのでこうなります。

コレを実行するとこうなります。

IMG_4659_20150610

以上、データ送信コマンドを作って、実際に表示操作を簡略化する事に成功しました。

それでは最後に、「ゴウケイ「1200万円」デス」と表示した時のソースコードを貼り付けておきますね。

 

“Raspberry Pi 2でキャラクタ液晶の制御(2.5)” への1件のコメント

  1. […] 前回までGPIOピンを直接切り替えて液晶を制御していましたが。実はwiringPiにはキャラクタ液晶制御用のライブラリが用意されているので、今回はそれを使ってみたいと思います。 […]

コメントを残す

メールアドレスが公開されることはありません。