文字を文字を表す行列 (0 と 1 で構成される) に変換するプログラムまたはスクリプトを知っていますか? たとえば、文字 I から次のようなマトリックスへ: (文字 I を示す LED パネルです):
Thxを手で入力する以外に、このようなマトリックスを作成する方法を教えてください。
唯一の解決策は、フォントを使用することです。
ハードウェアの実装には、通常、EGA / VGA 8x8フォントを使用しました
gfx カードのBIOSから抽出すると、 MS-DOS環境で簡単に実行できます
別の方法は、画像からプログラムでフォントを抽出することです
フォント全体をビットマップに描画します(ラインまたはマトリックスで...、または私のように既に作成されたものを使用します)。OEM_CHARSET
固定ピッチ、ニーズに最も適したフォントサイズを使用してください。固定ピッチをサポートする最新のフォントはほとんどないため、そこから名前を付けたフォントを使用することを忘れないでくださいSystem
。色を適切に設定し (理想は黒の背景と白のフォント)、画像をピクセル単位で読み取り、数値の表として保存します。背景色のないピクセルは設定ピクセルです。
アンチエイリアスとフィルターのため、フォントの色と比較しないでください。すべての文字を読み取り、フォント テーブル内の対応するビットを設定/再設定します。最初x,y
にイメージ内の文字の開始を計算します ( ASCIIコードとイメージ編成から)。次に、ネストされた 8 ステップx,y
の for ループを 2 回実行します (font[]
編成に応じた順序で) 。
set/res
~ のアドレスの対応するfont[]
ビット8*ASCII
8*ASCII+8
MCUを使ってLEDパネルを制御していると思います
メモリ内のフォント編成は、通常、8 ビットの数値が文字の 1 行を表すというものです。もちろん、LEDパネルがアニメーション スクロールを表示することを意図している場合は、フォントの列構成と HW の実装によって作業が大幅に簡素化されます。16 ビットMCUとIOアクセスがある場合は、16-bit
/ ピクセルのフォント サイズを使用できます。
8 ピクセル以上で 8 ビット MCU しかない場合でも、16 ビット データを使用できますが、IO アクセスは 1 つではなく 2 つの IO ポートを介して 2 つのステップになります。set/res ではなく、データ全体の IO アクセスを強くお勧めします。個々のIOラインははるかに高速で、ちらつきを防ぐことができます
OK、これは私が昔使っていた古いフォントです...これはEGA/VGA BIOS8x8
から抽出されたものだと思いますが、私は海岸ではありません...何年も前のものです
今楽しい部分
const BYTE font[8*256]={ 0,0,0,0,0,0,0,0, ... }
任意の文字は 8 つの数字で表されます。ビットの場合0
は紙 (背景ピクセル) を意味し、ビットの場合1
はインク (フォント ピクセル) を意味します。組み合わせが増えました (左から右、上から下、およびそれらの組み合わせ)
OK (row-vise | left to right | up to down) 編成の意味:
たとえば、char '1' in8x8
は次のようになります (b は 2 進数を意味します)。
00000000b,
00001000b,
00011000b,
00101000b,
00001000b,
00001000b,
00111100b,
00000000b,
すべての文字をフォント テーブルに抽出したら、それをソース コードとしてファイルに保存し、後でMCUコードに含めます ( pgm コード用にEEPROMに配置できます)。
現在、 LEDパネルに文字を出力するアルゴリズムは、ハードウェアの実装に大きく依存しています。
ピクセル単位で左にスクロールしたいと思います
LED パネルが行ではなく列によって駆動される場合に最適です。
いくつかのデータ IOポート (一度にすべてのビットをアクティブにすることができます) によってLEDの 1 つの列をアクティブにすることができ、どの列をアクティブにするかを選択することは、別の選択 IOポートによって駆動されます (一度に 1 つのビットのみをアクティブにすることができます)。したがって、この場合、フォント テーブルに表示する列の開始アドレスを計算します。
address = (8*ASCII + x_offset)
font[8*ASCII + x_offset]
に送信x_offset
スクロールシフトですハードウェアの実装がそのような方法に適合しない場合でも、心配しないでください
ビット SHIFT、AND、OR 演算を使用してメモリ内にデータ ワードを作成し、同様の方法で送信します。
それが少し役立つことを願っています
希望どおりに見えるフォント (おそらく Courier などの等幅フォント) を見つけ、アンチエイリアスなしで特定のサイズ (8pt?) で描画/ラスタライズし、結果の画像をマトリックス形式に変換することができます。 .