稼働中

マイクロビット(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)