液晶表示器制御ライブラリの使い方


【液晶表示器】

ここで扱う液晶表示器はSEIKO製の SC1602BSLB か SC1602BS*B
です。良く使われるシリーズで、16文字×2行の英数字、カナ文字が
表示できます。
消費電流も非常に少ないので(ただしバックライト無し)PICの表示器と
しては持ってこいのものです。

詳細については、別ページ を参照して下さい。

【制御回路】

ここで紹介する液晶表示器とPICとの接続回路は下図とします。
これ以外の接続の場合には、プログラム中でピンの指定変更が必要
です。


【制御ライブラリ】

液晶表示器制御用ライブラリ(lcd_lib.c)には、下記の関数を含んで
います。

(1) 初期化関数 lcd_init()
   PICの電源投入後に実行するべき初期化の関数です。パラメータ
   はありません。
(2) コマンド出力関数 lcd_cmd(cmd)
   液晶表示器の制御を行うための1バイトのコマンドを出力する関数
   パラメータとして下記制御コマンドを使います。

【Control Commandの一覧表】
 Commnad     DB7 6 5 4 3 2 1 0    説    明   
Clear Display     0 0 0 0 0 0 0 1  全消去、CursorはHomeへ
Cursor At Home    0 0 0 0 0 0 1 *  表示内容は変化なし。
Entry Mode Set    0 0 0 0 0 1 I/D S  I/D=Increment/Decrement
                        S=With Display Shift
Display On/Off    0 0 0 0 1 D C B  D=Display C=Cursor B=Blink
Cursor/Dislay Shift 0 0 0 1 S/C R/L * *  S/C=Display/Cursor
                        R/L=Right/Left
Function Set     0 0 1 DL N F * *  DL=8/4Bit N=2/1Line
                        F=Large/Small
CGRAM Address Set  0 1  CCRAM Address   Character Generator RAM
DDRAM Address Set  1 L  DDRAM Address   Display RAM L=Line
Busy Flag/Adrs Read BF  Address       BF=Busy Flag

(3) 文字表示関数 lcd_data(string)
   stringとして渡す文字列を表示します。表示位置は現在位置から
   となりますので、位置を変更する場合には、上記コマンドで制御
   します。

(4) 画面消去関数 lcd_clear()
   単純に全画面を消去しカーソル位置を左上端とします。


  ★ 液晶表示制御用ライブラリ(ダウンロードしてお使い下さい)


《使い方》
使い方は、プログラムの最初で、液晶表示器の接続ピンの定義を
します。そのあとで#include関数でlcd_lib.cをインクルードしてリンク
します。
その後は最初にlcd_init()関数を使って初期化をすれば、あとは
自由に使えます。

《ピンの指定方法》
液晶表示器用として使う入出力ポートを定義します。
 (a) データバス db
   いずれかの入出力ポートの上位4ビットを使います。上位に
   固定となっています。(標準はポートBです)
 (b) 制御信号
   3本の制御信号が必要ですが、それぞれを#define関数で
   指定します。 必要な3つの信号は rs、rw、stb の3種です。
   入出力ポートは特定されないので、どこでもOKです。

 (c) 入出力ポートのモード設定初期値
   液晶表示器用に使うポートの入出力モードの初期設定値を
   Amode、Bmodeとして指定します。
   特にBmodeは上位4ビットは出力とすることが必要です。

【プログラム例】

上記液晶表示制御関数を使ったプログラム例です。
機能としては、いくつかの表示メッセージを一定間隔で表示するという
極く単純なものです。
消去と2行目位置制御の2種類の制御コマンドも一緒に使っています。


《プログラム例》(このままでは漢字スペースを含むので使えません)
///////////////////////////////////////////
// LCD test program
// LCD is SC1602BSLB or SC1602BS*B
//////////////////////////////////////////
#include <16f84.h>
#use fast_io(a)
#use delay(CLOCK=10000000)
#define Bmode 0x0F      //port B initial mode
#define Amode 0        //port A initial mode
#byte db = 6         //port B


//////// Port define and link LCD library
#define rs PIN_A2      //chip select
#define rw PIN_A1      //read/write
#define stb PIN_A0      //strobe
#include <lcd_lib.c>


///////////////////////////////////////////////
// LCD test program main routine
// Display several message on LCD
// with some interval.
// Constant Message is send by lcd_data()
///////////////////////////////////////////////

main(){
 set_tris_a(Amode);     //mode set of port
 set_tris_b(Bmode);     //lower is input
 lcd_init();        //initialize LCD

 while(1){         //endless loop
  lcd_clear();       //clear display
  lcd_data("message001");

  delay_ms(1000);     //wait 1sec
  lcd_clear();
  lcd_data("MESSAGE002");
  delay_ms(1000);
  lcd_clear();
  lcd_data("1234567890");
  delay_ms(1000);
  lcd_clear();
  lcd_data("abcdefghijklmnop");
  
lcd_cmd(0xC0);      //second line
  lcd_data("qrstuvwxyz!#$%&'");
  delay_ms(3000);
 }
}



《解説》
#use delay(CLOCK=10000000)
  これは液晶表示制御のライブラリ内でディレイ関数を使って
  いるので必ずこの関数でクロックを指定しておく必要があり
  ます。

#define Bmode 0x0F

#define Amode 0
#byte db = 6
  ここで液晶表示器に使うポートの指定と初期モードの設定値を
  定義しています。例では、データバスがポートB、制御はポートA
  となっており、ポートBの下位4ビットは入力モードを初期値と
  しています。
#define rs PIN_A2
#define rw PIN_A1
#define stb PIN_A0
  ここで制御ピンの指定をしています。例ではポートAの0,1,2ピン
  としています。
#include <lcd_lib.c>
  これで関数ライブラリをインクルードします。
lcd_init();
  初期化の関数で、パラメータは必要ありません。メインの最初で
  実行する必要があります。
lcd_clear();
  液晶表示を消去する関数で、パラメータは必要無く、無条件で
  クリアします。
lcd_data("message001");
  文字列を表示する関数の使用例で、""で囲われた文字列を
  そのまま液晶に表示します。
  この関数ではCCSのコンパイラの特徴である、パラメータが
  charまたはint属性の時に、文字列をパラメータとして使うと、その
  文字列を1文字の繰り返しとして実行することを利用しています。
  これは標準のC関数と異なっています。
lcd_cmd(0xC0);
  液晶表示器の制御コマンドの使用例で、これで2行目の最初に
  カーソル位置が移動します。

    



      目次ページへ