熊おふし五郎が行く

主にマイコンボードを動かした記録を書いています

Micro:bit、Micropythonで液晶ディスプレイに文字を表示する(GPIOを利用)

液晶ディスプレイ

液晶ディスプレイ(LCD)は、液晶の性質で光を制御し、文字、記号、図形を表示する画面装置です。

ドットマトリックスLCD

ここでは、HD44780コントローラー互換のSD1602ディスプレイを使用します。

f:id:bear_9973:20201124204101j:plain:w300
SD1602ディスプレイ

他メーカーのSD1602ディスプレイを購入するときは、 ドライバ回路にご留意してください。

インターフェース

Micro: bitから本モジュールへデジタル信号を入力します。

MicropythonとMicro:bit

SD1602ディスプレイに「クマオフシゴロウ」を表示するサンプルソフトを以下に説明します。

フロー

サンプルプログラムはSD1602ディスプレイに初期設定をして、文字を表示します。初期設定と文字の表示方法は、HD44780コントローラーまたはSD1602ディスプレイのデータシートを参考にしてください。

f:id:bear_9973:20201124205134p:plain:w200
フロー図

接続

接続表と接続図(写真)を示します。

Micro Bit LCD
ピン番号 機能 ピン番号 機能
P7 DigitalOut 14 D7
P6 DigitalOut 13 D6
P5 DigitalOut 12 D5
P4 DigitalOut 11 D4
- 10 D3
- 9 D2
- 8 D1
- 7 D0
P3 DigitalOut 6 E
GND GND 5 R/W
P2 DigitalOut 4 RS
(可変抵抗) 3 Vo
3V3 3V3 2 V+
GND GND 1 GND
GND GND 16 LED-
3V3 3V3 15 LED+

SD1602ディスプレイのピン番号は端から順番になっていませんので、接続にはご注意ください。

f:id:bear_9973:20201124205427p:plain:w400
構成図

コード

from microbit import *

# pinの定義
# P7 -> D7
# P6 -> D6
# P5 -> D5
# P4 -> D4
# P3 -> E
# P2 -> RS

# pin connections
# かならず、LEDディスプレイをOFFにする
rs = pin2
enable = pin3
datapins = [pin4, pin6, pin7, pin8]
# Read/Wrire pin は常に0にしてWriteモードにする

def pin_init():
    rs.write_digital(0)
    enable.write_digital(0)
    for i in range(0, 4):
        datapins[i].write_digital((0))
    sleep(1)

def pulseEnable():
    enable.write_digital(0)
    sleep(1)
    enable.write_digital(1)
    sleep(1)
    enable.write_digital(0)
    sleep(1)

def write4bits(value):
    for i in range(0, 4):
        datapins[i].write_digital((value >> i) & 0x01)
    pulseEnable()

display.off()
pin_init()

sleep(30)  # wait longer than 15 ms
write4bits(0x03)
sleep(5)  # wait longer than 4.1 ms
write4bits(0x03)
sleep(1)  # wait longer than 10 um
write4bits(0x03)
write4bits(0x02)  # interface 4 bits longer

write4bits(0x02)  # interface 4 bits longer
write4bits(0x08)  # DL:0(4 bits) N:1(2 lines) F:0(5*11 dots)

write4bits(0x00)  # display off
write4bits(0x08)  # D:0(off) C:0(off) B:0(off)

write4bits(0x00)  # display clear
write4bits(0x01)

write4bits(0x00)  # entry mode setting
write4bits(0x06)  # I/D:1(Address increment) S:0(Not display shit)

write4bits(0x00)  # display on
write4bits(0x0C)  # D:1(on) C:0(off) B:0(off)

rs.write_digital(1)  # ク 0x0B 0x08
write4bits(0x0B)
write4bits(0x08)

rs.write_digital(1)  # マ 0x0C 0x0F
write4bits(0x0C)
write4bits(0x0F)

rs.write_digital(1)  # オ 0x0B 0x05
write4bits(0x0B)
write4bits(0x05)

rs.write_digital(1)  # フ 0x0C 0x0C
write4bits(0x0C)
write4bits(0x0C)

rs.write_digital(1)  # シ 0x0B 0x0C
write4bits(0x0B)
write4bits(0x0C)

rs.write_digital(1)  # コ 0x0B 0x0A
write4bits(0x0B)
write4bits(0x0A)

rs.write_digital(1)  # ゛ 0x0D 0x0E
write4bits(0x0D)
write4bits(0x0E)

rs.write_digital(1)  # ロ 0x0D 0x0B
write4bits(0x0D)
write4bits(0x0B)

rs.write_digital(1)  # ウ 0x0B 0x03
write4bits(0x0B)
write4bits(0x03)

結果

SD1602ディスプレイに「クマオフシゴロウ」が表示されました。

f:id:bear_9973:20201124205513j:plain:w300
動作状況