2012年9月1日土曜日

リアルなLCD画像ファイルが得られるLCD Toolの改良

先日からの改良点

先日適当に作ったLCD Toolですが、なかなか便利に使えそうなので本格的に便利になるように改良しました。
以下に改良点を示します。

機能改良前改良後
LCD形状プログラムにハードコーディングLCDプロファイルで指定可能
LCD描画色プログラムにハードコーディングLCDプロファイルで指定可能
ドット形状等プログラムにハードコーディングLCDプロファイルで指定可能
ユーザーフォントプログラムにハードコーディングフォントファイルで指定可能
出力画像サイズプログラムにハードコーディングプログラム内部で自動計算
非文字コード指定シェル機能に期待(Windowsでは困難)エスケープ文字による指定が可能
動作プラットフォームLinuxを前提に実装LinuxとWindowsで動作確認済み

適当にプログラムでハードコーディングしていた部分を外部から与えられるようにしました。
LCDプロファイルとフォントデータについては後述します。

入力と出力の関係

以下に入力と出力の関係を示します。


LCDプロファイルとは、LCD形状、LCD描画色、ドットサイズ、キャラクタ間隔などを定義したテキストファイルです。
このテキストファイルを編集する事で手持ちのLCDとそっくりの出力を得ることができるようになります。
ファイルの中身は以下のようになっています。
幾つかのLCDに対するサンプルを完備しています。

#
# SC1602BBWB-XA-GB-G
#
CHCNT_X  =  16  # Character Count (X)
CHCNT_Y  =   2  # Character Count (Y)
CHOFS_X  =  16  # Character Offset (X)
CHOFS_Y  =  16  # Character Offset (Y)
CHGAP_X  =   2  # Character Gap (X)
CHGAP_Y  =   2  # Character Gap (Y)
PIXSIZ_X =   4  # Pixel Size (X)
PIXSIZ_Y =   4  # Pixel Size (Y)
PIXGAP_X =   1  # Pixel Gap (X)
PIXGAP_Y =   1  # Pixel Gap (Y)
FGCOL.R  = 220  # Foreground Color (Red)
FGCOL.G  = 220  # Foreground Color (Green)
FGCOL.B  = 220  # Foreground Color (Blue)
BGCOL.R  = 120  # Background Color (Red)
BGCOL.G  = 120  # Background Color (Green)
BGCOL.B  = 230  # Background Color (Blue)
CONTRAST =  96  # Contrast

初版では「ユーザフォントはプログラム中のデータを書き換えてね」という冷たい仕様でした。
実際にユーザフォントを定義しようとすると結構面倒でした。

新しいバージョンでは、フォントファイルを与えるだけで内部のフォントデータを書き換えてくれます。

###########
CODE = 0x00
###########
.....
.o.o.
ooooo
ooooo
ooooo
.ooo.
..o..
.....

###########
CODE = 0x01
###########
.....
.o.o.
ooooo
ooooo
ooooo
.ooo.
..o..
.....

###########
CODE = 0x08
###########
.....
.o.o.
ooooo
ooooo
ooooo
.ooo.
..o..
.....

###########
CODE = 0x09
###########
.....
.o.o.
ooooo
ooooo
ooooo
.ooo.
..o..
.....

プログラム内部のフォントデータは16進数で記述されています。
点灯させたいドットをイメージしながら16進数を操作させるのは不親切です。

上記のように人間がイメージできる形式で記述すれば済むようにしました。

実行例

以下に実行例を示します。

lcdtool ACM0802C-NLW-BBH.lcdprof UserFontSample.lcdfont test1.bmp "ABCDEFGH" "abcdefgh" 



lcdtool SC1602BBWB-XA-GB-G.lcdprof UserFontSample.lcdfont test2.bmp "ABCDEFGHIJKLMNOP" "abcdefghijklmnop" 



lcdtool SC2004CSLB-XA-LB-G.lcdprof UserFontSample.lcdfont test3.bmp "Line 1: LCD Tool" "Line 2: Sample" "Line 3: LCD Tool" "Line 4: Sample"


上記の実行例を見てわかるように、LCDプロファイルとユーザフォント、出力画像ファイル名、メッセージを与えさえすればBMP画像ファイルが得られます。

LCDプロファイルをどんどんカスタマイズしてVFD版を作ったりしても面白そうです。

ユーザフォントを使った出力の指定方法

ユーザフォントを使った出力の指定は、バックスラッシュを使って指定する事ができます。


例えば、上記のCGRAM(3)を表示させたい場合、「\x02」とコマンドラインに与えます。
「\」を表示させたい場合、 「\\」と入力して下さい。
Linuxの端末で与える場合、シェルに解釈させないためにシングルクォートで囲ってから指定する必要があります。

リソースのダウンロード

本記事執筆段階でのスナップショットをこちらからダウンロードできます。
ドキュメントはこちらからダウンロードできます。

Visual C++ 2010 Expressのプロジェクトファイルも同梱してあります。
Windowsでビルドして使用する事もできます。

追記

2012/09/04追記:v0.0.2にはバグがありました。上記から最新のv0.0.3をダウンロードして下さい。
2012/09/15追記:http://shinta.main.jp/software/lcdtool/lcdtool_ja.htmlに最新版があります。

0 件のコメント:

コメントを投稿