Возможно с таймингами не так. delay(100) это по 1/10 секунды. Возможно не в каждом месте этой паузы достаточно (а где-то - с избытком). Предположительно, с зажатой "y" нужно меньше задержку делать, и шифт отпускать после. Типа вот так:
Код:
SetAddr(table[0x35]);
SetKey(d); //нажали Y
delay (50);
d = LOW;
SetAddr(table[0x35]);
SetKey(d); //отжали Y
delay (50);
SetAddr(table[0x14]);
SetKey(d); //отжали SymShift
d = HIGH;
В любом случае, это не даст возможность вводить [ с автоповтором (если не отпускать клавишу), это больше для одиночного. Для автоповтора нужно еще помудрить.