имеем проектик (в архиве для атмел студии 6й и схемка проект в протеус) Atmega16.
разбираться вам конечно полагаю будет долго: краткий курс:
клавиатура 4х4. с каждых 8ми кнопок получаем на портА значение нажатой кнопки + прерывание INT0|INT1.
при прерывании заводим таймер1 на 50мсек в режиме стс. прерывание таймера1 - проверяем действительно ли нажата - если да то обрабатываем что за клавиша и запускаем таймер для проверки отпускания (защита от повторного срабатывания), нет - то сброс таймера и выход.
в обработке клавиш - если режим сценариев включен - запуск сценария, если нет то тупо инвертируется бит на PORTC/PORTB. если была нажата клавиша 12 (INT1, на PORTA значение 0b01000111) - включается режим сценариев (взводим соответствующий бит(_const_scenario) в _var_params).
в принципе остальное полагаю не суть важно. главная теперь проблема:
1-в протеусе откомпилированый кекс отрабатывает всё красиво,
2-после заливки кекса в атмегу случается беда
в большинстве случаев нажатие любой клавиши обрабатывается как нажатая первая клавиша в режиме сценариев. один раз удалось таки поинвертировать выходы, но зачастую нажатие клавиш обрабатывается как нажатие первой клавиши.