Page 1 of 8
メインマイコンボード搭載ボードにあるキャラクタLCD(SC1602BS-B)を制御するプログラムを作成します.このLCDには2行16文字の英数記号文字を表示する能力を有しており,加えて安価であるため,組込みシステムではよく利用されます.ただこのモジュールはVccが5[V]であるため,端子電圧が3.3[V]のマイコンで制御しようとするとレベルシフタが必要です.TKM-HでもTI社製レベルシフタICを使って双方向レベル変換をしています .
キャラクラLCD SC1602BS-B
-
端子
SC1602BS-Bに備わる端子の役割を説明します.-
D0~7
マイコンとLCDとの間でデータをやり取りするための端子です.8本ありますが,端子の少ないマイコンでも制御できるように,D4~D7だけでも制御できるようになっています.この場合,データを送受信するとき上位4ビットと下位4ビットに分けて送信します.ただし,TKM-Hでは,8本すべて繋げてありますのでこの手間はかかりません. -
RS
このキャラクラLCDはいくつかのインストラクションコード,言い換えれば命令コマンドが存在し,それらをマイコンから受信し,フォントサイズを変えたり,文字を表示する位置を変えたりします.文字をLCDに表示するにはキャラクタコードをマイコンから送信し,表示している文字をマイコンで得るにはキャラクタコードをLCDから送信します.インストラクションとキャラクタコードを切り替える端子がRSです.ちなみに,RSはRegister Selectの略で,LCDの内部ではマイコンから送られてきたデータをインストラクションレジスタとデータレジスタのどちらに入れるか切り替えています. -
W/R
多くのインストラクションコードはマイコンからLCDへ送りますが,一部は反対の場合があります.例えば,LCDに内蔵したパターンをマイコンへ送る場合です.このように,データバスの方向を変えるときW/R端子を切り替えます. -
E
この端子はEnable Signalの略でマイコンから見たとき,出力端子となります.インストラクションコードをマイコンから送信する場合,この端子からの信号を立ち下げたときのデータバスからの信号をLCDは取り込みます.つまり,データバスの信号をLCDに取り込ませるタイミングといえます. -
VO
LCDの文字のコントラストを調整するとき用います.具体的には,VOに印加される電圧とVDDとの比率で決まります. -
VDD
プラス電源として5[V]を印加します. -
VSS
グランドです.
-
-
ブロック図
SC1602BS-Bのブロック図のうち,ごく簡単たところだけ抜粋したものを下に示します.左側にあるのがRX62Nマイコン,右側にあるのがキャラクタLCD(SC1602BS-B)です.LCDには先ほど説明したインタフェースRS,R/W,E,D0~D7があり,マイコンの端子と接続されています.
さて,下図を使って文字を出すまでの流れを簡単に説明します.インストラクションレジスタ(IR)とデータレジスタ(DR)がインタフェースと接続されており,ともに8ビット幅となっています.これらのレジスタに対して読み書きするかはRSにより決定します.具体的には,RS=0のときにはインストラクションレジスタと,RS=1のときにはデータレジスタと読み書きを行います.インストラクションレジスタに格納されるのは,次節で説明するインストラクション(平たく言えばLCDに対する命令)であり,これをインストラクションデコーダで意味を理解し命令を実行するのです.データレジスタに格納されるのはキャラクタコードや表示するパターンです.キャラクタコードとは文字に割り振られたID(=コード)であり,ASCIIコードを想像してもらえばわかりやすいと思います.SC1602BS-Bにはあらかじめ文字パターンを記憶しており,それぞれにキャラクタコードが割り振られています.こちらにキャラクタコードとそれに対応したパターンを置いておきます.さて,文字パターンがLCDに記憶されているといいましたが,これを記憶しているのがキャラクタジェネレータROM(CGROM)です.そして,ディスプレイデータRAM(DDRAM)にはキャラクタコードを格納し,LCDに表示するときにはCGROMから表示するパターンを参照するようになっています.
先ほど示しましたキャラクタコード表の0x00~0x0FにはCGRAM(1)~(8)と書かれていると思います.これは,自作のパターンをキャラクタジェネレータRAM(CGRAM)に格納しておき,そのパターンを表示できることを示しています.CGRAMに自作パターンを格納するときもDRを利用します.DRにあるデータをCGRAMもしくはDDRAMのどちらに書き込むか決めるインストラクションがあります.これは次章で説明します.
IRとDR以外に,アドレスカウンタ(AC)とビジーフラグをマイコンは取得することが可能です.これらを取得するためのインストラクションがあります. -
インストラクションコードとキャラクタコード
このLCDには下に示す表のインストラクションコードとキャラクタコードがあります.インストラクションコードを送るにはRSを0,キャラクタコードを送受するにはRSを1にします.コマンドの種類
RS W/R D7 D6 D5 D4 D3 D2 D1 D0 詳細 表示クリア 0 0 0 0 0 0 0 0 0 1 全表示クリア後,カーソルをホーム位置(左上)へ戻す. カーソルホーム
0 0 0 0 0 0 0 0 1 X カーソルをホーム位置に戻す.シフトしていた表示も元に戻る.DDRAMの内容は変化しない. エントリモードセット
0 0 0 0 0 0 0 1 I/D S データの書き込み及び読み出し時に,カーソルの進む方向,表示をシフトさせるかどうかの設定. 表示オン,オフコントロール 0 0 0 0 0 0 1 D C B 全表示のオンオフ(D),カーソルのオンオフ(C),カーソル位置にある桁のブリンク(B)をセット. カーソル表示シフト
0 0 0 0 0 1 S/C R/L X X DDRAMの内容を変えずにカーソルの移動と表示シフトを行う. ファンクションセット 0 0 0 0 1 D/L N F X X インターフェースデータ長(D/L)行数(N),および文字フォント(F)を設定する. CGRAMアドレスセット 0 0 0 1 ACG CGRAMのアドレスをセット.以降送受するデータはCGRAMのデータ. DDRAMアドレスセット 0 0 1 ADD DDRAMのアドレスをセット.以降送受するデータはDDRAMのデータ. ビジーフラグ,アドレス読み出し 0 1 B/F AC モジュールが内部動作であることを示すB/FおよびACの内容を読み出す. CGRAM,DDRAMデータ書き込み 1 0 書き込みデータ(キャラクタコード) CGRAMまたはDDRAMにデータを書き込む. CGRAM,DDRAMデータ読み出し 1 1 読み込みデータ(キャラクタコード) CGRAMまたはDDRAMからデータを読み出す.
省略名 0 1 I/D 左側へ移動 右側へ移動 S 表示のシフトをしない 表示のシフトをする S/C カーソルの移動 表示のシフト R/L 左シフト 右シフト D/L 4ビット 8ビット N 1桁 2桁 F 5×7ドット 5×10ドット D ディスプレイをオフ ディスプレイをオン C カーソルをオフ カーソルをオン B カーソルにある文字を点滅させない カーソルに文字を点滅させる B/F インストラクション受付中 内部動作中 ACG CGRAMのアドレス ADD DDRAMのアドレス AC アドレスカウンタ
コマンドの種類には,インストラクションコード(RS=0)とキャラクタコード(RS=1)があります.さらに,インストラクションコードには,マイコンから送信するもの(W/R=0)と,LCDから送信するもの(W/R=1)の2種類があります.その多くは前者であり,表示する文字やその位置,カーソルの有無などを設定するときに用います.後者はLCDの内部状態をマイコンが取得するときに使用します.
キャラクタコードもW/Rが0のときと1のときでデータの送信方向が変わります.例えば,「A(キャラクターコード0x41)」という文字をLCDの左上に表示したい場合,W/Rを0にしてマイコンからLCDへ送信する状態にした上で,DDRAMアドレスセットによりADD=0x00を送信した後,CGRAM,DDRAMデータ書き込みでキャラクタコード0x41を送信します.
DDRAMのアドレスとパターンの表示位置との関係について説明します.まずは下の図をご覧ください.緑色の枠で囲った箇所がパターンの表示位置であり,各セルに書かれている数字がDDRAMのアドレスです.例えば,2行目左から3列にパターンを表示したい場合にはDDRAMアドレスを0x02にすればよいです.注意しなければならないことは,2行目の左端アドレスが0x40となっていることです.実はSC1602BS-Bには1行に40パターンを記憶するだけのDDRAMが用意されているため,2行目左端のアドレスが0x10ではなく0x40となっているのです.なお,0x10以上0x27以下および0x50以上0x67以下に記憶されたパターンは,カーソル表示シフト命令にあるS/Cを0(表示シフト)にすることで表示させることができます.