« 2026年9月 | メイン

2026年10月28日 (水)

グラフィックLCD用ASCII文字フォントの作成

私のブログの中で、グラフィックLCDに英文の文字を表示させているプログラムが沢山ありますが、ブログを見て頂いた方から、フォントの作り方の問い合わせがありました。 私が公開しているASCII文字、記号のフォントは全て、ドット升に描かれた白黒のピクセルデータを読ませて作ったオリジナルで、ご自由にコピーしたり、配布しても構いませんが、新たに作成したい事も生じるでしょう。

その為に、フォント自作の方法を具体的に紹介します。

エクセルの升をピクセルに見立て、設定した縦横のドットの升を黒く塗って文字を作成し、これの横列を左の升から黒の時「1」、白の時「0」と定義し、読み取ったデータをひだり詰め8bitデータと記録し、水平の一行目が終了したら、8ビット単位で並べたデータに置き換えます。次に2行目に移り同じように処理します。

これを公開されている文字作成ツールで一つのフォントを作りますが、必要な文字、記号は全部で95ありますので、途中で間違ったり、形の統一がされなくて、投げ出したくなります。 私も当初は同じ道を歩きました。 そこで、ドット文字の作成は1文字づつしかできないにせよ、95文字のデータができたら自動的にC言語で扱えるFONTデータが作れるように思考錯誤して完成したフォント作成手順を以下説明します。

 

1.ドットデータの作成

WindowsのPCに標準で入っている「ペイント」を開きます。 開いた空白画面を800%倍率で表示させます。 

以下、横7、縦10サイズのフォント文字の原稿を作成する手順を説明します。

①画面の左上のはしっこに内側のドット数が横7ドット、縦10ドットになる四角の枠を幅1ドットの黒以外の色で描きます。 この時の線幅はペイントを立ち上げた時点では5pxになっていますので、直線を引くコマンドを選択した後、線幅を1pxに修正して下さい。

1mojiwaku1

②左上に描いた四角の枠をコピーして下の画像のように95個以上並べます。 1個コピーして右に並べると2個になりますので、今度は2個をコピーして同じ様に並べると4個の枠ができます。これを繰り返して95個をこえるまでつづけます。1mojiwaku2_2 ③次に、上の画面のように、一番左の枠の左上のはしっこのドット(赤色で着色したドット)の座標を記録します。このドット位置がフォントデータを読み取る基準座標になります。

この赤色の着色は、説明の為に付けたもので、実際のペイントの画面上では着色しません。

④次に作成したペイントの文字枠の中に、実際に表示させる文字をドットの白黒だけで表現します。この文字、記号の順序は決まっていて、ASCII表に出てくる順序のままでなければなりません。従い、最初の升はスペースですので、完全に空白でなければなりません。次の文字は感嘆符です。ASCIIの文字と記号の順序を全て覚えている方はまれで、私も全く覚えていませんので、ASCII文字表を印刷して、それを見ながらドットのデザインを行っています。 そうやって出来たフォント原稿の一部を下に示します。 また、このGIF画像を後でダウンロード出来るようにしました。

Font7all95smpl

⑤上のドット文字が「~」まで完成したら以下の画面の様に、自動作成用アプリに入力する為のデータを書き込んで置きます。

Font7all95data最初のX=14とY=10は③の説明で示したスペース枠の左上の座標です。 (③で示した画像と実際のサンプルは別物です。)次のFont size:7x10はこのフォントの実際のサイズです。 Pitch:1は升と次の升の境目のドット幅で、見本画像の青色線の幅になります。通常は「1」です。 Fomt数はASCII全文字、記号を扱う時は95固定です。 これをセーブする時は必ず「.gif」でセーブします。

 

2.フォント作成用アプリが動作する時必要となるインタプリンタのインストールです。

このアプリの言語はtcl/Tkと呼ばれるインタプリンタで作成されており、このインタプリンタをPCの中にインストールしなければ動作しません。tcl/Tkがインストールされている、Windows、Mac,Linux,Unix全てのPC上で動作可能です。tcl/Tkは無料でダウンロード、インストール出来ます。ここを訪問して下さい。

このページの「ダウンロードはSourceforgeから入手可能です。」とあるSourceforgeのリンクへつなぎます。(原文は英語です。日本語に翻訳してあります)

Sourceforgeに移るとダウンロードできるプログラムリストが現れますので、私はこれをクリックしました。

tcl-8.6.17-installer-1.17.0-x64.msi

ダウンロードが成功したら、そのファイルをダブルクリックするとインストールが始まります。

インストールされれる場所は通常のアプリと異なり以下のホルダーになります。

インストール先:C:\Users\ユーザー名\AppData\Local\Apps\Tcl86\bin\

この情報は、アプリを最初に起動するとき、どのプログラムで開くか聞かれますので、binの下にあるwish.exeを指定します。

 

3.いよいよFont作成用のアプリと関連ファイルの設定と実行です。

「ドキュメント」のホルダーのどこでも構いませんので。「TK」というホルダーを作り、このホルダーの中に以下のファイルをダウンロードして置いて下さい。 TKの名前は任意です。なんでも構いません。

Font_Ccord_Generator_for_PIC_2.tclをダウンロード

Font_index95.idxをダウンロード

Font_index11.idxをダウンロード

Font7all95.gifをダウンロード

4つのファイルをダウンロード完了したら、[.tcl]のファイルをダブルクリックします。 すると、2.項で説明した通り、どのアプリで開くか聞いてきますので、説明通り指定します。 すると、以下のダイアログが立ち上がります。 文字が読みにくい時は画像をクリックすると拡大します。

Tcl_top

「最初にGIFの画像かFontファイルを開いて下さい」のダイアログの「OK」をクリックしてこれを消します。 次に右下にある「GIF開く」をクリックすると下のダイアログが現れますので、この中の「Font7all95.gif」ファイルをクリックし、右下の「開く」をクリックします。

Gif_select

すると、以下の様にGIF画像が表示されます。 これは、私が作った95個のフォント作成原画です。

Gifdata

次に、右枠の「連続フォント作成定義」のランに必要データを記入していきます。

「フォントサイズ」X,Yは左側の画面にsize:7x10とありますので、Xに7、Yに10と記入します。

「最初のフォントの左上の座標」には、Xに14、Yに10と記入します。

「フォント間のピッチ」には1と記入します。

「フォントの全個数」には95と記入します。

「フォント名」は任意の名前で良いのですが、ここでは Font7 と書いて置きます。

記入した数値が左側の画像に表示されている数値と合致している事を確認したら、「連続フォント」をクリックします。 すると、以下のダイアログが現れます。

Index_select

この中でFont_index95.idx を選び「開く」をクリックすると、

Font_out左のダイアログが現れ、Font7のファイルが同じホルダーに作成され完了です。「OK」をクリックし、かつ、Tclのアプリを閉じた後、エクスプローラーでこのホルダーを表示させると「Font7.h」というファイルが出来ています。

エジターでこのファイルを開くと、C言語で書かれたFontデータが出来ているのがわかります。

このようにして出来たFontファイルを使って、LCD上に文字を表示するプログラム例は以下の記事を参照ください。

LCD NFP190B-21AF PICで表示

この作業の途中でIndexファイルを開くとき、「Font_index11.idx」というファイルがみえましたが、このindexファイルは、スペースと0から9までの大きなFontを作成する時に使います。PICのRAMサイズは限られていますので、例えばフォントサイズ22x44みたいな大きなフォントを95個も作ると、それだけで、RAMサイズをオーバーして、使えません。時計や、カウンターや電圧計などのプログラムを作った時、数字だけは大きく表示したい場合、数字のみのフォントを作りRAMの使用量を押さえたい時に使うものです。

私の作ったGIF見本:font22_11.gifをダウンロード

 

現在は、ASCII全95文字とスペース+数字の組み合わせの時のみ自動作成が出来、例えば小文字だけ、あるいは記号はいらないとかの対応はやっていませんので、その場合、出来たFontデータとtableデータをご自身で修正して下さい。

このtclのアプリは本来、PCで作成されたGIF画像をPICマイコンでLCDに表示する為に作成されたプログラムで、今回のフォント作成用アプリにも、その時の残骸が残っています。従い、この記事で説明されたボタン以外をクリックしたら、予想外の挙動やエラーが発生します。もし間違って説明以外の状態になりましたら、一度アプリを終了して、再度立ち上げてご利用下さい。また、アプリのソースはエジターで読む事が出来ますが、当初の関数もそのまま残っています。不要と判断して削除したらエラーになる可能性もあります。

 

INDEXに戻る