Что лучший способ состоит в том, чтобы сделать справочную таблицу в C?

Я работаю над встроенным проектом C. У меня есть жидкокристаллический дисплей и для каждого символа существует 5x7 точечная матрица. Для отображения определенного символа, необходимо переключить на нижний регистр 5 байтов, которые коррелируют с точками для включения. Таким образом, я должен сделать некоторую справочную таблицу с ключом, куда я могу передать в символе ASCII и получить массив возвращенных 5 байтов... Например, вызов к этой функции как это,

GetDisplayBytes('A');

должен возвратить 'массив как это...

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

Каков был бы лучший способ сделать это в C?

12
задан Carl Norum 4 August 2010 в 18:21
поделиться

2 ответа

Я бы сделал массивы для смежных блоков 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]);
  }
}
14
ответ дан 2 December 2019 в 20:15
поделиться
typedef char LCDDATA[5];   

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

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

Это в основном создает массив массивов.

2
ответ дан 2 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: