今回の記事では、LCDディスプレイに文字を表示するコマンドを説明します。
文字表示の方法
前回の記事で説明したように、LCDモジュールに文字を表示する場合、文字コード表に従って「0x40」と「文字データ」の2バイトをLCDモジュールに送信します。
例えば、「A」(0x41)を表示したい場合は次のように0x40
と0x41
をLCDモジュールに送信します。

この状態で「B」(0x42)を表示するために0x40
と0x42
をLCDモジュールに送信すると、次のように「A」の右隣に「B」という文字が表示されます。

この状態で、さらに文字データを送信すると、現在表示されている文字の右隣に次々に表示されていきます。
このように、LCDモジュールは文字データを送信するたびに、表示する場所を1文字ずつ進めながら文字表示してくれます。
文書作成アプリやエディターでは、キーボードで文字を入力するたびに表示する場所を1つずつ進めながら入力した文字が表示されますよね。
LCDモジュールの文字表示方法はそれと同じような仕組みです。
表示位置の指定
ところで、実践編で作成するプログラムでは、LCDディスプレイの特定の位置に温度、湿度、気圧データを表示します。
上で説明したように、文字データを送るたびに1文字ずつ表示位置を進めながら表示してくれるという仕組みは、それはそれでいいとして、特定の位置に文字を表示したいケースもあります。
そこで、表示位置の指定方法について説明します。
今回使用するLCDモジュールは「16文字 × 2行」の文字表示ができます。
合計で32ヶ所の文字表示位置があるわけですが、それぞれの表示位置には以下のように「アドレス」という番号が割り当てられています。(16進数表記です)

表示位置の指定は、動作設定コマンドで行います。フォーマットは次のようになっています。

例えば、2行目の先頭位置(アドレスが0x40)に表示する位置を指定したい場合、コマンドは次のようになります。

LCDモジュールに対して、動作設定コマンドであることを示す0x00
と、表示位置指定コマンド0xC0
を送ると文字表示位置は2行目の先頭に設定されます。
表示位置指定関数の作成
プログラムで表示位置を指定する場合、表示位置のアドレスを指定するより、「何行目の何文字目」という指定をしたいですよね。
例えば、「アドレス0x40」という指定方法より、「2行目1文字目」という指定方法の方が断然わかりやすいです。
そこで、次のように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にすればいいので、コマンドは次のようにすればOKです。
コマンド = アドレス + 0x80
または、コマンド = アドレス | 0x80
(|
は論理和)
次回はLCDモジュールに文字を表示するプログラムを作成してみます。
更新履歴
日付 | 内容 |
---|---|
2018.7.27 | 新規投稿 |
2025.8.15 | 説明内容整理 |