【概要】
PIC16F87xシリーズに液晶表示器を接続し、C言語でこれを扱う場合に必要
となる、液晶表示器制御ライブラリの説明です。
ここで扱う液晶表示器はSEIKO製の SC1602BSLB か SC1602BS*Bです。
良く使われるシリーズで、16文字×2行の英数字、カナ文字が表示できます。
消費電流も非常に少ないので(ただしバックライト無し)PICの表示器としては
持ってこいのものです。
詳細については、別ページ を参照して下さい。
【制御回路】
ここで紹介する液晶表示器とPICとの接続回路は下図とします。下図では余分
な回路を含まれていますが、D2の液晶表示器とPICとは、ポートDを通して接続
しています。
これ以外の接続の場合には、プログラム中でピンの指定変更が必要です。
【制御ライブラリ】
液晶表示器制御用ライブラリ(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()
単純に全画面を消去しカーソル位置を左上端とします。
★ 液晶表示制御用ライブラリ3(ダウンロードしてお使い下さい)
【ライブラリの使い方】
(1) 基本的な使い方
使い方は、プログラムの最初で、#include関数でlcd_lib.cをインクルードしてリンク
します。
その後は最初にlcd_init()関数を使って初期化をすれば、あとは自由に使えます。
実際の使用例でのmain関数内での定義設定例です。
//////// link LCD library
#include <lcd_lib3.c>
(2) ピンの定義指定方法
液晶表示器用として使う入出力ポートをライブラリの最初で定義しています。
使うポートを変更するときにはここを書き換えます。下記が定義部分です。////// port define to port D
#byte port = 8 //port D
#define set_tris_x set_tris_d
#define rs PIN_D0
#define rw PIN_D1
#define stb PIN_D2(a) データバス port
いずれかの入出力ポートの上位4ビットを使います。上位に固定となって
います。(標準はポートDです)
(b) 制御信号
3本の制御信号が必要ですが、それぞれを#define関数で指定します。
必要な3つの信号は rs、rw、stb の3種です。 入出力ポートはデータ
バスと同じポートを使います。
(c) TRISレジスタの指定
set_tris_x のxを書き換えます。
【便利な使い方】
(1) 液晶表示器に文字列を表示する場合
lcd_data(string)関数の「string」には文字列を直接指定することが出来ます
lcd_data("abcdefghijklmnop");
lcd_data("MESSAGE002");
(2) 液晶表示器データ表示関数”lcd_data( )”をprint文の対象とすることが出来ます。
これを使うと、数値などの出力フォーマットが自由にできますので、表示の
部分のプログラムを非常に楽に組むことが出来ます。
液晶表示器を出力対象とする基本的なprintf文のフォーマットは下記とします。
printf( lcd_data, string, [value] );
具体的な例では、下記のように使います。
≪例1≫
long data;
int ch;
printf(lcd_data,"CH=%1U %4LX",ch,data);
≪例2≫
float analog;
int ch;
printf(lcd_data,"CH=%1U %1.3f Volt",ch,analog/512);