2

文字を文字を表す行列 (0 と 1 で構成される) に変換するプログラムまたはスクリプトを知っていますか? たとえば、文字 I から次のようなマトリックスへ: (文字 I を示す LED パネルです):

例


Thxを手で入力する以外に、このようなマトリックスを作成する方法を教えてください。

4

2 に答える 2

2

唯一の解決策は、フォントを使用することです。

  1. ハードウェアの実装には、通常、EGA / VGA 8x8フォントを使用しました

    gfx カードのBIOSから抽出すると、 MS-DOS環境で簡単に実行できます

  2. 別の方法は、画像からプログラムでフォントを抽出することです

    フォント全体をビットマップに描画します(ラインまたはマトリックスで...、または私のように既に作成されたものを使用します)。OEM_CHARSET固定ピッチ、ニーズに最も適したフォントサイズを使用してください。固定ピッチをサポートする最新のフォントはほとんどないため、そこから名前を付けたフォントを使用することを忘れないでくださいSystem。色を適切に設定し (理想は黒の背景と白のフォント)、画像をピクセル単位で読み取り、数値の表として保存します。背景色のないピクセルは設定ピクセルです。

    アンチエイリアスとフィルターのため、フォントの色と比較しないでください。すべての文字を読み取り、フォント テーブル内の対応するビットを設定/再設定します。最初x,yにイメージ内の文字の開始を計算します ( ASCIIコードとイメージ編成から)。次に、ネストされた 8 ステップx,yの for ループを 2 回実行します (font[]編成に応じた順序で) 。

    set/res~ のアドレスの対応するfont[]ビット8*ASCII8*ASCII+8

  3. MCUを使ってLEDパネルを制御していると思います

    メモリ内のフォント編成は、通常、8 ビットの数値が文字の 1 行を表すというものです。もちろん、LEDパネルがアニメーション スクロールを表示することを意図している場合は、フォントの列構成と HW の実装によって作業が大幅に簡素化されます。16 ビットMCUIOアクセスがある場合は、16-bit/ ピクセルのフォント サイズを使用できます。

    8 ピクセル以上で 8 ビット MCU しかない場合でも、16 ビット データを使用できますが、IO アクセスは 1 つではなく 2 つの IO ポートを介して 2 つのステップになります。set/res ではなく、データ全体の IO アクセスを強くお勧めします。個々のIOラインははるかに高速で、ちらつきを防ぐことができます

OK、これは私が昔使っていた古いフォントです...これはEGA/VGA BIOS8x8から抽出されたものだと思いますが、私は海岸ではありません...何年も前のものです

固定ピッチ 8x8 フォント

今楽しい部分

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 の一番上にある行
  • msbは左端のピクセルです
  • lsbは右端のピクセルです

たとえば、char '1' in8x8は次のようになります (b は 2 進数を意味します)。

00000000b,
00001000b,
00011000b,
00101000b,
00001000b,
00001000b,
00111100b,
00000000b,

すべての文字をフォント テーブルに抽出したら、それをソース コードとしてファイルに保存し、後でMCUコードに含めます ( pgm コード用にEEPROMに配置できます)。

現在、 LEDパネルに文字を出力するアルゴリズムは、ハードウェアの実装に大きく依存しています。

  • LEDパネルと制御システム間の相互接続の回路図を投稿してください
  • ターゲット プラットフォームと言語を指定する
  • 必要な機能を指定する

ピクセル単位で左にスクロールしたいと思います

  1. LED パネルが行ではなく列によって駆動される場合に最適です。

    いくつかのデータ IOポート (一度にすべてのビットをアクティブにすることができます) によってLEDの 1 つの列をアクティブにすることができ、どの列をアクティブにするかを選択することは、別の選択 IOポートによって駆動されます (一度に 1 つのビットのみをアクティブにすることができます)。したがって、この場合、フォント テーブルに表示する列の開始アドレスを計算します。

    • address = (8*ASCII + x_offset)
    • データIOポートfont[8*ASCII + x_offset]に送信
    • 正しいビットをアクティブにして選択 IOポートをアクティブにします
    • しばらく待ちます (1 ~ 10 ミリ秒) ...遅延が短すぎると実際に光が見え、遅延が長すぎると明るさがなくなり、ちらつきが発生するため、少し実験する必要があります (選択の数によって異なります)。ビット)。
    • IOポートの選択を無効にする
    • 次の列で繰り返します
    • x_offsetスクロールシフトです
  2. ハードウェアの実装がそのような方法に適合しない場合でも、心配しないでください

    ビット SHIFT、AND、OR 演算を使用してメモリ内にデータ ワードを作成し、同様の方法で送信します。

それが少し役立つことを願っています

于 2013-12-09T11:03:49.227 に答える
0

希望どおりに見えるフォント (おそらく Courier などの等幅フォント) を見つけ、アンチエイリアスなしで特定のサイズ (8pt?) で描画/ラスタライズし、結果の画像をマトリックス形式に変換することができます。 .

于 2013-01-07T13:41:39.027 に答える