<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 メニューに戻る