LCD1602 / LCD2004
ビギナーキット/スタータキットに同梱されている事の多い 定番LEDモジュール LCD1602です。 1602は16文字×2行の表示サイズを表していて、 同じコントーラを使っている 20文字×4行表示の 2004 も存在します。 表示サイズが違うだけで互換性がありますので ココでは同じものとして扱います。 |
マイコンとの接続
ピン名 | 機能 | 詳細 |
---|---|---|
VSS | GND | |
VDD | +5V | |
VO | コントラスト | VDDを分圧して入力、入力電圧によってLCDのコントラストが変わる |
RS | コマンド/データ | LOWの時 制御コマンド 、 HIGHの時 メモリーに書き込むデータ |
RW | 書込/読込 | LOWの時 読込。読込を行わない場合はGNDに接続 |
E | イネーブル信号 | HIGHからLOWに変化した時に D7~D0 がレジスタに読み込まれる |
D7~D4 | データ上位4Bit | |
D3~D0 | データ下位4Bit | 4Bitモードで動作する場合、使用しない |
A | バックライト アノード | バックライトLEDのアノード側 |
K | バックライト カソード | バックライトLEDのカソード側 |
LiquidCrystalライブラリを使用する場合 | |
---|---|
LCD1602は ArduinoIDEで標準サポートされており、 LCD1602用のライブラリ(LiquidCrystal)が使用できます。 LiquidCrystalライブラリを使用する場合のディフォルトの接続はサンプルスケッチの冒頭に記載されていて、その通りに配線すると ← のようになります。 ※ピン番号は変更できます。 |
|
8Bit モードで使用する場合 | 4Bit モードで使用する場合 |
I2C-パラレル変換モジュールを使用する場合 | |
LCDに接続した状態で販売されている事が多いですが I2Cからパラレルに変換するユニットです。 このユニットと併用する事でLCD1602をI2C接続で使用できます。 変換モジュールの型格は FC-113 と思われます。 I2Cアドレスは0x27のモノと0x3Fのモノが存在するようです。 |
コマンド送信手順
LCD1602/LCD2004には4Bitモードと8Bitモードの二つの動作モードがあります。8BitモードはD0~D7の8本の信号線を使用して コマンド/データ を送信するモード
4BitモードはD4~D7の4本の信号線を使用してコマンド/データ を送信するモードです。
RSがLOWならコマンド、HIGHならデータ
RWがLOWなら書き込み、HIGHなら読み込み です。
8Bitモード | 4Bitモード |
---|---|
D0~D7はEがHIGHからLOWに変化したタイミングで送信されます。 | D4~D7はEがHIGHからLOWに変化したタイミングで送信されます。 4Bitづつ2回に分けて送信します。 1回目に上位4Bit、2回目に下位4Bitが送信されます。 |
I2C接続 | |
I2Cインターフェイスユニットに送信した1Byteのデータは、LCD1602の各端子に下図のように対応します。 接続方法が異なるだけで、コマンドの操作手順は4Bitモードと同じです。 |
|
起動時の初期化シーケンス | |
① 電元ON ② 15mS Wait - 電源が安定するまでの待ち時間 ③ 0x30 を送信 - Function Set (8Bit) ④ 4.1mS Wait ⑤ 0x30 を送信 - Function Set (8Bit) ⑥ 100μS Wait ⑦ 0x30 を送信 - Function Set (8Bit) ⑧ 0x38 を送信 - 8Bit Mode / 2Line Display / 5x8 CharacterModell |
① 電元ON ② 15mS Wait - 電源が安定するまでの待ち時間 ③ 0x3,0x0 を送信 - Function Set (8Bit) ④ 4.1mS Wait ⑤ 0x3,0x0 を送信 - Function Set (8Bit) ⑥ 100μS Wait ⑦ 0x3,0x0 を送信 - Function Set (8Bit) ⑧ 0x2,0x8 を送信 - 4Bit Mode / 2Line Display / 5x8 CharacterModell |
コマンド一覧
LCD制御コマンド RS=LOW / RW=LOW動作 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 16進表記 | 補足説明 | 処理時間 |
---|---|---|---|---|---|---|---|---|---|---|---|
CLEAR | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 01h | 20h(ブランンク)で埋める | 1.52ms |
HOME | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 02h | 書き込み位置を00h(DDRAMの先頭アドレス)に設定 | 1.52ms |
ENTRY MODE | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | 04h~07h | カーソルの移動方向設定 07h 左にシフト 06h 右にシフト |
37μs |
Display ON/OFF | 0 | 0 | 0 | 0 | 1 | D | C | B | 08h~0Fh | D=1 Display ON C=1 カーソル表示 B=1 カーソル点滅 |
37μs |
Display Shift | 0 | 0 | 0 | 1 | S/C | R/L | 0 | 0 | 10h~1Fh | S/C=1 表示をシフト(スクロール) R/L=1 右にシフト |
37μs |
Function Set | 0 | 0 | 1 | DL | N | F | 0 | 0 | 20h~2Fh | DL=1 8Bit mode N=1 2行表示 F=1 5x11ドット表示モデル |
37μs |
Set CGRAM address | 0 | 1 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 40h~7Fh | ユーザー定義文字用メモリに書き込む先頭アドレス設定 アドレスはAC5~AC0で指定 |
37μs |
Set DDRAM address | 1 | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 80h~FFh | キャラクタ表示用メモリに書き込む先頭アドレス設定 アドレスはAC6~AC0で指定 |
37μs |
書き込みコマンド RS=HIGH / RW=LOW
動作 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 16進表記 | 補足説明 | 処理時間 |
---|---|---|---|---|---|---|---|---|---|---|---|
Write data | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | FFh~00h | 直前に Set CGRAM addressと Set DDRAM addressどちらが実行されたかによって書き込み先が変わる |
37μs |
Busyチェック RS=LOW / RW=HIGH
動作 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 16進表記 | 補足説明 | 処理時間 |
---|---|---|---|---|---|---|---|---|---|---|---|
Read Busy | BF | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | BF=1 Busy AC6~AC0=Read dataの読込みアドレス |
0μs |
読込みコマンド RS=HIGH / RW=HIGH
動作 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 補足説明 | 処理時間 |
---|---|---|---|---|---|---|---|---|---|---|
Read Busy | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | CGRAM/DDRAMから1Byte読込み | 37μs |
DDRAMのアドレス
LCD1602 / LCD2004 は同じコントローラを使用しており、LCD1602も 20文字×4行分のDDRAMを持っています。00h~ と40h~ のメモリーは独立していて、スクロール動作を行った場合などに1,3行目のデータが2,4目にシフトする事はありません。
ユーザー定義キャラクタ
キャラクタLCDで使用するフォントデータはROMに定義されているので変更できませんがCGRAMを参照するユーザー定義キャラクタが8キャラクタ分用意されています。
キャラクタコード 00h~07h , 08h~0Fh で参照できます。
※00h~と08h~は同じCGRAMアドレスを参照しますので、同じフォントになります。
8Byteで1キャラクタ、8個分でCGRAMのアドレスは00h~3Fhになります。
サンプルスケッチ
8Bitモード HelloWorld4Bitモード HelloWorld
I2C接続 HelloWorld
以上の スケッチを公開しています。
YuruPuro/LCD1602-4BitMode.ino