パソコンを使っているとフォントは身近な存在ですが、その使い方や中身はよく判らずに利用している。そこで、「(コンピュータで使われる)フォントとは?」と調べて見た。
フォントとは、「本来、『同じサイズで、書体デザインの同じ活字のひとそろい』を意味するが、現在では画面に表示したり、書籍など紙面に印刷したりするためにコンピュータ上で利用できるようにした書体データを指す」(ウィキペディア)とある。
フォントファイルの構造 |
東雲フォント(shnmk16.bdf)の一部 |
前報(abc895)ではバイト単位位置にしか文字を表示できなかったが、ドット単位位置で表示できるようにすることにした。ところが、LCDにはバイト単位毎にしか書き込めず、ドットをずらしてデータを書き込むと、以前に書かれたデータを消してしまう。本来はLCD画像データを一度読み込んで、書き込みたいデータと組み合わせて、再度書き込めば良いのだが、AQM1248Aの画像メモリは読み出せない。
そこで、PICのメモリ上に画像メモリと同じ容量のvRamエリアを準備し、vRam上でデータを作成後、LCDに書き込むことにした。なお、vRamに必要なメモリは以下のように768バイトとなる。
( 48 dot÷ 8 bit ) ×128 dot =768 byte
RAM=1KbyteのPIC16F18325でも良さそうだが、念のためRAM=2KbyteのIC16F18326を使った。また、LCDはバックライト付きに変更した。その他のハード・MCCの設定はabc895と同じ。
「バックライト付きグラフィックLCD(秋月#110048、500円)」は「ピッチ変換基板(秋月#107006、450円)」と組み合わせ、バックライト用の端子に100Ω(1/6W)の抵抗を介して、3.3Vを供給した
新ライブラリは、前報(abc895)のAQM1248Aライブラリをベースとしたが、vRamにアクセスするための座標データが必要なので、gLCD_chr()とgLCD_str()関数は削除した。代わりにgLCD_chrX()、gLCD_strX()関数を使う必要がある。新しいライブラリ名はAQM1248A_m。
また、関数の引数の並び順を、xpos、ypos、data、・・に変更し、位置指定関数名もgLCD_posXY()とした。(詳細はAQM1248A_m.hファイル参照)
上記の関数は、LCDのバイト単位位置で描画(上書き)するが、さらに、ドット単位位置で描画する以下の関数を追加した。新たに追加した関数は、点の消去(col=0)、点の描画(col=1)、点反転(col=8)をcolで指定することができる。
【デモ・テスト】 使用メモリ( ROM:3,490 byte、RAM:982 byte )
・ 水平ラインから上はバイト単位位置で描画、水平ラインから下はドット単位位置で描画している。
・ クロスのラインは2秒ごとにcol=8(点反転、XOR)で描画し、表示/非表示を繰り返す。
・ サイン曲線の描画は、近似データの配列変数をパターンで、およびXY指定ドットでプロットした。
・ 16x16ドットの漢字表示も試した。漢字パターンデータの作成には、上記 fontviewer24.xlsx を利用した。
・ 画面消去をgLCD_clr(0xFF)に変更すると全画面が黒となり、col=0として白文字のテストができる
|
【AQM1248A_mライブラリ】
abc895で紹介したAQM1248Aライブラリーから、引数の位置や変数名を変更しているので注意!!
|
|
【おまけ】
※プログラムのリストをハイライト無しのスタイルで見る場合はここをクリック
※ 本レポートの参考・利用は、あくまでも自己責任でお願いします。