to Митя
краткая инструкция о том как присобачить дополнительные кнопки

Pon (красная) - переходить к регулировке Bass;
Pst (зелёная) - к регулировке Treble;
Psz (желтая) - к регулировке Attens. 

это пример кнопок на пульте как в статье
для других пультов все аналогично только надо знать коды этих кнопок

хочу предупредить что это краткая инструкция тоесть описание действий и для понимания исходника в назначения нужных нам переменных
свои мозги придеться применить сто пудов

итак ставим задачу
мы хотим чтоб по нажатию кнопки на пульте
Pon (красная) - переходить к регулировке Bass;
Pst (зелёная) - к регулировке Treble;
Psz (желтая) - к регулировке Attens. 

открываем файл preamp.h
ищем там определения режимов

#define VOLUME_MENU   0
#define ATTENS_MENU   1
#define BASS_MENU     2
#define TREBLE_MENU   3
#define BALANS_F_MENU 4
#define BALANS_R_MENU 5

и чуть ниже описание переменной 

signed char nmenu, omenu;

так вот если присвоить переменной nmenu одно из значений от 0 до 5
то мы переключимся в тот режим который нам надо
при нажатию кнопки на пульте
Pon (красная) - nmenu = BASS_MENU; //переходить к регулировке Bass;
Pst (зелёная) - nmenu = TREBLE_MENU; //к регулировке Treble;
Psz (желтая) -  nmenu = ATTENS_MENU; //к регулировке Attens. 

вроде понятно написал.... дальше
куда это вставить
открываем preamp.c

идем в самый конец файла
ищем главную процедуру 
int main()
{
.....
чуть ниже находим нужную нам конструкцию
.....
  all_key = Read_All();
  if (all_key != KBD_NOKEY)
  {
    tm1_flag = 0;
	tm1_sleep_flag = -1;
	tm1_sleep_cnt = 0L;
    Timer1_Start();
    switch (all_key) // switch
    { 
      case KBD_UP:
        nmenu--;
  	    if (nmenu < 0) nmenu = MENU_MAX;
        menu_ref = 1;
        scrbar_ref = 1;
	  break;
      case KBD_DOWN:
        nmenu++;
	    if (nmenu > MENU_MAX) nmenu = 0;
        menu_ref = 1;
        scrbar_ref = 1;
	  break;
......

конструкция вида
  all_key = Read_All();
получает код клавиши вне зависимости от того где она была нажата на клавиатуре валкодере или пульте
к ней мы еще вернемся

потом видим конструкцию типа
    switch (all_key) // switch
    { 
      case KBD_UP:
        nmenu--;
  	    if (nmenu < 0) nmenu = MENU_MAX;
        menu_ref = 1;
        scrbar_ref = 1;
	  break;
и так далее в конкретном примере мы видим что при нажатии на клавишу
"ВВЕРХ" (UP) мы выполняем какие то действия

как мы определили ранее нам нужно добавить нечто подобное
      case 52: // для примера например код клавиши Pon (красная) = 52
        nmenu = BASS_MENU; //перевели в режим регулировки басов
        menu_ref = 1; // флаг перерисовки меню
        scrbar_ref = 1; // флаг перерисовки скробара
        break;

для остальных клавиш аналогично

вернемся к 
  all_key = Read_All();

смотрим эту процедуру
так как необходимые кнопки у нас есть только на пульте то нас интерисует вот это
  ret_key = rc5_key;
получение кода нажатой клавиши с пульта
где же присваевается rc5_key спросите вы

конечно же в обработчике прерывания от пульта
это у нас процедура
ISR(SIG_INTERRUPT0)
{

смотрим и вот он ключевой момент

  rc5_key = Get_RC5_keyEE(Rc5decoder());

.....

Rc5decoder() - это сам обработчик протокола RC5 его мы не трогаем он и так отрабатывает все клавиши
а вот вернется ли код в систему отвечает функция Get_RC5_keyEE()

смотрим ее (привожу ее полностью

unsigned char Get_RC5_keyEE(unsigned char k)
{
unsigned char ret_key = KBD_NOKEY;
if (k == rc5setinput1) ret_key = KBD_SETINPUT_1;
else if (k == rc5setinput2) ret_key = KBD_SETINPUT_2;
else if (k == rc5setinput3) ret_key = KBD_SETINPUT_3;
else if (k == rc5left) ret_key = KBD_LEFT;
else if (k == rc5right) ret_key = KBD_RIGHT;
else if (k == rc5up) ret_key = KBD_UP;
else if (k == rc5down) ret_key = KBD_DOWN;
else if (k == rc5mute) ret_key = KBD_MUTE;
else if (k == rc5londness) ret_key = KBD_LONDNESS;
else if (k == rc5standby) ret_key = KBD_STANDBY;
else if (k == rc5menu) ret_key = KBD_MENU;
else if (k == rc5set) ret_key = KBD_SET;
return (ret_key);
}
в ней сравнивается код клавиши с пульта и преобразуется в команду для системы
сдеся видим не понятнные переменные типа
rc5setinput1
rc5setinput2
rc5setinput3
rc5menu

это переменные в которых храниться коды клавиш пульта прошитые в EEPROM
они туда считываются при загрузки системы

для полноты надо бы конечно определить дополнительные переменные для наших трех клавиш
потом придеться отредактировать процедуру считывания из EEPROM

но для простоты мы просто давим несколько строк
перед
return (ret_key);
....
else if (k == 52) ret_key = 52; // 52 это код клавиши Pon (красная) или какой он там у вас поправьте
else if (k == 53) ret_key = 53; // 53 это код клавиши Pst (зелёная) или какой он там у вас поправьте
else if (k == 54) ret_key = 54; // 54 это код клавиши Psz (желтая) или какой он там у вас поправьте
..

вот кратко как то так

Сложно да? Возможно! - сделайте лучше а мы похвалим однозначно