Ну совсем без рассыпухи не получится, но регистры и протч не обязательно.
Рисовать лень, попробую на словах: два порта - входы, один - выход. К выходу подключен транзистор, инвертирующий выходной сигнал.
Как итог - если на выходе единица, за транзистором ноль, если на выходе ноль, за транзистором единица.
Теперь берем наши концевики, две пары, одну пару соединяем с одной стороны и подключаем соединенными выводами к сигналу с выхода контроллера, несоединенными - ко входам контроллера через диоды.
Вторую так же соединяем и подключаем соединенными выводами к проинвертированному сигналу, несоединенными - через диоды к проинвертированному выходному сигналу (с транзистора).
Входы подтягиваем резисторами к земле, чтоб не висели "в воздухе"
Логика работы такая - на выходе попеременно меняем ноль и единицу, запитывая либо одну, либо другую пару концевиков. на входах видим сигналы с той пары, что запитана в данный момент.
А если среди свободных выводов есть входы АЦП, то можно задействовать его, тогда делаем делитель из 5 резисторов, 4 из которых ("нижние") обязательно разного номинала, заводим на этот делитель напряжение питания, параллельно каждому из 4-х "нижних" резисторов цепляем концевик, по напряжению на "нижнем" конце "верхнего" резистора можем определить любую комбинацию замкнутых концевиков...
ЗЫ про АЦП апиридили