今回は液晶ディスプレイに文字を表示するコマンドを説明します。
文字表示の方法
前回の記事で説明したように、液晶モジュールに文字を表示する場合は、文字コード表に従って0x40と文字データを液晶モジュールに送信します。
例えば、「A」(0x41)を表示したい場合は以下のように0x40と0x41を液晶モジュールに送信すると「A」という文字が表示されます。
この状態で「B」(0x42)を表示するために0x40と0x42を液晶モジュールに送信すると、以下のように「A」の隣に「B」という文字が表示されます。
このあと、さらに表示したい文字データを送信すると、前に表示した文字の隣に次々に表示されていきます。このように、液晶モジュールは文字データを送信するたびに、表示する場所を1文字ずつ進めながら文字表示してくれます。
PCなどの文書作成アプリやエディタは、キーボードで文字を入力するたびに、表示する場所を1つずつ進めながら入力した文字が表示されますよね。液晶モジュールの文字表示方法はそれと同じような仕組みです。
表示位置の指定
ところで、実践編で作成するプログラムでは、液晶ディスプレイの特定の位置に温度、湿度、気圧データを表示します。
上で説明したように、文字データを送るたびに1文字ずつ表示位置を進めながら表示してくれるという仕組みは、それはそれでいいとして、今回は特定の位置に文字を表示するため、液晶モジュールに表示する場所を指定する必要があります。そこで、表示位置の指定方法について説明します。
今回使用する液晶モジュールは16文字x2行です。合計で32箇所の文字表示位置があるわけですが、それぞれの表示位置には以下のように「アドレス」という番号が割り当てられています。数字は16進数です。
表示位置の指定は、動作設定コマンドで行います。表示位置指定コマンドのフォーマットは以下になります。
例えば2行目の先頭位置(0x40の位置)に表示位置を指定したい場合は、表示位置指定コマンドは
になります。液晶モジュールに対して、動作設定コマンドであることを示す0x00と、表示位置指定コマンド0xC0を送ると文字表示位置は2行目の先頭に設定されます。
表示位置指定関数
表示位置指定は、1行目と2行目のアドレスが連続していませんので、以下のようにXとYの位置指定ができるように関数を作っておきたいと思います。関数の中身は次回の記事で作成しますが、以下のように計算することにします。
まず関数としては、表示位置(カーソル)の位置を指定するという意味で「lcdLocateCursor」という関数名にします。また引数は文字表示位置で、上の図のように座標指定とします。
関数は以下のように座標(x, y)を引数として定義することにします。
void lcdLocateCursor(uint8_t position_x, uint8_t position_y);
この時、アドレスの計算は以下のようになります。
- yが0の場合(1行目の場合)
アドレス = 0x00 + x - yが1の場合(2行目の場合)
アドレス = 0x40 + x
アドレスがわかったら、コマンドは第7ビットを1にすればいいので、コマンドは以下のようになります。
コマンド = アドレス + 0x80
または、
コマンド = アドレス | 0x80
(|は論理和)
数式が出てきたり、2進数の論理演算が出てきましたが、忘れてしまっているようでしたらここでもう一度、C言語の本を復習しておきましょう。数式や2進数は電子工作のプログラミングでは避けて通れない項目ですので、時間をかけて十分に復習してみてください。
次回は液晶モジュールに文字を表示するプログラムを作成してみます。
更新履歴
日付 | 内容 |
---|---|
2018.7.27 | 新規投稿 |