Мой пример (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Андрей Сорокин 03 июня 2005 г. 18:08
В ответ на: Тут есть отправлено Андрей Сорокин 03 июня 2005 г. 17:10

Идея в следующем: определяетесь с матрицей, Ставите PullUp на строки и столбцы, подаете на строки 0, читаете состояние столбцов, затем подаете на столбцы 0 читаете строки, объединяете это в байт, далее как написано.
// D7 D6 D5 D4 | D3 D2 D1 D0 | Íàæàòà êíîïêà | Hex
// 1 1 1 0 | 1 1 1 0 | '7' | 0xEE
// 1 1 0 1 | 1 1 1 0 | '8' | 0xDE
// 1 0 1 1 | 1 1 1 0 | '9' | 0xBE
// 1 1 1 0 | 1 1 0 1 | '4' | 0xED
// 1 1 0 1 | 1 1 0 1 | '5' | 0xDD
// 1 0 1 1 | 1 1 0 1 | '6' | 0xBD
// 1 1 1 0 | 1 0 1 1 | '1' | 0xEB
// 1 1 0 1 | 1 0 1 1 | '2' | 0xDB
// 1 0 1 1 | 1 0 1 1 | '3' | 0xBB
// 1 1 1 0 | 0 1 1 1 | 'Shift' '10' | 0xE7
// 1 1 0 1 | 0 1 1 1 | '0' | 0xD7
// 1 0 1 1 | 0 1 1 1 | 'Clear' '11' | 0xB7
unsigned char keyboard_reading (){
unsigned char cod=0;
unsigned char del;
P1=0xF0;
del=0x7F;
while(del--);
cod=P1;
P1=0x0F;
del=0x7F;
while(del--);
cod|=P1;

switch (cod){
case 0xEE:
cod=7;
break;
case 0xDE:
cod=8;
break;
case 0xBE:
cod=9;
break;
case 0xED:
cod=4;
break;
case 0xDD:
cod=5;
break;
case 0xBD:
cod=6;
break;
case 0xEB:
cod=1;
break;
case 0xDB:
cod=2;
break;
case 0xBB:
cod=3;
break;
case 0xD7:
cod=0;
break;
case 0xE7:
cod=10;
break;
case 0xB7:
cod=11;
break;

default:
cod=0;
break;
}
return(cod);
}

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru