1. データとコマンドのWRITE方法
2. 2進数と16進数
①スレーブアドレス → ⑦コントロールバイト → ⑧データバイト
3. 補足資料
命令 2進数コード(RS_b7,~,b0) 16進数コード(使用範囲) |
内容 |
※命令は図3の様に使用します | (R/Wは全て0なので省略しました) |
Clear Display 0_0,0,0,0,0,0,0,1 0x01 |
すべての表示データをクリアするには、すべてのDDRAMアドレスにCGRAMアドレス"20H"(表3より「00100000」16進数で「20」のスペースコード)を書き込み、DDRAMアドレスセット命令のAC※1に "00H"を書き込む。 |
Return Home 0_0,0,0,0,0,0,1,X 0x02~0x03 |
Return Homeは、カーソルをホームに返す命令です。DDRAMアドレスを "00H"に設定してください。 |
Entry Mode Set 0_0,0,0,0,0,1,I/D,S 0x04~0x07 |
カーソルと表示の移動方向を設定します。 I/D(増大/減少) High:カーソル/ブリンクが右に移動し、DDRAMアドレスが1増加します。 Low:カーソル/ブリンクが左に移動し、DDRAMアドレスが1減少します。 S(ディスプレイ全体のシフト) Low:のとき、表示全体のシフトは行われません。 High:DDRAM書き込み動作時には、I / D値(I / D = "1"左シフト、I / D = "0":右シフト)。 |
Display ON/OFF 0_0,0,0,0,1,D,C,B 0x08~0x0f |
制御表示/カーソル/点滅ON / OFF 1ビットレジスタ。
D(表示ON / OFF制御)
High:ディスプレイ全体が点灯します。
Low:表示はオフになりますが、表示データはDDRAMに残ります。
C(カーソルON / OFF制御)
High:カーソルがオンになります。
Low:カーソルは現在の表示で消えますが、I / Dレジスタはそのデータのままです。
B(カーソル点滅ON / OFF制御)
High:カーソルの点滅がオンになり、すべてのハイデータとディスプレイの間で交互に実行されますカーソル位置の文字。
Low:点滅は消灯します。
|
Cursor or Display Shift 0_0,0,0,1,S/C,R/L,X,X 0x10~0x1f |
表示データの書き込みや読み出しを行わずに、左右のカーソル位置や表示を移動させます。 S/C(画面/カーソル選択) High:画面はR / Lビットで制御されます。 Low:カーソルはR / Lビットで制御されます。 R/L(右/左) High:方向を右に設定します。 Low:方向を左に設定します。 |
Function Set 0_0,0,1,DL,N,DH,0,IS 0x20~0x3d |
DL(インタフェースデータ長制御) High:MPU※2付きの8ビットバスモードを意味します。 Low:MPU※2付きの4ビットバスモードを意味します。つまり、DLは8ビットまたは4ビットを選択する信号ですバスモード。4ビットバスモードでは、4ビットデータを2回転送する必要があります。 N(表示行数制御) High:2ライン表示モードになります。 Low:1ライン表示モードを意味します。 DH(2行高フォント制御) High(N=Low):表示フォントは高さモード(5x16ドット)、RAMアドレス00H~27Hしか使用できません。 High(N=High)のときは禁止されます。 Low:表示フォントは通常(5x8ドット)です。 IS(標準/拡張命令選択) High:拡張命令を選択する(拡張命令テーブル参照) Low:通常の命令を選択します(通常の命令テーブル参照) |
Set CGRAM Address 0_0,1,AC5,AC4,AC3,AC2,AC1,AC0 0x40~0x7f |
CGRAM※3アドレスセット この命令は、CGRAMデータをMPUから利用可能にします。(表2,図4参照) |
Set DDRAM Address 0_1,AC6,AC5,AC4,AC3,AC2,AC1,AC0 0x80~0xff |
DDRAM※4アドレスセット この命令は、DDRAMデータをMPUから利用可能にします。(表4,図4参照) 1ライン表示モード(N=0):DDRAMアドレスは "00H"から "4FH"になります。 2ライン表示モード(N=1):1ライン目のDDRAMアドレスは "00H"~ "27H"であり、2行目のDDRAMアドレスは "40H"から "67H"までです。 |
※補足です(表2~4と組合せて使います) Write Data to CG,DD,ICON RAM 1_D7,D6,D5,D4,D3,D2,D1,D0 0x00~0xff |
文字パターン・コードの書込み 上記アドレスセット命令によって設定した場所へ文字コード(DDRAM Data)(表3)や文字パターン(CGRAM Data)(図4,表2)をD7~D0(8bit)で書き込みます。 RAMセット命令はまた、AC※1方向をRAMに転送します。書き込み動作の後、アドレスは入力モードに従って自動的に1ずつ増減します。 |
3. まとめ
〇2018年1月23日追記
本文中「1.④.⑦」の記述に誤りが見つかりましたので訂正致しました。
表5:正誤表
正:⑤(0)+⑥(0or1)+(000000)を合わせた8ビットのデータで送ります
誤:⑤⑥とLCDに送る命令(表1参照)を合わせた8ビットのデータで送ります
表1のインストラクション(液晶への命令)は「control byte」ではなく「data byte」でした大変失礼致しました。
uraraさんご指摘下さいまして誠に有難う御座いました。
※以下補足です
①スレーブアドレス
BIT: |b7|b6|b5|b4|b3|b2|b1|b0|
slave address:| 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
0~7bは実質固定なので、スレーブアドレスは「0x3E」です。
//ArduinoIDE記入例
Wire.beginTransmission(0x3E);//スレーブアドレスを指定
⑦コントロールバイト
BIT: |b7|b6|b5|b4|b3|b2|b1|b0|
control byte: |CO|RS| 0 | 0 | 0 | 0 | 0 | 0 |
b6~7は「0or1」設定可で、b0~5は「0」のみが入ります。
複数のコマンドワードを送る事はあまりないので実質「b7=0」
とすれば、コントロールバイトで使う変数はb6のみになるので「0x00」もしくは「0x40」です。
//ArduinoIDE記入例
Wire.write(0x00);//コマンド書き込み
Wire.write(0x40);//データ書き込み
⑧データバイト
BIT: |b7 |b6 |b5 |b4 |b3 |b2 |b1 |b0 |
data byte: |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 |
⑦で指定した「コマンド」か「データ」に対応するデータを
b0~7に設定します。
〇参考:ディスプレイの特定の位置(行列)にデータを書き込むアドレス指定方法
①スレーブアドレスを指定→⑦コントロールバイトで「コマンド」書き込みに→⑧データバイトで「Set DDRAM Address」を以下の通り指定する。
BIT: | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
DDRAMAddress: | 1 |AC6|AC5|AC4|AC3|AC2|AC1|AC0|
※b7は「1」で固定、b0~6は「0or1」設定可です。
0x80が一行目先頭で、0x80+0x40(0xC0)が2行目先頭です。
参考に2行目2文字目にセットするのは以下の通りです。
//ArduinoIDE記入例
Wire.beginTransmission(0x3E);//①スレーブアドレスを指定
Wire.write(0x00);//⑦コマンド書き込み
Wire.write(0xC1);//⑧DDRAMアドレスを2行目2文字目にセット
Wire.endTransmission();delay(10);//I2C通信終了
以上