マイコン・メモ
LCDモジュール SC2004C を制御する
ホームページに戻るトップページに戻る前ページに戻る次ページに進む最終ページに進む
マイコンRX220による、20桁×4行のLCDモジュール「SC2004C」の制御を、これまで製作したものを基に紹介します。
1.SC2004C について

SC2004Cは、バックライト付きの20桁×4行のモノクロ・キャラクタLCDモジュールで、次の写真がその外観です。
マイコンとの接続は、8ビットのパラレルデータ信号(データバス接続)となっています。詳細は後述します。
※+3.3V動作のマイコンRX220に接続するため、+3.3Vで動作可能の「SC2004CSWB-XA-LB-G」を使用しましたが、使用方法および制御方法に電源電圧は関係ありません。

SC2004Cの外観写真
SC2004Cの外観(コネクタは別途付けたもの)
2.寸法と表示文字

下図にSC2004Cの寸法図を示します。
LCDコントローラに ST7066U-0A を使用していて、5×8ドット(一部は5×11ドット)の英数・記号・カナ、合計192文字を表示できます。漢字など、全角文字は表示できません。表示可能の文字については、ST7066U-0Aのデータシートを参照してください。
SC2004Cの寸法図
5×8ドットの文字とは、下図の例のように横5×縦8の点で構成された文字のことで、最も簡易な英数フォントといえます。
なお、ST7066U-0AにはCGRAM(Character Genegator RAM)という、ユーザーが設定できる文字フォントを8文字分内蔵していて、ユーザーが作った5×8ドットの文字や記号を表示させることも可能です。
5×8ドットフォントの例
5×8ドットフォントの例

3.ピン配置と信号タイミング

下記の表は、SC2004Cの接続端子のピン配置です。
接続端子は、2.54mmピッチのφ1.0スルーホールで、7ピン×2列の計14ピンになっています。
SC2004Cのピン配置
下図に、リードおよびライト時の各信号のタイミングを示します。
始めに述べたように、マイコンとの接続は8ビットのパラレルデータ接続で、S-RAMなどと同じようにE(イネーブル)信号やR/W(リード/ライト)信号でタイミングを取りながら、ステータスの読み込みやデータの書き込みを行います。
図にあるように、サイクルタイムが約1.2μSと、比較的高速でアクセスが可能です。
ST7066Uのリード/ライトタイミング
ST7066Uのリード/ライトタイミング(データシートより)
・MPU(Micro Processing Unit)とはマイコンのことです。

4.DDRAMのアドレスマップと表示コマンド

表示は、DDRAM(Display Data RAM)に文字コードを書き込むことによって行われます。ただし、DDRAM/CGRAMのアクセスは、コントローラのST7066Uのコマンドを使って行います。
DDRAMは20桁×4行分あり、そのアドレス配置は下表のようになっています。表にあるように、アドレスを+1していっても、1行目の行末から2行目にはつながらないので注意が必要です。

表示は、ST7066Uにコマンドを書き込むことによって行います。
例えば、指定の桁・行位置に文字を表示したい場合は、下表に示す「Set DDRAM address」コマンドを使ってDDRAMのアドレスを指定し、「Write data to RAM」コマンドで表示したい文字のコードを書き込みます。
「Set DDRAM address」コマンドを使うと、以降の「Write data to RAM」,「Read data from RAM」コマンドはDDRAMがアクセスされます。同様に「Set CGRAM address」コマンドを使うと、以降はCGRAMがアクセスできるようになります。
ちなみに、「Set CGRAM address」コマンドは、ユーザー定義文字を書き込む(または読み込む)場合に使用します。
ST7066Uのコマンドの一例
ST7066Uのコマンドは、これ以外に数種類あります。興味のある人は下記のコマンド一覧表、またはST7066Uのデータシートをご覧ください。

  ・ST7066Uコマンド一覧表


5.マイコンとの接続

下図に、マイコンRX220との接続回路例を示します。
図中にあるボリュームはLCDのコントラスト調整で、見やすい状態になるよう手動で調節します。
この例では、ポート5のb5で、LCDのバックライトをON/OFFできるようにしていますが、その必要がない場合はバックライトLEDの電流制限抵抗(図では100Ω2個の並列)を+5Vに直接接続します(トランジスタによるON/OFF回路は不要)。
マイコンRX220とSC2004Cの接続回路例
6.制御プログラム例

下記にSC2004Cの制御プログラム例を示します。
この例では、8ビットタイマ TMR2 を使った定周期割り込みによって約50μSのイネーブルサイクル(E信号周期)を作成し、それに同期してデータ(文字コード)をポートCからSC2004Cに出力する構成になっています。
なお、文字を書き込むたびに「Set DDRAM address」コマンドで次に書き込むアドレスを指定するようになっており、自動的にアドレスが+1されるST7066Uの機能は利用していません。
同様に、ディスプレイをクリアする機能や表示をシフトする機能なども利用していません。

 ・SC2004C制御プログラム例(ソースファイル)

 ・SC2004C制御プログラム例(ヘッダファイル)

 ・SC2004C用ユーザー定義文字の例(ヘッダファイル)

注意:これらは例であり、必ずしも正常にコンパイルおよび正常に動作することを保証するものではありません。また、一部のコメントにミスがある場合があります。
下図は、このプログラムによって発生させた R/W信号と E信号です。これからもわかるように、サイクルタイムは約50μSと、SC2004C(コントローラST7066U)の最高速度に比べかなり遅い速度で使用しています。それは、ST7066Uはほとんどのコマンドの処理に35μS以上かかるため待ち合わせが必要になること、20桁×4行程度の表示文字数ならそれほど高速でなくても問題ないこと、遅い方がマイコンの負担が軽いということが理由です。
R/W,E信号の実際のタイミング

プログラム例で提供されているLCD制御関数の紹介
void Init_DispCtrl(void) ディスプレイ制御を初期化する
注:起動初期に、割り込みマスク状態で1回だけ呼ぶこと。
void ON_BackLight(void) LCDのバックライトを点灯する
・バックライトは、BKLIGHT_OFFTIME[秒]経過後に自動消灯します。
注:BKLIGHT_OFFTIME[秒]をあらかじめ定義しておく必要があります。
BOOL Check_BackLight(void) LCDのバックライトが点灯中かどうか調べる
・点灯中(ON)であればTRUEを返します。
void Init_Display(void) LCDコントローラおよび表示を初期化する
・ファイル"CGRamMap.h"にある配列 UserCGpatten[8][8] のユーザー定義文字をコード0x00~0x07に設定します。
・表示は全て消去され、スクロールは無しに設定されます。
・LCDバックライトは点灯(ON)になります。
・カーソル位置は0桁0行目になります。
注:割り込み許可状態で実行すること。
注:カーソル自体は表示されない。
void Set_DispScroll(BOOL bScrollSW) 表示スクロールの有無を設定する
・引数bScrollSW=TRUEでスクロールありに設定されます。
BOOL Clear_Display(void) 表示を全て消去する
・カーソル位置は0桁0行目になります。
BOOL Clear_RightSide(void) 現在のカーソル位置の右側を消去する(行末まで空白で埋める)
BOOL Scroll_Up(void) 1行スクロールアップ(表示シフトアップ)する
・カーソル位置は変わりません。
BOOL Scroll_Down(void) 1行スクロールダウン(表示シフトダウン)する
・カーソル位置は変わりません。
BOOL Disp_Character(char chChar) 1文字表示する
・現在のカーソル位置に chChar を表示し、カーソル位置を1文字右に移動します。
・制御コード CR(Carriage Return:復帰=0x0D)、LF(Line Feed:改行=0x0A)、BS(Back Space:後退=0x08)が使用できます。
・ユーザー定義文字(コード=0x00~0x07)が使用できます。ただし、0x00は0x0Bで代用します(内部で0x00に変換します)。
・文字表示後、カーソルが行末にを越えた場合は下の行の0桁目に移動します。
・文字表示後、カーソルが3行目を越えた場合でスクロールありの場合は、1行スクロールアップしカーソルは3行目のままとなります。スクロールなしの場合は、カーソル位置に変化はなく表示範囲外のままとなります。
BOOL Set_DispPos(int nPosX, int nPosY) 表示位置(カーソル位置)をセットする
・引数により、カーソル位置を nPosX桁(0~19),nPosY行(0~3)にセットします。
・表示範囲外の位置もセット可能ですが、範囲内に戻るまで表示しなくなります。
void Get_DispPos(int* pnPosX, int* pnPosY) 表示位置(カーソル位置)を読み込む
・*pnPosXにカーソルの桁位置,*pnPosYにカーソルの行位置を格納します。
BOOL Disp_String(int nPosX, int nPosY,
 const char* pchStr)
表示位置指定で文字列を表示する
・引数 nPosX, nPosYで示す桁:行位置にカーソルを移動し、pchStrで示す文字列を表示します。
・nPosX または nPosY が <0(負数)の場合は、現在のカーソル位置から表示します。
・カーソル位置は表示後の位置に変わります。
・pchStrで示す文字列は0x00で終端している必要があります。
BOOL Disp_BlockChar(int nPosX, int nPosY,
 int nSize, const char* pchBlock)
表示位置指定で文字列表示する(文字数指定)
・pchBlockで示す文字列の長さ(文字数)は nSize で示されます。必ずしも0x00で終端している必要はありません。
・その他は Disp_String( ) と同じです。
BOOL Disp_Space(int nPosX, int nPosY,
 int nSpcSize)
表示位置指定で指定数の空白を表示する
・引数 nPosX, nPosYで示す桁:行位置にカーソルを移動し、nSpcSizeで示す文字数だけ空白を表示します。
・nPosX または nPosY が <0(負数)の場合は、現在のカーソル位置から表示します。
・カーソル位置は表示後の位置に変わります。
注意:表中で「カーソル~」と記載がありますが、ST7066Uのカーソル表示機能を使用していないのでカーソル自体の表示はありません。

SC2004Cの表示例
SC2004Cの表示例

ホームページに戻るトップページに戻る前ページに戻る次ページに進む最終ページに進む
■■■ 注 意 ■■■
1.ここに掲載された内容(写真,図,表などを含む)の、全てまたは一部を無断で使用しないでください。
2.ここで紹介した手法(構造や仕組み,回路,プログラムなどを含む)を使用したことにより、問題や不利益が発生したとしても一切関知しません。
3.ここで紹介したプログラム例は、正常なコンパイルおよび正常な動作を保証するものではありません。