ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
95522 Топик полностью
Dany (27.07.2007 16:23, просмотров: 1) ответил rezident на Не-а. Не будет работать.
Спасибо, за замечания. Будет по простому... <c> char key; // Код нажатой клавиши, формируется KB_Read_2x3 char inkey(void) { static char press; char pressNow; pressNow=key; //получаем скан нажатой кнопки if (!(pressNow^press)) key=0; /* Если код клавиши не изменился значит не нажата новая клавиша*/ press=pressNow; return key; } /****************************************************************************** Опрос клавиатуры. Возвращает код нажатой кнопки в переменную 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); // возвращаем полученные коды состояний столбцов и строк }