📟

LCDモジュールの使い方

2023/01/09に公開約4,300字

部品

1602 LCD モジュール

https://akizukidenshi.com/catalog/g/gP-01675/
https://www.amazon.co.jp/dp/B07WTMXRTQ
https://www.amazon.co.jp/gp/product/B083DT6181

配線

LCD 側 Arduino 側
VSS GND
VDD 5V
V0 5V 可変抵抗10KΩを経由すること
RS D7
RW GND
E D8
D4 D9
D5 D10
D6 D11
D7 D12
A 5V バックライト用
K GND バックライト用
  • GPIOは最低8本必要になる
  • 可変抵抗値でコントラストが変わる
  • バックライトが不要なら接続しなくてもいい

コード

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // RS, E, D4, D5, D6, D7 に対応する番号

void setup() {
  lcd.begin(16, 2); // 画面サイズ
}

void loop() {
  lcd.home();
  lcd.print("COUNT:");
  lcd.print(millis());
}
  • 左上 (0, 0)
  • 右下 (15, 1)
  • 内部カーソルを持っている
  • (15, 0) のあとで表示しても折り返さない

カタカナを表示する方法

// OK
lcd.write('ア');
lcd.write('イ');

// NG
lcd.print("ア");
lcd.write("ア");
lcd.write("アイ");
lcd.write("アイ");

半角カナを文字単位で write する

ライブラリ

https://github.com/arduino-libraries/LiquidCrystal

Arduino IDE に最初から入っている

ライブラリの使い方

基本
Method 意味
begin(cols, rows) 画面サイズで初期化。最初に1回だけ呼ぶ
clear 消して左上に移動する
setCursor(col, row) 任意の位置に移動する
write(str) 文字列を表示する
print(str) 文字列を表示する (Serial.print に類似)
特殊
Method 意味
home 左上に移動する
cursor カーソル(_)を表示する
blink カーソル(■)を点滅する
autoscroll カーソル位置は固定で画面を流す
leftToRight カーソルは右に動くとする (初期値)
scrollDisplayLeft ←にずらす
scrollDisplayRight →にずらす
createChar 独自のフォントを定義する
しない系
Method 意味
noCursor カーソル(_)を表示しない
noBlink カーソル(■)を点滅しない
noDisplay 全体を表示しない (バックライトは点いたまま)
noAutoscroll autoscroll をしない
忘れてよい
Method 意味
display 全体を表示する(初期値)
rightToLeft カーソルは左に動く

電光掲示板風に流す方法

lcd.autoscroll();
lcd.setCursor(16, 0); // X は画面外を指している
lcd.leftToRight();    // ← 初期値なので指定しなくてもよい

lcd.print("a");
lcd.print("b");
lcd.print("c");
右から文章が出てくる
・・・・・・・・・・・・・・・a
・・・・・・・・・・・・・・ab
・・・・・・・・・・・・・abc

謎の挙動

通常の電光掲示板とは反対の方向から流す場合はなぜかうまくいかない

lcd.autoscroll();
lcd.setCursor(-1, 0);
lcd.rightToLeft();

lcd.print("c");
lcd.print("b");
lcd.print("a");

上のコードは左側から abc が流れてくるはずだが何も表示されない
開始位置を lcd.setCursor(0, 0) とすると abc とは表示される
しかし、0桁目が何も表示されない上 ab と c の行が分断されたりとおかしな挙動をする
開始位置を lcd.setCursor(1, 0) も行が分断する
開始位置を lcd.setCursor(2, 0) だとうまくいくが左側に3桁分のスペースが空く
フォークされたAdafruit_LiquidCrystalを使ってみたが同じ挙動だった
正しく行うなら scrollDisplayRight を自分で呼んだ方がよさそう

rightToLeft の動作

lcd.rightToLeft();
lcd.setCursor(2, 0);
lcd.print("abc");
cba・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・

左上に cba と表示される

独自のフォントの定義と表示

byte box[] = {
  0b11111,
  0b10001,
  0b10001,
  0b10001,
  0b10001,
  0b10001,
  0b10001,
  0b11111,
};

lcd.createChar(0, box);  // 定義
lcd.write(byte(0));      // 表示

0〜7 まで登録できる
box がグローバル変数である必要はない
byte(0) の表記は見たことがないが (byte)0 としても通ったので同じことのようだ
int(0)(int)0 としても通った

参照

https://github.com/arduino-libraries/LiquidCrystal/blob/master/docs/api.md

Discussion

ログインするとコメントできます