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