Глюк решен, благодаря собственным усилиям и не без помощи вышеперечисленных спецов (еще раз спасибо).
Но советую просмотреть внешнюю ссылку:
http://eugenemcu.ru/publ/2-1-0-45
Все очень доступно описано и код практически рабочий
Выкладываю доработанный код:
--------------------------------------------------------------------
--------------------------------------------------------------------
//#include ‹mega8535.h›
//#include ‹DELAY.H› // для обработки задержек
#define PORTx PORTB
#define DDRx DDRB
#define PINx PINB
char Key;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
Key=0;
PORTx=0xFF;
PORTx&=~(1‹‹0); // Выбрать столбец 1.
switch (PINx)
{
case 0b11101110: {Key=1; break;} // Кнопка 1A.
case 0b11011110: {Key=2; break;} // Кнопка 1B.
case 0b10111110: {Key=3; break;} // Кнопка 1C.
case 0b01111110: {Key=4; break;} // Кнопка 1D.
}
PORTx=0xFF; // Исходное состояние.
PORTx&=~(1‹‹1); // Выбрать столбец 2.
switch (PINx)
{
case 0b11101101: {Key=5; break;} // Кнопка 2A.
case 0b11011101: {Key=6; break;} // Кнопка 2B.
case 0b10111101: {Key=7; break;} // Кнопка 2C.
case 0b01111101: {Key=8; break;} // Кнопка 2D.
}
PORTx=0xFF; // Исходное состояние.
PORTx&=~(1‹‹2); // Выбрать столбец 3.
switch (PINx)
{
case 0b11101011: {Key= 9; break;} // Кнопка 3A.
case 0b11011011: {Key=10; break;} // Кнопка 3B.
case 0b10111011: {Key=11; break;} // Кнопка 3C.
case 0b01111011: {Key=12; break;} // Кнопка 3D.
}
PORTx=0xFF; // Исходное состояние.
PORTx&=~(1‹‹3); // Выбрать столбец 4.
switch (PINx)
{
case 0b11100111: {Key=13; break;} // Кнопка 4A.
case 0b11010111: {Key=14; break;} // Кнопка 4B.
case 0b10110111: {Key=15; break;} // Кнопка 4C.
case 0b01110111: {Key=16; break;} // Кнопка 4D.
}
PORTx=0; // Исходное состояние порта. Не обязательно
PORTC.3=1; // Подключил лампочку, чтобы удостовериться,
delay_ms(100); // что прерывание обрабатывается
PORTC.3=0; // рекомендую не убирать.
}
--------------------------------------------------------------------
Обращение в проге:
--------------------------------------------------------------------
while (1)
{
lcd_gotoxy(0,1);
lcd_putchar(Key+0x30);
out(Key,3); // Внешняя прога, включена в архив
};
--------------------------------------------------------------------
--------------------------------------------------------------------
Рекомендую просмотреть вложение.
Прога собрана в CodeVisionAVR. Тестилась в Рroteus"е на ATMEGA8535.
Клавиатура 4х4.
Если есть замечания - обращайтесь.