7行5列の点の集合によって文字や記号を表示することができる。
例) ! の表示例
■ | ■ | ■ | ■ | ■ |
■ | ■ | ■ | ■ | ■ |
■ | ■ | ■ | ■ | ■ |
■ | ■ | ■ | ■ | ■ |
■ | ■ | ■ | ■ | |
■ | ■ | ■ | ■ | ■ |
■ | ■ | ■ | ■ |
点の集合体で文字や記号(キャラクタともいう)を表示手法を、ドット・マトリックス(ドット=点、マトリックス=集合)と呼ぶ。
現在、画像表示できるディスプレイのほとんどは、この、ドットマトリックス表示により、画像や文字の表示を行っている。
■マイコンとLCDの接続
H8マイコンとLCD(SC1602xxx及び、その互換品)は、以下のように6本の信号線で接続されている。
図からわかるように、LCDはH8のポートBに接続されているので、ポートBの信号を操作すれば、LCDにデータを送ることができる。
PB4(RS)とPB7(E)は制御用の信号線で、データはPB0(DB4)~PB3(DB7)の4ビット単位で送信する。
8ビットのデータを送りたい場合は、上位4ビットを先に送り、その後、下位4ビットを送信する。
LCDにデータを転送するには、
① EをHi(1)に設定する。
② DB4~DB7に送りたいデータを設定する。
③ EをLo(0)に設定する。EがLoに切り替わった瞬間のDB4~DB7の値が、LCDに読み込まれる。
④ 以下、①~③を必要なだけ、繰り返す。
たとえば、0x23をLCDに転送したい場合は、以下のようにする。
...... ...... // まず、上位4ビットの0x02を送信 |
■LCDのコマンド
LCDに対して、コマンドを送ることで何らかの操作を行う事が出来る。コマンドには、以下のようなものがある。
なお、コマンド操作では、RSを0とすること。
信号線 | RS | DB7(DB3) | DB6(DB2) | DB5(DB1) | DB4(DB0) |
出力(1回目) | 0 | 0 | 0 | 0 | 0 |
出力(2回目) | 0 | 0 | 0 | 0 | 1 |
※出力(1回目)は上位4ビット、出力(2回目)は下位4ビットを転送している。
信号線 | RS | DB7(DB3) | DB6(DB2) | DB5(DB1) | DB4(DB0) |
出力(1回目) | 0 | 0 | 0 | 0 | 0 |
出力(2回目) | 0 | 0 | 0 | 1 | - |
※ - は不定値(1でも0でも良い)
信号線 | RS | DB7(DB3) | DB6(DB2) | DB5(DB1) | DB4(DB0) |
出力(1回目) | 0 | 0 | 0 | 0 | 0 |
出力(2回目) | 0 | 0 | 1 | I/D | S |
I/D :"1"の時は新たな文字表示が右側に追加され、"0"の時は左側に追加される
S :"1"の時は新たな文字追加に伴って画面表示全体もシフト
信号線 | RS | DB7(DB3) | DB6(DB2) | DB5(DB1) | DB4(DB0) |
出力(1回目) | 0 | 0 | 0 | 0 | 0 |
出力(2回目) | 0 | 1 | D | C | B |
D:"1"の時は文字表示ON、"0"の時は文字表示OFF
C :"1"の時はカーソル表示ON、"0"の時はカーソル表示OFF
B :"1"の時はカーソル位置の文字がブリンク表示ON、"0"の時はOFF
信号線 | RS | DB7(DB3) | DB6(DB2) | DB5(DB1) | DB4(DB0) |
出力(1回目) | 0 | 0 | 0 | 0 | 1 |
出力(2回目) | 0 | S/C | R/L | - | - |
S/C :"1"の時は表示全体をシフト、"0"の時はカーソル位置だけをシフト
R/L :"1"の時は右側にシフト、"0"の時は左側シフト
信号線 | RS | DB7(DB3) | DB6(DB2) | DB5(DB1) | DB4(DB0) |
出力(1回目) | 0 | 0 | 0 | 1 | DL |
出力(2回目) | 0 | N | F | - | - |
DL :"1"の時は8BIT幅モード、"0"の時は4BIT幅モードによる通信
N :"1"の時は2行表示、"0"の時は1行表示
F :"1"の時は5x10dotフォント、"0"の時は5x7dotフォント
信号線 | RS | DB7(DB3) | DB6(DB2) | DB5(DB1) | DB4(DB0) |
出力(1回目) | 0 | 1 | b6 | b5 | b4 |
出力(2回目) | 0 | b3 | b2 | b1 | b0 |
b6~b0でDDRAM(Display Data RAM:表示データメモリ)のアドレスを指定する。
このLCDコントローラは上段1行目と下段2行目のそれぞれに40文字ずつ、合計80文字の表示が可能。この表示位置を決めるDDRAMアドレスは以下のようになっている。
■初期化処理
始めに初期化を行ってから、使うこと。手順は、以下の通り。
■文字の表示
文字データも今まで同じように上位4ビット、下位4ビットの順に送信する。ただし、RS(PB4)を1にする必要がある。
※コマンドならRSは0、文字データならRSは1。
以下に、LCDに#(文字コードは0x23)を表示する例を示す。
// まず、上位4ビットの0x02を送信 // 0x02(PB0~PB3)とイネーブル信号(PB7)を1に、RS信号(PB4)を1にして送信 PB_DR = 0x02 | 0x80 | 0x10; // 0x02(PB0~PB3)とイネーブル信号(PB7)を0に、RS信号(PB4)を1にして送信 // このタイミングでLCDはPB0~PB3の信号を読み込む PB_DR = 0x02 | 0x10; // つぎに、下位4ビットの0x03を送信 // 0x03(PB0~PB3)とイネーブル信号(PB7)を1に、RS信号(PB4)を1にして送信 PB_DR = 0x03 | 0x80 | 0x10 | 0x10; // 0x03(PB0~PB3)とイネーブル信号(PB7)を0に、RS信号(PB4)を1にして送信 // このタイミングでLCDはPB0~PB3の信号を読み込む PB_DR = 0x03 | 0x10; |
文字コードは、以下の通り。
■サンプルプログラム
LCDの初期化を行い、OKと表示する例を以下に示す。
#include "monitor.h" #define PB_DDR (*(volatile unsigned char *)0xFFFFD4) #define PA_DDR (*(volatile unsigned char *)0xFFFFD1) #define RS 0x10 //レジスタ選択 コマンド(設定)の時:0 文字を送る時:1 // mesc間なにもしない時間稼ぎ関数 int main() // LCD初期設定開始 // ファンクションセット // 表示オン/オフコントロール // エントリーモードセット // 表示クリア // LCDに文字を表示させる // Kを表示 while(1) |