Составители:
59
void KBD_int(void){//== обработчик нажатия на клавишу
char row,col,temp,r,i; //== col - номер колонки слева, row - номер ряда
//== сверху
INTKBSCR|=(1<<ACKK); //== подтверждаем обработку прерывания
Delay(800); //== задержка на время возможного дребезга при нажатии
if((r=(PTA&0xF0)>>4)==0x0F)goto exit; //== r=0111(7), 1011(11),
1101(13), 1110(14)
//== "goto exit" игнорирует возможный дребезг при отпускании
клавиши
//== и появление кода r = 1111 вместо 0111..1110
row=rown[r]; //== выбираем из таблицы номер ряда = (0,1,2,3)
for(i=0;i<3;i++){//== ищем в какой колонке находится нажатая
клавиша
PTA|=0x08>>i; //== последовательно "перекрываем" единицей
колонки
//== PTA3..1(col=2..0)
if((PTA&0xF0)==0xF0){col=2-i;break;}//== если 1 перекрыла 0 –
//== закончить проверку
}
keynum=col+row*3; //== вычисляем номер нажатой клавиши (0..11) в
//== таблице key
exit:
PTA=0b11110001; //== возвращаем начальное состояние выводов
порта А
INTKBSCR|=(1<<ACKK); //== сбрасываем возможные запросы при
//== манипулир. с битами PTA
keypressed=1; //== устанавливаем признак (флаг) нажатия клавиши
(этот
//== признак можно использовать в основной программе - main())
}
9.3 МОДУЛЬ АЦП
Модуль 8-разрядного аналого-цифрового преобразователя ADC08
(рис. 2.6), входящего в состав MC68HC908GP32, содержит входной
мультиплексор, осуществляющий выбор одного из восьми входов
аналогового сигнала, АЦП последовательного приближения, регистр
управления-состояния ADSCR, регистр настройки тактовой частоты ADCLK
и регистр результата преобразования ADR. Входы AD0-AD7 модуля ADC08
совмещены с выводами PTB0-PTB7 параллельного порта B. Так как в один и
тот же момент времени может использоваться только один вход АЦП, то
остальные выводы порта B доступны для параллельного ввода-вывода.
Страницы
- « первая
- ‹ предыдущая
- …
- 57
- 58
- 59
- 60
- 61
- …
- следующая ›
- последняя »