カラーグラフィック液晶表示器用ライブラリ


【カラー液晶表示器の概要】

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のフォントデータのダウンロード