【カラー液晶表示器の概要】
132×132ドットのカラーグラフィック液晶表示器用のライブラリを作成しました。
直線やイメージの表示の他に、ちょっと小さいですがANK文字表示と
12x12ドットの漢字の表示もできるようにしました。
対応する液晶表示器はノキア社の一昔前の携帯電話用の表示器で
結構安価に入手できます。
(表記は128x128ドットとなっていますが、132x132まで表示できます)
下記より液晶表示器単体も、コントローラ付きもいずれも入手できます。
ストロベリー・リナックス社
外観は下記のような感じです。
【グラフィックLCDの使い方】
このグラフィック液晶表示器は、ノキア社のものですが、キャリーボードと呼ばれる
コントローラつきのものは、Sparkfun社製です。
コントローラはEPSONのS1D15G10互換品でこのlコントローラのマニュアルが
ダウンロードできます。
使い方はCPUとのインターフェースが、SPIシリアル通信となっていますので、
クロック(SCK)とデータ(DIO)とチップ選択(CS)の3本にリセット(RESET)が追加
されています。
しかし、通常のSPIと異なり、8ビットのデータの前に、1ビット追加されていて、
これでコマンドデータか表示データかを区別するようになっています。
つまり9ビットで送る必要があります。
基本的にはCPUからLCDへの送信だけで制御は問題なくできます。
また、バックライトが必要で、バックライトなしでは黒い表示部のままで何も
見えませんのでバックライトは必須です。
キャリーボードにはバックライト用電源(約7V)を3.3V〜5Vの電源から生成する
DC/DCコンバータが実装されていますので、3.3Vだけででも動作するように
なっています。しかし、3.3Vからバックライトで点灯させると300mA程度の
電流を消費しますので、ちょっと多すぎます。そこで、バックライト用は5Vで
供給するのが良いと思います。
もうひとつ、このキャリーボードつきのものは、256色カラーがサポートされて
おらず、4096色カラーモードだけになっているようです。
したがって、1ドット当たり12ビットのデータが必要になりますので、8ビットで
データを送信する場合には、2ドット分をまとめて3バイトのデータとして送る
必要があります。
256色の場合には1ドットを1バイトで送れるので好都合なのですが、
12ビットの場合にはちょっと面倒なことになります。
液晶表示器の初期化の手順がちょっと面倒な手順ですが、ノキア社のウェブ
にいくつかの参考例がありますので、それらを参考にすれば問題なくできます。
【ライブラリ機能仕様】
ライブラリの仕様は別ページにあるモノクロのグラフィック液晶表示器と
同じとし、漢字文字列と文字列の自動改行を追加しました。
またカラーになったので背景色も指定する必要がありますので追加しました。
関数名 機能と書式 lcd_Initi() 液晶表示器の初期化、132x132の表示範囲、12ビットカラー(4096色)
座標の設定を行う
《書式》
void lcd_Init(void);lcd_Clear() 液晶表示器の全体を指定色で埋める
《書式》
void lcd_Clear(unsigned short Color);lcd_Pixel() 指定座標位置の1ドットを点灯/消灯する
《書式》
void lcd_Pixel(short Xpos, short Ypos, unsigned short Color);
Xpos: X座標(0〜131) Ypos: Y座標(0〜131)
Color: 色指定(12ビット 0x000〜0xFFFまで)lcd_Char() ANKの1文字を指定位置に書く(16文字×16行表示)
《書式》
void lcd_Char(char line, char colum, unsigned char letter,
unsigned short Color1, unsigned short Color2)
line: 行指定(0〜15) colum: 桁指定(0〜15)
letter: 文字指定(0x20〜0xDF) ASCIIコード
Color1:文字色指定 Color2:背景色指定lcd_Str() ANKの指定文字列を指定位置から表示する(16文字×16行表示)
自動改行、自動ページ折り返し
《書式》
void lcd_Str(char line, char colum, unsigned char *s,
unsigned short Color1, unsigned short Color2)
line: 行指定(0〜7) colum: 桁指定(0〜17)
*s : 文字列のポインタ、または"文字列"で指定
Color1: 文字色指定 Color2:背景色指定lcd_Line() 直線描画 (x0, y0)から(x1, y1)を結ぶ直線
《書式》
void lcd_Line(short x0, short y0, short x1, short y1, unsigned short Color);
x0 x1 :X座標(0〜131) y0 y1 :Y座標(0〜131)
Color:色指定lcd_Image() イメージ描画 1画面全体にイメージを表示させる
128x128ドットの単色イメージを中央に表示する
《書式》
void lcd_Image(const unsigned char *ptr,
unsigned short Color1, unsigned Color2);
*ptr :イメージ配列(2048バイト)の先頭ポインタ
Color1:グラフィックの色 Color2:背景色の指定lcd_Scroll() 画面全体のスクロール、スクロールの速さを設定できる
《書式》
void lcd_Scroll(short delay);
delay : スクロール間隔 msec単位lcd_Kanji() 漢字1文字の表示(10文字×10行表示)
《書式》
short lcd_Kanji(char line, char colum, char *ptr,
unsigned char Color1, unsigned short Color2)
line: 行指定(0〜9) colum: 桁指定(0〜9)
Color1:文字色指定 Color2:背景色指定
戻り値: -1 :非漢字データの場合
0 :漢字データの場合KanjiCode() 漢字コードによる1文字表示
《書式》
void KanjiCode(char line, char colum, short upcode, short lowcode,
unsigned char Color1, unsigned short Color2)
line: 行指定(0〜9) colum: 桁指定(0〜9)
upcode,lowcode: 1バイトの漢字コード上位バイト、下位バイト
Color1:文字色指定 Color2:背景色指定Kanji_Str() 漢字文字列の表示 漢字文字列は16進数2バイトで指定 SHIFT-JIS文字とする
1行10文字で自動改行、自動ページ折り返し
《書式》
void Kanji_Str(char line, char colum, const short* str,
unsigned short Color1, unsigned short Color2);
line: 行指定(0〜9) colum: 桁指定(0〜9)
str: 漢字文字列へのポインタ
Color1:文字色指定 Color2:背景色指定
【表示例】
実際の表示例です。
ANKの文字表示例では、
16文字×16行で表示でき
ますので、結構多くの
情報を表示できます。
ただし、ちょっと文字が
小さいのが難点です。
これに対し漢字表示はそこそこの大きさで表示でき、
10文字×10行ですから
たいていのことには対応できると思います。
グラフィックの表示例です。
直線での近似曲線ですが
結構きれいに描けます。
【ソフトウェア】
テストに使ったプログラムは下記からダウンロードできます。
★★★ テストプログラムのダウンロード
★★★ ライブラリのプログラムのダウンロード
★★★ 漢字とANKのフォントデータのダウンロード