Я работаю над встроенным проектом C. У меня есть жидкокристаллический дисплей и для каждого символа существует 5x7 точечная матрица. Для отображения определенного символа, необходимо переключить на нижний регистр 5 байтов, которые коррелируют с точками для включения. Таким образом, я должен сделать некоторую справочную таблицу с ключом, куда я могу передать в символе ASCII и получить массив возвращенных 5 байтов... Например, вызов к этой функции как это,
GetDisplayBytes('A');
должен возвратить 'массив как это...
C[0] = 0x7E : C[1] = 0x90 : C[2] = 0x90 : C[3] = 0x90 : C[4] = 0x7E
Каков был бы лучший способ сделать это в C?
Я бы сделал массивы для смежных блоков 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]);
}
}
typedef char LCDDATA[5];
LCDDATA lcdTable[256] = { {0,0,0,0,0}, // char 0
{.....}, // char 1
}
LCDDATA GetDisplayBytes(char chr)
{
return lcdTable[chr];
}
Это в основном создает массив массивов.