マイクロビット(c_05)LCD 1602 用モジュール
LCD 1602(I2C) c_lcd1602_00.py
LCD 1602はI2C 接続の 2行16桁表示液晶(LCD)です。※詳細はデータシートを参照ください。
LCD 1602モジュールで使う自作の’c_lcd1602_00.py’を作成しました。(※記事e_21を元にクラスにしました。)
‘c_lcd1602_00.py’は末尾にあります。使い方だけを記載します。
使い方
ファイル転送
micro:bitへ’c_lcd1602_00.py’を送った後でimportして使います。micro:bitに直接ファイルをアップロード出来ない場合(Thonny 3.1.12など)は、microfsなどを使ってアップロードします。
※microfsについては、当サイト内のこちらを参照ください。
※c_lcd1602_00.pyの末尾に、使用例(c_lcd1602_ex.py)の## example以降をコピペ追加しても動作確認できます。
メソッド
c_lcd1602_00’をimportすると「lcd_init,lcd_on, lcd_off, lcd_print, lcd_pos,lcd_clear,lcd_home, lcd_blink, lcd_rsh, lcd_lsh 」のメソッドが使えるようになります。
LCD1602()で初期化します。
(1)lcd_init()
LCD 1602の初期設定をします。
(2)lcd_on()
displayをONします。
(3)lcd_off()
displayをOFFします。
(4)lcd_print(‘str’)
文字列を表示します。
(5)lcd_pos(x,y)
カーソル位置を設定します。
(6)lcd_clear
文字データを消去します。
(7)lcd_home
文字列をhome位置から表示します。
(8)lcd_blink
カーソルを点滅します。
(9) lcd_rsh
文字列を右にシフトします。
(10)lcd_lsh
文字列を左にシフトします。
使用例
文字’!#$%&()=~|@+*<>*’を表示、シフト移動をさせたりしています。スクリプトだけ記載しています。
c_lcd1602_ex.py
rom microbit import *
from c_lcd1602_00 import LCD1602
## example--------------------------------
a=LCD1602() #instance
a.lcd_init() #初期設定
a.lcd_pos(0,0) #1桁1行
moj='0123456789012345'
a.lcd_print(moj) #文字列表示
sleep(1000)
a.lcd_pos(0, 1) #1桁2行
moj='!#$%&()=~|@+*<>*'
a.lcd_print(moj) #文字列表示
sleep(1000)
a.lcd_off() #LCDをOFF 表示が消える
sleep(2000)
a.lcd_rsh() #右へシフト
a.lcd_rsh()
a.lcd_rsh()
a.lcd_on() #LCDをON 右に3文字移動した状態が表示される
sleep(2000)
a.lcd_home() #HOME位置に移動
sleep(2000)
a.lcd_clear() #文字消去
sleep(2000)
a.lcd_blink() #カーソル点滅
モジュール
c_lcd1602_00.py
from microbit import *
# LCD1602 Class
class LCD1602:
def __init__(self,slave=0x3f):
# device slave address
self.adr=slave
def w_dat(self,dat):
buf = bytearray(1)
buf[0] = dat
i2c.write(self.adr,buf)
sleep(2)
# BL|EN|R/W|RS(register selection CMD=1 DATA=0)110?>>100?
# コマンド送信はRS=0、データ送信はRS=1セットが必要
# BL(ON)0x08 & Enable 0x04 >>0x08 & Disenable 0x0C>>0x08になる
def rs_dat(self,dat,RS=0):
self.f= (dat & 0xf0)|0x0C|RS
self.s= (dat & 0xf0)|0x08|RS
return self.f,self.s
def rs_cmd(self,dat):
self.f,self.s=self.rs_dat(dat)
self.w_dat(self.f)
self.w_dat(self.s)
self.f,self.s=self.rs_dat(dat<<4)
self.w_dat(self.f)
self.w_dat(self.s)
def lcd_init(self):
# function_initilize 4bit
fset=[0x30,0x30,0x30,0x20]
for c in fset:
self.f,self.s=self.rs_dat(c)
self.w_dat(self.f)
self.w_dat(self.s)
# 4bit init set data
# 28:4bit col2,disp-cur,blink,entry-increase,disp-clear
#d=[0x38,0x39,0x14,0x70,0x56,0x6C,0x38,0x0e,0x01]
bset=[0x28,0x0F,0x06,0x01]
for c in bset:
self.f,self.s=self.rs_dat(c)
self.w_dat(self.f)
self.w_dat(self.s)
self.f,self.s=self.rs_dat(c<<4)
self.w_dat(self.f)
self.w_dat(self.s)
# moji data
def rs_chr(self,dat):
#RS=1
self.f,self.s=self.rs_dat(dat,RS=1)
self.w_dat(self.f)
self.w_dat(self.s)
self.f,self.s=self.rs_dat(dat<<4,RS=1)
self.w_dat(self.f)
self.w_dat(self.s)
#***** カーソル位置
def lcd_pos(self,x, y):
pos=(0x80 | (y* 0x40 + x))
self.rs_cmd(pos)
#***** lcd に文字を表示 ASCII 2行16文字
def lcd_print(self,pr):
n=len(pr)
for i in range(n):
self.rs_chr(ord(pr[i]))
#---------------------個別の関数
#***** 画面クリア
def lcd_clear(self):
self.rs_cmd(0x01)
#***** 画面home
def lcd_home(self):
self.rs_cmd(0x02)
#***** 画面表示On
def lcd_on(self):
self.rs_cmd(0x0C)
#***** 画面表示Off
def lcd_off(self):
self.rs_cmd(0x08)
#***** カーソル点滅
def lcd_blink(self):
self.rs_cmd(0x0F)
#***** 左シフト
def lcd_lsh(self):
self.rs_cmd(0x18)
#***** 右シフト
def lcd_rsh(self):
self.rs_cmd(0x1C)