key = keypad(keypress, first);
PORTB = 0xFD;
keypress = PORTB;
key = keypad(keypress, second);
PORTB = 0xFB;
keypress = PORTB;
key = keypad(keypress, third);
PORTB = 0xF7;
keypress = PORTB;
key = keypad(keypress, fourth);
}
}
/*------------------------------------------------------------------------*/
/*Функция keypad определяет, была ли нажата какая-либо клавиша. */
/*Функция сравнивает прочитанное значение порта PORTB с тем значением, */
/*которое было выдано на порт PORTB. Если они равны, то ни одна клавиша в */
/*ряду не нажата */
/*------------------------------------------------------------------------*/
char keypad(unsigned char keypress, unsigned char row) {
char key1;
if (keypress != row) { /*какая-то клавиша нажата*/
key1 = which_key(keypress); /*определить клавишу*/
putchars(key1); /*передать символ на дисплей*/
} else if(keypress == row) { /*ни одна из клавиш не нажата*/
key1 = 'Z';
}
return (key1);
}
/*------------------------------------------------------------------------*/
/* Функция char which_key определяет код нажатой клавиши методом перебора */
/*табличных значений */
/*------------------------------------------------------------------------*/
char witch_key(unsigned char keypress) {
char key;
switch(keypress) /*распознавание кода клавиши*/
{
case 0xEE:
key = '0'; /*нажата клавиша "0"*/
break;
case 0xDE:
key = '1'; /*нажата клавиша "1"*/
break;
case 0xBE:
key = '2'; /*нажата клавиша "2"*/
break;
case 0x7E:
key = '3'; /*нажата клавиша "3"*/
break;
case 0xED:
key = '4'; /*нажата клавиша "4"*/
break;
case 0xDD:
key = '5'; /*нажата клавиша "5"*/
break;
case 0xBD:
key = '6'; /*нажата клавиша "6"*/
break;
case 0x7D:
key = '7'; /*нажата клавиша "7"*/
break;
case 0xEB:
key = '8'; /*нажата клавиша "8"*/
break;
case 0xDB:
key = '9'; /*нажата клавиша "9"*/
break;
case 0xBB:
key = 'A'; /*нажата клавиша "A"*/
break;
case 0x7B:
key = 'B'; /*нажата клавиша "B"*/
break;
case 0xE7:
key = 'C'; /*нажата клавиша "C"*/
break;
case 0xD7:
key = 'D'; /*нажата клавиша "D"*/
break;
case 0xB7:
key = 'E'; /*нажата клавиша "E"*/
break;
case 0x77:
key = 'F'; /*нажата клавиша "F"*/
break;
default:
key = 'Z';
} /*конец распознавание кода клавиши*/
return(key);
}
/*----------------------------------------------------------*/
Представленный программный код не является полностью завершенной рабочей программой, поскольку в нем отсутствуют элементы защиты от дребезга контактов, отсутствует текст функции вывода символов на ЖК дисплей. Мы исправим эти недостатки несколько позже, в разделе 5.6.