当ブログをご覧いただき、ありがとうございます。
ご注意事項:
記載内容には、十分注意しておりますが、勘違い、記憶違い、理解不足、思い込み等が無いとは限りませんので、申し訳ありませんが、 記載内容の正確性は保障致しません(出来ません)。
従いまして、このブログの内容を参考にする事に起因して生じる、または 生じた、いかなる事態にも、当方は何の責任も取れませんので、 参考にされる場合は、自己責任にてお願い致します。
このブログのC言語に関する説明には、PICで電子工作するのに必要な事柄以外(私のレベルで)は出てきません、出てこないことの方が多いと思いますので、ご了承願います。

LCDキャラクタディスプレイモジュールを使う、ファンクションセット命令

今回も、LCD表示器、SD1602VBWB-XAの制御命令(コマンド)を説明します。

 

今回は、ファンクションセット命令です。

命令コード;RS=0、R/W=0、DB7-0=00 1 DL N  F **

       *;1でも0でも、どちらでもよい、今回は両方0にする。

      DL;データラインのビット数選択、0;4ビット、1;8ビット。

      N;1行表示か2行表示かの選択、0;1行表示、1;2行表示。

      F;文字のフォント数選択、0;5x7ドット表示、1;5x10行表示。

        注1;実際は5x8及び5x11ドットであるが、最下行がカーソル表示のため確保されるので、文字自体の表示は5x7及び5x10ドットになる。

        注2;LCD表示器、SD1602VBWB-XAの物理的な表示ドットは、5x8ドットしかないため、この項は必然的に0となる。

命令実行時間;39μS

ファンクションセット命令は、基本のモードを設定し、使用途中で変更することはないと思われる(最初のイニシャライズだけに使う)。

LCDキャラクタディスプレイモジュールを使う、カーソルorディスプレイシフト命令

今回も、LCD表示器、SD1602VBWB-XAの制御命令(コマンド)を説明します。

 

今回は、カーソルorディスプレイシフト命令です。

命令コード;RS=0、R/W=0、DB7-0=0001 S/C  R/L **

       *;1でも0でも、どちらでもよい、今回は両方0にする。

      S/C;表示のシフトかカーソル移動かの選択、0;カーソルの移動、1;表示のシフト。

      R/L;方向の選択、0;左方向、1;右方向

命令実行時間;39μS

ディスプレイの動作;S/C=0(カーソル移動)で、R/L=0の時、カーソルが左に移動、S/C=0(カーソル移動)で、R/L=1の時、カーソルが右に移動、

S/C=1(表示シフト)で、R/L=0の時、表示が左に移動、S/C=1(表示シフト)で、R/L=1の時、表示が右に移動。

命令実行確認法;アドレスを07番地に指定し、文字データ0x41(A)から0x46(F)までを送ってから、2秒待って、カーソルorディスプレイシフト命令0x10(S/C=0(カーソル移動)で、R/L=0(左移動))を送り、2秒待って、カーソルorディスプレイシフト命令0x10を送り、2秒待って、カーソルorディスプレイシフト命令0x14(S/C=0(カーソル移動)で、R/L=1(右移動))を送り、2秒待って、カーソルorディスプレイシフト命令0x14を送り、2秒待って、カーソルorディスプレイシフト命令0x18(S/C=1(文字移動)で、R/L=0(左移動))を送り、2秒待って、カーソルorディスプレイシフト命令0x18を送り、2秒待って、カーソルorディスプレイシフト命令0x1C(S/C=1(文字移動)で、R/L=1(右移動))を送り、2秒待って、カーソルorディスプレイシフト命令0x1Cを送りました。

youtu.be

動画内容;07番地から、A~Fの6文字表示してから、カーソルorディスプレイシフト命令0x10を送ると、カーソルが左に移動し、0x14を送ると、カーソルが右に移動し、0x18を送ると、表示文字(カーソルも含め)が左に移動し、0x1Cを送ると、表示文字(カーソルも含め)が右に移動しました。

LCDキャラクタディスプレイモジュールを使う、ディスプレイON/OFF命令

今回も、LCD表示器、SD1602VBWB-XAの制御命令(コマンド)を説明します。

 

今回は、ディスプレイON/OFF命令です。

この命令後は、ディスプレイON/OFF命令でモードが変更されるまで、効果が持続します。

命令コード;RS=0、R/W=0、DB7-0=0000 1 D  C  B

      D;表示のON/OFF選択、0;表示OFF、1;表示ON

      C;カーソルのON/OFF選択、0;表示OFF、1;表示ON

      B;カーソルのある空白部分の点滅表示のON/OFF選択、0;点滅させない、1;点滅させる

命令実行時間;39μS

ディスプレイの動作;D=0で、全体の表示がOFF、D=1で、全体の表示がON、C=0でカーソルは表示しない、C=1でカーソルを表示する、B=0で、カーソルのある空白部分が空白表示、B=1で、カーソルのある空白部分が空白と全ドット点灯の交互表示(点滅)

命令実行確認法;アドレスを07番地に指定し、表示シフトをするにして、文字データ0x41(A)から0x46(F)までを送ってから、2秒待って、ディスプレイON/OFF命令0x08を送り、ディスプレイ表示をOFFにして、2秒待って、ディスプレイON/OFF命令0x0Cを送り、ディスプレイ表示をON、カーソル表示と点滅表示をOFFにして、2秒待って、ディスプレイON/OFF命令0x0Eを送り、ディスプレイ表示とカーソル表示をON、点滅表示をOFFにして、2秒待って、、ディスプレイON/OFF命令0x0Fを送り、ディスプレイ表示とカーソル表示と点滅表示をONにしました。

youtu.be

動画内容;07番地から、表示シフトをしながら、A~Fの6文字表示してから、ディスプレイ表示をOFFにして、2秒待って、ディスプレイ表示をONし、2秒待って、カーソル表示をONし、2秒待って、点滅表示をONにしました。

*文字表示のシフトをするが入っているのは、コード記載ミスです、修正が面倒なのでそのままにしました。

LCDキャラクタディスプレイモジュールを使う、リターンホーム命令

今回も、LCD表示器、SD1602VBWB-XAの制御命令(コマンド)を説明します。

 

今回は、リターンホーム命令です。

命令コード;RS=0、R/W=0、DB7-0=0000 001*

      *;1でも0でも、どちらでもよい、0x02と0x03はどちらも、リターンホーム命令ということ。

命令実行時間;1.53mS(命令実行時間が長いので、すぐに、次の命令を送ると支障が生じるから、待ち時間を入れる)

ディスプレイの動作;カーソルを00番地(上段左端)に移動する、エントリーモード命令で、シフト表示(S)が1の時で、シフト表示された文字列は、シフト無し表示になる、文字はそのまま。

命令実行確認法;47番地から、表示シフトして6文字表示させ、5秒待って、リターンホーム命令を実行しました。

youtu.be

動画内容;47番地から、表示シフトして6文字表示させた文字が、シフト無し表示になり、カーソルは、00番地に移動しました、表示文字の内容は変化なし。

LCDキャラクタディスプレイモジュールを使う、エントリーモード命令

今回も、LCD表示器、SD1602VBWB-XAの制御命令(コマンド)を説明します。

 

今回は、エントリーモード命令です。

この命令後は、エントリーモード命令でモードが変更されるまで、効果が持続します。

命令コード;RS=0、R/W=0、DB7-0=0000 01 I/D  S

       I/D;書込み又は読み出し時に、自動でカーソルを移動させる方向 0;左へ移動 1;右へ移動

      S;表示のシフトをするかしないかの選択 0;シフトしない 1;シフトする

命令実行時間;39μS

 

ディスプレイの動作;I/D=0でS=0(DB7-0=0x04)の時

          カーソル移動方向;左、表示のシフト;しない

現在文字が表示されている場所の左側にカーソルが表示され、次の文字データを送ると、カーソルのあった所に送った文字が表示され、カーソルは左に1つ移動する。

命令実行確認法;アドレスを07番地に指定し、エントリーモード命令0x04を実行してから、文字データ0x41(A)から0x45(E)までを、1秒間隔で送りました。

youtu.be

動画内容;初めに07番地に文字が表示され、そこから、左に5文字表示された。

 

ディスプレイの動作;I/D=0でS=0(DB7-0=0x05)の時

          カーソル移動方向;左、表示のシフト;する

指定した07番地にカーソルが表示され、文字データを送ると、カーソルのある所に送った文字が右に一つシフトされて表示される、カーソルは移動しない。

命令実行確認法;アドレスを07番地に指定し、エントリーモード命令0x05を実行してから、文字データ0x41(A)から0x45(E)までを、1秒間隔で送りました。

youtu.be

動画内容;初めに07番地にカーソルが表示され、そこから、右に一文字ずつシフトされながら、5文字表示された。

 

ディスプレイの動作;I/D=1でS=0(DB=0x06)の時;

          カーソル移動方向;右、表示のシフト;しない

現在文字が表示されている場所の右側にカーソルが表示され、次の文字データを送ると、カーソルのあった所に送った文字が表示され、カーソルは右に1つ移動する。

命令実行確認法;アドレスを07番地に指定し、エントリーモード命令0x06を実行してから、文字データ0x41(A)から0x45(E)までを、1秒間隔で送りました。

youtu.be

動画内容;初めに07番地に文字が表示され、そこから、右に5文字表示された。

 

ディスプレイの動作;I/D=1でS=1(DB7-0=0x07)の時

          カーソル移動方向;右、表示のシフト;する

指定した07番地にカーソルが表示され、文字データを送ると、カーソルのある所に送った文字が左に一つシフトされて表示される、カーソルは移動しない。

命令実行確認法;アドレスを07番地に指定し、エントリーモード命令0x07を実行してから、文字データ0x41(A)から0x45(E)までを、1秒間隔で送りました。

youtu.be

動画内容;初めに07番地にカーソルが表示され、そこから、左に一文字ずつシフトされながら、5文字表示された。

 

    

 

 

LCDキャラクタディスプレイモジュールを使う、クリアーディスプレイ命令

今回から、LCD表示器、SD1602VBWB-XAの制御命令(コマンド)を説明します。

 

今回は、クリアーディスプレイ命令です。

命令コード;RS=0、R/W=0、DB7-0=0000 0001

ディスプレイの動作;表示内容を消去(空白にする)して、カーソルを00番地(上段左端)に移動する。

命令実行時間;1.53mS(命令実行時間が長いので、すぐに、次の命令を送ると支障が生じるから、待ち時間を入れる)

命令実行確認法;最初に適当な文字を表示させて、5秒待って、クリアーディスプレイ命令を実行しました。

動画内容;最初に表示した文字がクリアーディスプレイ命令実行後、表示内容が消去(空白にする)されて、カーソルが00番地(上段左端)に移動しました。

youtu.be

LCDキャラクタディスプレイモジュールを使う、文字を表示させる。

今回は、前回までに作った2つのサブルーチンを利用して、LCD表示機に文字を表示させます。

 

以下がLCD表示機に文字を表示するプログラムです。

19行より前に、コンフィギュレーションの設定が必要ですが、今回は割愛させてもらいました、必要ならブログを遡って下さい。

では、プログラムの解説。

なお、解説していない行は、以前のブログを参照して下さい。

23~24行;関数のプロトタイプ宣言。

25行;LCD表示機に送るデータを格納する変数の確保。

34行;ここで、LCD表示機をイニシャライズするサブルーチンを呼び出しています。

35行;制御信号を送る設定。

36行;LCD表示機にDDRAMアドレス設定命令を送信。

37行;DDRAMに文字データを送るので、RSを1にします。

38行;文字データ0x4F(Oの文字)を送信。

39行;文字データ0x4B(Kの文字)を送信。

これで、LCD表示機の上段左側からOKの文字が表示されます。

 

下の動画は、実際にLCD表示機に文字を表示させた様子です。

youtu.be