トップページへ      電子工作の目次へ
     LCD 表示テスト基板

LCD (液晶キャラクターディスプレー)に文字を書きこむテストをしてみました。 このディスプレーは16文字x2行でアルファベットの大文字小文字にギリシャ文字と数字、カナ文字、記号などの表示ができます。

LCDとPICを組み合わせた製作モノを雑誌などでよく見かけますが、「モノ」の説明が重点的に行なわれて、LCDについてはほとんど使用方法の説明がありません。 使ってみるとナンダこんなものかという部品ですが、初めて使ってみようとする人にとってはうまく表示出来るのか不安があります。

7セグメントのLEDはセグメントに電気を供給してやれば0〜9の数字が簡単に表示できますがLCDは文字を表示させる前に初期化や表示方法の指定が必要なのです。

簡単なテスト基板を作ってLCDの表示を実験してみました。 表示速度の遅いのが欠点ですが、小型機器の表示部分としての利用価値があると思います。

下の写真のLCDはLEDのバックライト付きです。 バックライト無しのものにあとからLEDを付けることはできません。バックライト付きはライトが無いものより約4mmほど厚みが増えています。バックライト無しのものをケースに組み込んでから後でライト付きに取りかえ様とするとパネルに当たったりする不具合が発生することがあります。

写真のLCDはLCD基板の両側にピンコネクターをつけて基板から簡単に取外しができるようにしてあります。将来、何か機器を製作した際、簡単にLCDの引越しが可能となります。

   LCDの出力ピン

LCDは電源+ とGND、照度調節を行なうピン(電圧を分配する可変抵抗器のセンター用)の計3本に文字データ用が8本、制御用に3本の合計14本のピンがあります。

LCD表示を制御するICは各メーカとも日立製作所製のHD44780というICを使用しているので使い方は同じですが、メーカによって接続ピンの配置が異なります。ピン配置は商品に添付されている資料ですぐ判ります。 
(写真のLCDは秋月電子の商品を購入)
   LCDの初期化

LCDは文字を表示させる前に「初期化」を行なってからでないと使用できません。 この「初期化」は送り側のPICとLCD間のRS(Resister Select)とR/W(Read Write)の制御線をそれぞれ’0’にしておいて’00110000’のコマンドデータを3回 LCDに送ります。(PIC bit7―bit0 から LCD DB7−DB0へ)

送り方は、まず電源を投入したら 1.5mSec以上の遅延後に1回目を送り次いで、4.1mSec以上の遅延時間を取ってから2回目を送ります。 今度は100μSec以上の遅延時間をとってから3回目を送ります。(購入したLCDの添付資料は上記値の 1.5mSecが15mSに、100μSecが100Sになっていましたがこれは印刷ミスでしょう。)

上位4bit送信の場合は’0011’をLCDのDB7−DB4へ上記の時間間隔をとって8ビット時と同様に3回送信します。 ここまでの操作ではLCDのビジーフラグチェック(後述)はできません。(PICのPORTBには’00110000’を書き込むと上位4ビットが送信されます。下位4bit送信の場合、PICのPORTBには’00000011’を書き込むと下位4ビットが送信されます。以下おなじ。)

文字データを4ビットで転送する場合は、 コマンドデータの転送機能をセットするためのコマンドとして’0010’をLCDのDB7−DB4へ送ります。 (8ビット転送の場合はこの操作は不要です。)

以上のコマンドデータをPIC側からLCD側に送るためには、PICの出力側にデータをセットしてLCDの制御線のE(Enable)を L→H→L(’0’→’1’→’0’)のようにトグル操作します。この時間は 220nSec以上あればよいので、クロックが10MHz程度のPICでは1命令が4クロックで400nSecですから単純に’BSF’と’BCF’命令を実行すればよいでしょう。

以後のコマンド設定や文字データ送信の際もこの制御線Eのトグル操作は必要です。 制御線Eは GNDではなく Enableの略です。

文字データを送信する場合、 R/W=0, RS=1にします。

続く初期化のコマンドとして次のものをLCDへ送ります。

  ’00111000’(機能設定)
   bit5=1 以下の機能を設定
   bit4=1 8ビット長(4ビット長の場合は=0)
   bit3=1 2行表示
   bit2=1 5x7ドット文字
   (4ビット送信の場合はbit4=0として上位、下位4ビットづつ送信します。)

  ’00001100’(デスプレー制御)
   bit3=1 デスプレーを制御
   bit2=1 デスプレーを ON
   bit1=0 カソール無し
   bit0=0 ブリンク無し

  ’00000001’(デスプレークリヤー)

  ’00000110’(エントリーモード)
   bit2=1 エントリーモード設定
   bit1=1 インクリメント表示(左から右へ書込む)
   bit0=0 表示シフト無し

これでLCDの初期化設定は完了です。 文字データを送る前にLCDの表示をクリヤーするには ’00000001’(表示クリヤー)のコマンドを送ります。

書込む文字の行と番地の位置設定は
  ’10000010’のコマンドを送ります。
   bit7=1 書込み位置のコマンド
   bit6=0 1行目(=1のとき2行目)
   bit3〜0=0010 なら表示位置は2番地
1行16文字の最初の番地は0(ゼロ)番地から始まり15番地までとなります。
 
   LCDのビジーフラグ

機能設定以降のコマンドを送るときもそれぞれのコマンドの後に遅延時間が必要です。 この遅延時間を最短にするためにLCDがコマンドを受信したことを示すフラグ(ビジー)を チェックしてから別のコマンドを送信します。

ビジーフラグのチェックはPIC側を一時的に「入力」に切り替えてLCDのbit7の状態を受取って調べます。 このビジーフラグをチェックする方法でプログラムを作る際はPICとLCD間のデータ線部分のI/Oの設定において「弱プルアップは使用しない」設定にしておかないとLCDの表示ができません。

LCDのデータビットの読み込みはPIC側に作業用レジスタを用意しておいて、RS=0,R/W=1にしてからEをトグルすることによって書込まれるので、そのbit7を調べます。bit7=1ならまだ書込み中で、bit7=0になったらPICのI/Oを「出力」に戻してから次のデータを送信します。 コマンドのほか文字データを送信するときも同様にします。
   LCDのデータ転送方法

LCDは制御データや文字データをPICから送る場合,次の3通りの方法があります。1バイト[bit7〜bit0]のデータを[abcdefg] としたとき

1) PICの bit7〜bit0(8ビット)を出力とするデータは
   LCD のデータ入力 bit7〜bit0(8ビット)へ送る

2) PICの bit7〜bit4(上位4ビット)を出力とする8ビットのデータは
   4ビットづつ2回にわけてLCD の bit7〜bit4 へ送る

3) PICの bit3〜bit0(下位4ビット)を出力とする8ビットのデータは
   4ビットづつ2回にわけてLCD の bit7〜bit4 へ送る

LCDのデータ入力ピン bit7〜bit0にデータを4ビットづつ転送する場合はLCDの機能上必ず bit7〜bit4 へデータを送らなければなりません。

8ビットを一度に転送する 1) の方法はプログラムは簡単ですが 8本のI/Oと配線が必要になります。 2)、3) の方法はその半分の4本のI/Oと配線でよく、PICの I/Oが4本だけ他の用途に使用できるメリットがあります。この方法を採っても配線の数は電源や制御線があるため14本が10本になるだけで半減と言うわけにはいきません。

1) の方法によるデータ転送はデータ [abcdefg]を1回で LCDへ送ります。

2) の方法によるデータ転送は、上位4ビットの[abcd]のデータをLCDへ送り、次いで送り側で上位と下位各4ビットのデータを[efghabcd]に反転させて[efgh]を送ります。

3) の方法では、データを送る前にデータレジスタの値[abcdefg]を作業用レジスタに入れて上位4ビットと下位4ビットを [efghabcd]と反転させてから [abcd]を送り、次いでデータレジスタにあるデータの [abcdefgh]から [efgh]を送ります。

写真の基板製作時の回路図があります。
実際に動作を確認した3種類のアッセンブラプログラムに関してはPICのページをご覧ください。