<Raspberry Pi-32>

LCD(AQM0802A)での文字表示位置、表示クリアー、カーソルのON/OFF、
カーソルブリンクのON/OFFについてです。

尚、<Raspberry Pi-23>を参照してソフト関連の作業を行っておいてください。
下のプログラムソースで、---プログラムここから---と---プログラムここまで---は
コピーペーストしないでください。

<文字表示位置>
Pi-23で少し書いていますが、AQM0802Aの文字表示のアドレス設定の方法を記します。

AQM0802Aは、1行8文字×2の16文字が表示出来ます。

表示アドレスは下のようになっている。

      1列  2列  3列  4列  5列  6列  7列  8列 
---------------------------------------------
1行目 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
---------------------------------------------
2行目 0x40 0x41 0x42 0x43 0x44 0x45 0x46 0x47
---------------------------------------------
                     下の7bit目を1にして上記アドレスを設定
                                 ↓
                                  7654 3210 bit
例 1 1行目1列の場合 0x00 なので 1000 0000 (0x80)
例 2  1行目5列の場合 0x04 なので 1000 0100 (0x84)
例 3  2行目1列の場合 0x40 なので 1100 0000 (0xC0)
例 4  2行目7列の場合 0x46 なので 1100 0110 (0xC6)

*従ってアドレスは6bit-0bitで設定して7bit目を1にすればいい。
*具体的には、例にあるi2cset -y 1 0x3e 0x00 0x80 i #文字表示アドレス設定
 で設定する(0x80のところ)

例1の場合


------------------------プログラムここから------------------------------
#!/bin/sh

#LCD初期化関数
lcd_init()
{
i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i
sleep 0.3
i2cset -y 1 0x3e 0x00 0x38 0x0C 0x01 i
}
#############################メインプログラム##########################

lcd_init #LCD初期化関数呼出
sleep 1
i2cset -y 1 0x3e 0x00 0x80 i #文字表示アドレス設定
i2cset -y 1 0x3e 0x40 0x41 i

------------------------プログラムここまで------------------------------

例2の場合


------------------------プログラムここから------------------------------
#!/bin/sh

#LCD初期化関数
lcd_init()
{
i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i
sleep 0.3
i2cset -y 1 0x3e 0x00 0x38 0x0C 0x01 i
}
#############################メインプログラム##########################

lcd_init #LCD初期化関数呼出
sleep 1
i2cset -y 1 0x3e 0x00 0x84 i #文字表示アドレス設定
i2cset -y 1 0x3e 0x40 0x41 i

------------------------プログラムここまで------------------------------

例3の場合


------------------------プログラムここから------------------------------
#!/bin/sh

#LCD初期化関数
lcd_init()
{
i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i
sleep 0.3
i2cset -y 1 0x3e 0x00 0x38 0x0C 0x01 i
}
#############################メインプログラム##########################

lcd_init #LCD初期化関数呼出
sleep 1
i2cset -y 1 0x3e 0x00 0xC0 i #文字表示アドレス設定
i2cset -y 1 0x3e 0x40 0x41 i

------------------------プログラムここまで------------------------------

例4の場合


------------------------プログラムここから------------------------------
#!/bin/sh

#LCD初期化関数
lcd_init()
{
i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i
sleep 0.3
i2cset -y 1 0x3e 0x00 0x38 0x0C 0x01 i
}
#############################メインプログラム##########################

lcd_init #LCD初期化関数呼出
sleep 1
i2cset -y 1 0x3e 0x00 0xC6 i #文字表示アドレス設定
i2cset -y 1 0x3e 0x40 0x41 i

------------------------プログラムここまで------------------------------

<文字表示クリアー>

*具体的には、下のプログラムにあるi2cset -y 1 0x3e 0x00 0x01 i #表示クリアー設定
 でクリアーします。(0x01がそうです)

下のプログラムは、Aが2秒間表示後クリアーし、次にBが2秒間表示後クリアーします。

画像をクリックしてください


------------------------プログラムここから------------------------------
#!/bin/sh

#LCD初期化関数
lcd_init()
{
i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i
sleep 0.3
i2cset -y 1 0x3e 0x00 0x38 0x0C 0x01 i
}
#############################メインプログラム##########################

lcd_init #LCD初期化関数呼出
sleep 0.3
i2cset -y 1 0x3e 0x40 0x41 i
sleep 2
i2cset -y 1 0x3e 0x00 0x01 i #表示クリアー設定
i2cset -y 1 0x3e 0x40 0x42 i
sleep 2
i2cset -y 1 0x3e 0x00 0x01 i #表示クリアー設定

------------------------プログラムここまで------------------------------


<カーソルとブリンク>

LCDのカーソルとブリンクは、普段あまり使用しませんが設定は下の1DCBで行います。

(分かりやすくするため設定部分を2進数で示しています)
i2cset -y 1 0x3e 0x00 00001DCB i

1:1固定
D:Display ON/OFF (1でON、0でOFF)
C:Cursor ON/OFF  (1でON、0でOFF)
B:Brink ON/OFF   (1でON、0でOFF)

i2cset -y 1 0x3e 0x00 0x0E i #カーソルON            (00001110)
i2cset -y 1 0x3e 0x00 0x0D i #ブリンクON            (00001101)
i2cset -y 1 0x3e 0x00 0x0F i #カーソルON+ブリンクON (00001111)

下のプログラムは最初にカーソルON、次にブリンクON、そして
カーソル+ブリンクを、それぞれ3秒間表示します。

画像をクリックしてください


------------------------プログラムここから------------------------------

#!/bin/sh

#LCD初期化関数
lcd_init()
{
i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i
sleep 0.3
i2cset -y 1 0x3e 0x00 0x38 0x0C 0x01 i
}

#############################メインプログラム##########################

lcd_init #LCD初期化関数呼出
sleep 0.5
i2cset -y 1 0x3e 0x00 0x0E i #カーソル
sleep 3

lcd_init #LCD初期化関数呼出
sleep 2
i2cset -y 1 0x3e 0x00 0x0D i #ブリンク
sleep 3

lcd_init #LCD初期化関数呼出
sleep 2
i2cset -y 1 0x3e 0x00 0x0F i #カーソル+ブリンク
sleep 3
i2cset -y 1 0x3e 0x00 0x08 i #設定クリアー

------------------------プログラムここまで------------------------------

上のプログラムのi2cset -y 1 0x3e 0x00 0x08 i #設定クリアーで
0x08は00001000ですが1000を1DCBに当てはめるとD:0,C:0,B:0なので
Display OFF、Cursor OFF、Brink OFFとなります。


ここで、Display OFF と0x01の表示クリアーの違いを見てみます。

下のプログラムはカーソル+ブリンクの表示の後表示クリアーしますが
カーソル+ブリンクの表示は消えません。

画像をクリックしてください


------------------------プログラムここから------------------------------

#!/bin/sh

#LCD初期化関数
lcd_init()
{
i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i
sleep 0.3
i2cset -y 1 0x3e 0x00 0x38 0x0C 0x01 i
}

#############################メインプログラム##########################

lcd_init #LCD初期化関数呼出
sleep 0.5
i2cset -y 1 0x3e 0x00 0x0F i #カーソル+ブリンク
sleep 3
i2cset -y 1 0x3e 0x00 0x01 i #表示クリアー

------------------------プログラムここまで------------------------------

下のプログラムはカーソル+ブリンクの表示の後DCBクリアーしますので
カーソル+ブリンクの表示は消えます。

画像をクリックしてください


------------------------プログラムここから------------------------------

#!/bin/sh

#LCD初期化関数
lcd_init()
{
i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i
sleep 0.3
i2cset -y 1 0x3e 0x00 0x38 0x0C 0x01 i
}

#############################メインプログラム##########################

lcd_init #LCD初期化関数呼出
sleep 0.5
i2cset -y 1 0x3e 0x00 0x0F i #カーソル+ブリンク
sleep 3
i2cset -y 1 0x3e 0x00 0x08 i #DCBクリアー

------------------------プログラムここまで------------------------------

下のプログラムは、カーソル+ブリンクの後Aを表示させて表示クリアーします。
この場合は文字Aは消えてカーソル+ブリンクはそのままです。

画像をクリックしてください


------------------------プログラムここから------------------------------

#!/bin/sh

#LCD初期化関数
lcd_init()
{
i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i
sleep 0.3
i2cset -y 1 0x3e 0x00 0x38 0x0C 0x01 i
}

#############################メインプログラム##########################

lcd_init #LCD初期化関数呼出
sleep 0.5
i2cset -y 1 0x3e 0x00 0x0F i #カーソル+ブリンク
sleep 3
i2cset -y 1 0x3e 0x40 0x41 i #A表示
sleep 3
i2cset -y 1 0x3e 0x00 0x01 i #表示クリアー

------------------------プログラムここまで------------------------------


下のプログラムは、カーソル+ブリンクの後Aを表示させてDCBクリアーします。
この場合はカーソル+ブリンクが消えてA表示はそのままです。

*i2cset -y 1 0x3e 0x00 0x0C i #DCBクリアーの0x0CでD:1、C:0、B:0の設定

画像をクリックしてください


------------------------プログラムここから------------------------------

#!/bin/sh

#LCD初期化関数
lcd_init()
{
i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i
sleep 0.3
i2cset -y 1 0x3e 0x00 0x38 0x0C 0x01 i
}

#############################メインプログラム##########################

lcd_init #LCD初期化関数呼出
sleep 0.5
i2cset -y 1 0x3e 0x00 0x0F i #カーソル+ブリンク
sleep 3
i2cset -y 1 0x3e 0x40 0x41 i #A表示
sleep 3
i2cset -y 1 0x3e 0x00 0x0C i #DCBクリアー

------------------------プログラムここまで------------------------------

下のプログラムは、カーソル+ブリンクの後Aを表示させてDCBクリアーします。
この場合はA表示もカーソル+ブリンクも消えます。

*i2cset -y 1 0x3e 0x00 0x0B i #DCBクリアーの0x0BでD:0、C:1、B:1の設定
 C:1、B:1してもD:0でDisplay OFFのため

画像をクリックしてください


------------------------プログラムここから------------------------------

#!/bin/sh

#LCD初期化関数
lcd_init()
{
i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i
sleep 0.3
i2cset -y 1 0x3e 0x00 0x38 0x0C 0x01 i
}

#############################メインプログラム##########################

lcd_init #LCD初期化関数呼出
sleep 0.5
i2cset -y 1 0x3e 0x00 0x0F i #カーソル+ブリンク
sleep 3
i2cset -y 1 0x3e 0x40 0x41 i #A表示
sleep 3
i2cset -y 1 0x3e 0x00 0x0B i #DCBクリアー

------------------------プログラムここまで------------------------------


これまでのプログラムから、0x01の表示クリアーは文字の表示のみクリアーでカーソル、ブリンクの
表示は消せない。

1DCBのDビットを0にするとDisplay OFFなので文字、カーソル、ブリンクの
表示が消える。

1DCBのDビットを1に、Cビットを0、Bビットを0にすると文字は表示して、カーソル、ブリンクの
表示が消える。

Raspberry Pi-33に続く・・・



Raspberry メニューに戻る