ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
95422 Топик полностью
Dany (27.07.2007 09:48, просмотров: 1) ответил Dany на Здравствуйте, Уважаемые. Помогите разобраться с матричной клавиатурой. Возник ряд вопросов, нуждающихся в ответе.
Посмотрите пожалуйста, подкорректированный вариант... <c> char key; // Код нажатой клавиши, формируется KB_Read_2x3 void inkey(void) { static char compare, press; char pressNow; pressNow=key; //получаем скан нажатой кнопки if (((pressNow^press)==0)&&((pressNow^compare)!=0)) key=pressNow; /* Если текущее и предыдущее нажатия совпадают значит дребезга нет Если код клавиши изменился значит нажата новая клавиша, сохраняем ее в key*/ compare=pressNow; press=pressNow; } /****************************************************************************** Опрос клавиатуры. Возвращает код нажатой кнопки в переменную code. В старшей тетраде – состояние линий строк, в младшей тетраде – состояние линий столбцов Если в одной из тетрад кода кнопки более одной единицы, код не действительный ******************************************************************************/ // Прерывание TIMER 0 для опроса клавиатуры каждые 32 ms interrupt [TIM0_OVF] void KB_Read_2x3(void) { char code1, code2; KB_DDR_ROW &= ~KB_ROW_WIRES; // порт строк на ввод KB_PORT_ROW |= KB_ROW_WIRES; // к выводам порта строк подключаем pull-up резисторы KB_DDR_COL |= KB_COL_WIRES; // порт столбцов на вывод KB_PORT_COL &= ~KB_COL_WIRES; // на всех выводах порта столбцов лог "0" #asm("nop") // задержка на один такт, для установления сигналов на выводах порта code1 = (KB_PIN_ROW >> KB_ROW_SHIFT) & 0x3; // считываем состояние линий строк и преобразуем в код KB_DDR_COL &= ~KB_COL_WIRES; // порт столбцов на ввод KB_PORT_COL |= KB_COL_WIRES; // к выводам порта столбцов подключаем pull-up резисторы KB_DDR_ROW |= KB_ROW_WIRES; // устанавливаем направление порта строк на вывод KB_PORT_ROW &= ~KB_ROW_WIRES; // на всех линиях порта строк лог "0" #asm("nop") // задержка на один такт, для установления сигналов на выводах порта code2 = (KB_PIN_COL & 0xE0); // считываем состояние линий столбцов и преобразуем в код key=~(code1 | code2 | 0x1C); // возвращаем полученные коды состояний столбцов и строк inkey(); } </c>