I2C接続液晶表示器「SB1602B」を、PicBasic Proで動かす

無断転載および再配布を禁じる。
Copyright (c) 2012 All rights reserved.


これは、PicBasic Proで作ったプログラムにより、PICでI2C接続液晶表示器「SB1602B」を動かしたときの詳細説明です。

注意1:この文書の記載内容については、いっさいの責任を負いません。
各製品添付の資料で確認のうえ、自己責任でご利用ください。
注意2:この文書の内容に関して、各製品の販売元およびメーカーはまったく無関係であり、いっさいの責任がありません。
この文書に関して、販売元やメーカーへの問い合わせなどは固く禁じます。

ホームページのトップ     「資料」最初に戻る


  1. 基板配線
  2. プログラムの内容

  (1)I2C通信の準備
  (2)「SB1602B」の初期化
  (3)「SB1602B」の表示
   ●文字クリア
   ●鍵」アイコン消去
   ●アンテナ」アイコン表示
   ●文字2行表示
   ●アンテナ」アイコン消去
   ●鍵」アイコン表示
   ●縦倍角文字表示

参照資料


1.基板配線

次の写真が液晶表示器基板、図がその配線図です。
電源は5Vから3.3Vを作って与え、10ピンのコネクタで、PIC16F877のポートCに接続して動かしました。

基板写真基板配線図

2.プログラムの内容

添付のPDFは、I2CのLCD「SB1602B」に次の動画のような表示をさせるPICBASIC Proのソースプログラムです。

表示の様子

「SB1602B」は制御ICにSitronix社のST7032iを使っており、EXT端子を接地しているので、インストラクションは「拡張モード」です。
そのため、「機能設定 (Function Set)」のインストラクションでLSBの「IS」を「1」に設定すると、アイコンの表示や、コントラストの設定ができます。

ここでは、「現時点の解釈」に基づいて、ソースプログラムの16行目から下を順に解説します。
一部、実験結果から推定した事項も交えますので、もしも間違いなど気付かれましたらご指摘ください。

(1)I2C通信の準備

まず、17,18の2行は、PICマイコンにI2C端子を割り付けます。

次の19から21行目まではI2C通信で使う変数です。

23行目は、PICBASICの中のI2C命令の書式で[Control]に相当する値で、8ビットのうち、上7ビットが「SB1602B」のスレーブアドレス[0111110]で、最下位(LSB)に「書き込み」を意味する「0」を付け加えて[0111,1100]すなわち[$7C]です。

24,25行目は、PICBASICの中のI2C命令の書式で[Address]に相当する値で、「SB1602B」内の受信レジスタアドレスです。
24行目は、データ・レジスタ(DR)のアドレスです。
25行目は、インストラクション・レジスタ(IR)のアドレスです。


(2)「SB1602B」の初期化

27行目から54行目で「SB1602B」を初期化設定します。
書式はすべて次のとおりです。

 I2CWRITE SDA,SCL,SLAVEADDR,CONT,[%********]
  (SDAは18行目、SCLは17行目、SLAVEADDRは23行目、CONTは25行目で定義しています。)

以下、各行の[%********]について解説します。

●28行目:[%01111100]($7C)
機能:スレーブアドレスおよび以降の読み書き(R/W)を設定する。
構成:[AD6,AD5,AD4,AD3,AD2,AD1,AD0,R/W]
設定:AD6-AD0(ビット7-1):スレーブアドレス
   R/W(ビット0):読み書き(0:書き込み、1:読み出し)
本例:以降、書き込みを行う
注意:39行目の説明を参照。

●30行目:[%10000000]($80)
機能:以降の書き込み条件を設定する。
構成:[Co,RS,0,0,0,0,0,0]
設定:Co(ビット7):連続書き込み(0:単発、1:連続)
   RS(ビット6):Co=1の場合、以降のデータ内容(0:条件設定、1:表示データ)
本例:以降、条件設定データが続く

以上の2行は「SB1602B」を初期化設定する前の通信条件設定なので、マニュアルのインストラクション表にもプログラム例にも載っていません。
マニュアルの「インターフェイス・プロトコル」を参照してください。

●33行目:[%00111001]($39)
機能:機能設定 (Function Set)
構成:[0,0,1,DL,N,DH,0,IS]
設定:DL(ビット4):通信コードのビット数(0:4ビット、1:8ビット)
   N,DH(ビット3,2):文字の大きさと表示行数(00:標準1行、01:縦倍角1行、10:標準2行)
   IS:インストラクションセット(0:基本、1:拡張)
本例:8ビット通信、標準文字2行、拡張インストラクション

●36行目:[%00010100]($14)
機能:33行目の機能設定で[IS]が[1]の場合、拡張インストラクションセットの「LCDのバイアス電圧と表示周波数」(Intenal OSC Frequency)
構成:[0,0,0,1,BS,F2,F1,F0]
設定:BS(ビット3):LCDのバイアス電圧(0:VOUTx1/5、1:VOUTx1/4)
   F2-0(ビット2-0):表示周波数(000:122Hz〜100:183Hz〜111:347Hz)
本例:バイアス電圧:VOUTx1/5、表示周波数:183Hz

●39行目:[%01111100]($7C)
機能:液晶のコントラスト設定(Contrast:6ビット構成の下位4ビット)
構成 :[0,1,1,1,C3,C2,C1,C0]
設定:C3-C0(ビット3-0):42行目とともに[C5,C4,C3,C2,C1,C0]の6ビットで「液晶電圧バッファ」の「基準電圧」を変えて「コントラスト」を設定。
本例:上位2ビットを"1"
注意:この行は、たまたま28行目とまったく同じ記述だが、33行目で「拡張インストラクション」を選択した後は、「コントラスト設定」と解釈される。

●42行目:[%01011110]($5E)
機能:33行目の機能設定で[IS]が[1]の場合、拡張インストラクションセットの「電源、アイコン、コントラスト」(Power/ICON/Contrast)
構成:[0,1,0,1,Ion,Bon,C5,C4]
設定:Ion(ビット3):アイコン表示(0:非表示、1:表示)
   Bon(ビット2):昇圧回路(0:非昇圧、1:昇圧)
   C5-4(ビット1-0):コントラスト設定の上位2ビット(39行目とともに[C5,C4,C3,C2,C1,C0]の6ビットで「液晶電圧バッファ」の「基準電圧」を変えてコントラストを設定。)
本例:アイコンを表示、昇圧、コントラスト:10 (5V電源の場合は、Bon="0"として「非昇圧」にします。)

●45行目:[%01101101]($6D)
機能:33行目の機能設定で[IS]が[1]の場合、拡張インストラクションセットの「液晶電圧バッファ」(Follower)
   ここだけは、このあと200msを越える待ち時間(PAUSE)が必要です。
構成:[0,1,1,0,Fon,Rab2,Rab1,Rab0]
設定:Fon(ビット3):液晶電圧バッファ(0:非動作、1:動作)
   Rab2-0(ビット2-0):V0端子出力電圧を基準電圧の何倍(1〜3.75)にするか
   (基準電圧は、39,42行目の[C5,C4,C3,C2,C1,C0]の5ビットによりVDDの36〜99%の間で変化します。)
本例:液晶電圧バッファ:作動、V0端子出力電圧:基準電圧の2.5倍

●48行目:[%00001100]($0C)
機能:33行目の機能設定で[IS]が[1]の場合、拡張インストラクションセットの「液晶表示」(Display ON/OFF)
構成:[0,0,0,0,1,D,C,B]
設定:D(ビット2):画面表示(0:非表示、1:表示)
   C(ビット1):カーソル表示(0:非表示、1:表示)
     (「1:表示」にすると縦倍角のとき、1文字目にカーソルが付いて誤表示になる。)
   B(ビット0):カーソルブリンク(0:静止、1:ブリンク)
本例:画面を表示、カーソルを非表示、ブリンクなし

●51行目:[%00000110]($06)
機能:「表示移動方向」(Entry Mode)
構成:[0,0,0,0,0,1,I/D,S]
設定:I/D(ビット1):カーソル移動方向(0:左、1:右)
   S(ビット0):表示移動方向(0:非移動、1:I/Dによる)
本例:カーソル移動:右、表示移動:非移動


(3)「SB1602B」の表示

56行目から112行目までが、文字およびアイコンの表示です。
書式は次の2とおりです。

 I2CWRITE SDA,SCL,SLAVEADDR,CONT,[ ]
  「動作条件」をインストラクション・レジスタ(IR)に書き込みます。
  SLAVEADDRは23行目、CONTは25行目で決定しています。

 I2CWRITE SDA,SCL,SLAVEADDR,DAT,[ ]
  表示する文字列をデータ・レジスタ(DR)に書き込みます。
  DATは24行目で決定しています。

56行目は、「文字およびアイコンの表示」プログラムが最後の110行目まで行った後のループ戻り行です。

●文字クリア
57行目は「Clear Display」で、[$01]をインストラクション・レジスタ(IR)に書き込むとアイコンを除く文字表示をすべて消して、次の表示用文字入力を画面左上から表示します。

60行目から68行目は、プログラムの最後の方で表示させる「鍵」アイコンを、プログラムの最初に戻って、いったん消去します。

これ以降、アイコン操作に関しては、”I2CのLCD「SB1602B」にアイコンを表示する”を参照してください。

●「鍵」アイコン消去
61行目は、初期設定の33行目とまったく同じ「機能設定 (Function Set)」ですが、アイコンの操作をする前には一度これを行ったほうが誤表示しないようです。

64行目は、「鍵」アイコンが含まれるアドレスである[$49]をインストラクション・レジスタに書き込みます。

66行目で、64行目のアドレスのアイコン・レジスタに[$00]を書き込んで、クリアします。

●「アンテナ」アイコン表示
69行目から74行目は、「アンテナ」アイコンを表示させるプログラムです。

70行目で、「アンテナ」アイコンが含まれるアドレスである[$40]をインストラクション・レジスタに書き込みます。

72行目で、70行目のアドレスのアイコン・レジスタに「アンテナ」を意味するビット4だけを「1」にした8ビットデータを書き込み、「アンテナ」を表示させます。

●文字2行表示
76行目から87行目までは、文字列を2行表示させるプログラムです。

76行目でインストラクション・レジスタに[3,"*"]を書き込むことで、「2行表示」を指定します。

78行目の「Clear Display」は、57行目と同様、文字表示をすべて消して、次の入力による文字表示を画面左上からに指定します。
61行目の「機能設定 (Function Set)」と同様に、アイコンを操作したあとは、一度これを行ったほうが誤表示しないようです。

80行目で、データ・レジスタに文字列を書き込み、1行目に表示させます。

82行目で、インストラクション・レジスタに[$C0]を書き込みます。
これは、DDRAMのアドレスとして[%100,0000]すなわち[$40]を書き込み、液晶の2行目の始め(左端)を指定します。
これにより、次の行で入力する文字列は、液晶の2行目に表示されます。

84行目で、データ・レジスタに文字列を書き込み、2行目に表示させます。

86行目は、アイコン書き換えの前に、いったん文字表示をクリアしていますが、これが無くても誤表示はしません。

●「アンテナ」アイコン消去
89行目から97行目は、「アンテナ」アイコンを消去します。

90行目は、61行目と同じ理由で、アイコン操作の前に「機能設定 (Function Set)」をします。

93行目は、「アンテナ」アイコンが含まれるアドレスである[$40]をインストラクション・レジスタに書き込みます。

95行目で、93行目のアドレスのアイコン・レジスタに[$00]を書き込んで、クリアします。

●「鍵」アイコン表示
続いて、98行目から103行目は、「鍵」アイコンを表示させるプログラムです。

99行目で、「鍵」アイコンが含まれるアドレスである[$49]をインストラクション・レジスタに書き込みます。

101行目で、99行目のアドレスのアイコン・レジスタに「鍵」を意味するビット4だけを「1」にした8ビットデータを書き込み、「鍵」を表示させます。

●縦倍角文字表示
105行目から110行目までは、最初1行目に文字列を表示させ、次にそれを縦倍角表示させます。
もちろん、文字入力前に縦倍角を指定して、最初から縦倍角で表示させることもできます。

105行目は、78行目と同じ目的で、文字表示をクリアします。

107行目で液晶画面の1行目に文字を表示します。

109行目で表示文字を縦倍角にします。


ホームページのトップ     「資料」最初に戻る