Я читаю нажатия клавиш с клавиатуры 4x4, подключенной к микроконтроллеру, но, поскольку клавиатура разделена на строки и столбцы, для указания строки и столбца читается только 0001 или 1000 et c.
I у меня в основной таблице есть таблица поиска символов для клавиатуры, например:
char keys[4][4]={
// c3 c2 c1 c0
{'1','2','3','A'}, //row4 PortA4 1000
{'4','5','6','B'}, //row3 PortA3 0100
{'7','8','9','C'}, //row2 PortA2 0010
{'*','0','#','D'} //row1 PortA1 0001
};
Я хочу, чтобы входы, считанные с клавиатуры, могли напрямую индексировать эту таблицу и распечатывать указанный символ, но, естественно, любое число выше 3 выходит за пределы. Я хочу иметь возможность использовать что-то вроде
printf("Key Pressed: %c",keys[indexrow][indexcolumn]);
, но сейчас у меня это жестко закодировано следующим образом:
...
while(1)
{
//begin polling
row_data=0x01;//bottom row
bus.IOWrite(PortA,row_data);
column_data=b&bus.IORead(PortB);
if((column_data & b)!=0)
{
//printf("Keypress detected @row %0b @column %0b",row_data,column_data);
switch(column_data)
{
case 0x01:printf("Key Pressed: D");break;
case 0x02:printf("Key Pressed: #");break;
case 0x04:printf("Key Pressed: 0");break;
case 0x08:printf("Key Pressed: *");break;
default: break;
}
}
.
.
.
Полагаю, было бы проще создать таблицу 8x8 с внутри много пустых мест, но на это было бы не так приятно смотреть.