15

私は組み込み C プロジェクトに取り組んでいます。私は LCD ディスプレイを持っており、文字ごとに 5x7 のドット マトリックスがあります。特定の文字を表示するには、オンにするドットに対応する 5 バイトをシフトする必要があります。そのため、ASCII 文字を渡すことができるキーを使用して、ある種のルックアップ テーブルを作成し、5 バイトの配列を返す必要があります。たとえば、この関数を次のように呼び出すと、

GetDisplayBytes('A');

`このような配列を返す必要があります...

C[0] = 0x7E : C[1] = 0x90 : C[2] = 0x90 : C[3] = 0x90 : C[4] = 0x7E

Cでこれを行う最良の方法は何でしょうか?

4

2 に答える 2

15

使用したい連続したASCIIブロックの配列を作成します。データ。このようなもの:

uint8_t displayBytesLetters[] = 
{
  0x73, 0x90, 0x90, 0x90, 0x73, // 'A'
  .
  .
  .
};

uint8_t displayBytesDigits[] = 
{
  0x12, 0x15, 0x25, 0x58, 0x80, // '0'
  .
  .
  .
};

次に、あなたGetDisplayBytes()は次のようなものです:

uint8_t *GetDisplayBytes(char c)
{
  if (isdigit(c))
    return &displayBytes[5*(c - '0')];
  else if (isupper(c))
    return &displayBytes[5*(c - 'A')];
  else
    return NULL;
}

返されたポインタを、データを出力する関数に渡します。

void DoDisplay(uint8_t *displayBytes)
{
  int i;
  for (i = 0; i < 5; i++) 
  {
     SendOutput(displayBytes[i]);
  }
}
于 2010-08-04T18:23:53.450 に答える
3
typedef char LCDDATA[5];   

LCDDATA lcdTable[256] = { {0,0,0,0,0},  // char 0
                          {.....},       // char 1
                        }

LCDDATA GetDisplayBytes(char chr)
{
     return lcdTable[chr];
}

これは基本的に配列の配列を作成しています。

于 2010-08-04T18:24:42.097 に答える