Так пульта нет или он неисправен?
Ты хочешь замену тому пульту сделать или сделать похожий по принципу пульт, но не для машины?
Если те 2 кнопки только меняют состояния диодов, то сами кнопки нам не интересны - тогда только состояния диодов нужно передавать.
Диодами управляют 2 флип-флопа, регистр передает состояние. Триггеры тогда только как генераторы идут.
При нажатии на кнопку включаются 2 генератора. Один из них тактовый, второй частотой пониже раз в десять - запирает регистр время от времени.
Пока кнопка нажата, постоянно передается ее состояние. Стробы идут автоматом - 8 бит данных, потом нули до тех пор, пока регистр опять не запрется.
Когда отпускаем кнопку - генераторы глохнут.
Приемник принимает посылки до тех пор, пока не встретит несколько одинаковых. После ничего не принимает команды, только ждет когда кнопку отпустим.
Хватит и трех штук, но можно и десять - в зависимости от частоты тактового генератора. На 1кгц 8 бит данных + 8 бит строба займут 0.016 сек. 10 таких посылок 0.16 сек - многовато, но терпимо. Три - вообще не заметно. Человек не успеет кнопку отпустить.
Даташит на регистр можно не смотреть - лучше почитай
этот учебник.
Вкратце у регистра 2 входа. Один вход sin - последовательный вход, другой - 8 линий параллельного входа.
Есть 3 выхода - после 8-го, 7-го и 6-го бита. Нам нужен самый полный - после 8-го, иначе до двух бит теряем.
Есть тактовый вход - по фронту положительного импульса регистр подает на выходы сохраненные данные, сдвигая их от младшего к старшему - от первого к восьмому. Соответственно первым на выход поступает 8-й бит, потом 7-й и т.д.
Во время сдвига первый бит наполняется из входа sin. Когда регистры идут цепочкой - там данные из предыдущего регистра. Когда регистр один - этот вход нужно прицепить к плюсу или минусу. Соответственно и выдавать пустой регистр будет либо единицы, либо нули - к чему прицепим. Допустим прицепили к минусу. Когда все сохраненные биты исчерпаются, сдвигать больше нечего - пойдут те самые нули с последовательного входа.
Чтобы регистр сохранил состояния ножек, нужно дернуть ножкой P/S - это его запирает. После этого можно подавать тактовые импульсы. Если ножкой не дернули - данные принимает только с последовательного входа, на ножки даже не смотрит, и то, с последовательного входа будет брать данные только если на ножке P/S ноль - эта ножка еще и режим работы выбирает.
Вот и все.
Контроллеру в приемнике нужно всего лишь обработать этот сигнал.
Прерывание по низкому уровню тактовой линии - по высокому идет передача, а по низкому мы свободно считаем его, когда он уже установился в линии.
Также нужно прерывание по таймеру - 20 или больше раз в секунду проверять, что мы принимаем - если нули, то передача окончена, кнопка отпущена. Тут опять же нужно смотреть, чтоб между тиками прошло не меньше 2-х байт данных - для надежности. Можно интервал таймера сделать самонастраивающимся, если очень нужно - тогда программа не будет зависеть от частоты тактового генератора.
Принимаем байт, запоминаем, принимаем следующий - сравниваем с предыдущим. Если совпадают - увеличиваем счетчик. Если нет - сбрасываем счетчик.
Если счетчик достиг 3-10 или сколько там надо - считаем, что команду поняли верно. Исполняем.
В это же время принимаем байты, но ждем уже как минимум 2-х байт нулей. Можно 3-10 и т.д. - это значит кнопка отпущена. Таймер нужен, чтоб разгрузить контроллер во время выполнения команды - тогда после получения команды будем принимать не все байты, а один через сотни и тысячи. К тому же 2-3 нулевых байта могут встретиться в стробе, если он слишком длинный - а по таймеру шанс встречи уменьшается, но недостаточно - лучше считать, что кнопка отпущена, если 2-3 раза приняли одни нули - для верности.
Кстати, если тактовый генератор отключится, пока мы ждем - нули будет трудно принимать.
Придется либо держать тактовый генератор постоянно работающим, либо замерять в программе периоды тактовых импульсов и самим проверять, что за несколько таких периодов состояние тактовой линии не менялось.
В последнем случае нули можно не искать (если выключился тактовый генератор, то кнопку точно отпустили), а таймер будет искать тактовые импульсы.
Экономия нескольких милиджоулей против нескольких байт - что выгоднее и чего в достатке решать тебе самому.
Что еще? Говорят, триггер Шмитта стабилизирует цифровые сигналы. Полезно его будет засунуть в приемник - выравнивать сигналы с линии, если линия длинная. Полезно его будет засунуть в клавиатуру - для подавления дребезга. Хотя дребезг не страшен - приемник сам отсеет неверные команды в любом случае - он же их несколько штук одинаковых ждет.
Схема тоже простая выходит: 2 диода, 8 кнопок. 2 из них подключены к флип-флопам, которые управляют диодами.
2 триггера с двумя входами - 2-И-Не кажется, плюс к ним 2 резистора и 2 кондера - это 2 управляемых генератора.
Они тактируют регистр, к которому подключено 6 кнопок и 2 выхода с флип-флопов. Итого 8 бит.
Выход тактового генератора и выход регистра подключены к линии через драйверы. Что за драйверы - зависит от линии. В простейшем случае - их нет. Или по одному триггеру (их как раз 2 осталось незадействованных).
Если линия длинная - тогда это полевики и подтяжка. Если очень длинная - тогда даже по 2 полевика - один подтягивает линию к нулю, другой к плюсу - больше ток, быстрее установиться сигнал на линии. Естественно полевики нужны соответствующие - срабатывающие на логический уровень.
Для порядка еще пару транзисторов и резисторов нужны - для диодов. Но не все их ставят.
Как узнать, что нажата кнопка? Да просто. Собрать все контакты кнопок с одной стороны, и соединить их не напрямую с нулем, а через Б-Э переход любого биполярника. Хоть кт315. Нажал кнопку - ток побежал через нее, через транзистор - бац! На коллекторе ноль.
Но генераторы включаются по единице - подрубаем инвертор на триггере или другом транзисторе.
Соответственно другие контакты всех кнопок, которые подключены к микросхемам, должны быть подтянуты к плюсу через резисторы. Коллектор транзистора тоже подтянуть - иначе какой прок от нуля, если нету единицы?
Еще можно влепить RC цепь задержки - чтоб включать тактовый генератор позже генератора, который запирает регистр.
А лучше включать их цепочкой: Генератор запирания после пары периодов включает тактовый генератор - там же единица на выходе постоянно, пока генератор стоит, а запрется регистр только при переходе от нуля к единице - получается ровно через один период - в любом случае первый байт будет битым.
Если первый байт будет битый, следующие будут нормальными, просто приемник собьется со счета - не поймет где первый бит. Так что нужно будет как-то это компенсировать.
Тактовый генератор не синхронизирован с основным - программные гадания по длительностям периодов и стробов отпадают. Но можно их синхронизировать по включению - например, тактовый генератор включается только на время, пока основной выдает ноль - регистр в этот момент давно заполнен и закрыт. Для этого нужен один инвертор. На триггере или транзисторе - все-равно, что удобнее, что есть в наличии.
Вроде все. Итого 1,5 микросхемы, 8 кнопок, 2 диода, кучка транзисторов, резисторов и кондеров.
Да, чуть не забыл - триггеры имеют плохую привычку при включении оказываться в случайном состоянии. Флип-флопы тоже триггеры. У них есть по 2 входа - S и R. Первый принудительно устанавливает единицу на выходе, другой - ноль.
Так вот при включении нужно на оба S или оба R подать импульс. Где его взять? Нужна схема начального запуска.
Это может быть RC цепочка, или она же, усиленная транзистором или триггером.
Да, еще заметил, что в пульте линии зашунтированы кондерами - от высокочастотных наводок. Можно также сделать, только учесть на какой частоте идет передача - чтоб ее не глушили эти кондеры. Ну и соответственно фильтры по питанию, буферный конденсатор, что позволит протянуть схеме пару сек без питания, и кренки - если питание от бортсети.
Ну что, принцип понял?
Достоинства - простота. И да - возможен мультитач

Если контроллер приучить время от времени проверять, что за команды идут, пока кнопка нажата - может мы через пару сек удержания первой кнопки нажмем вторую не отпуская первую - команда другая, кнопку не отпускали. Текущая программа про такое не знает - даже при одновременном нажатии будет видеть только ту кнопку, которая оказалась быстрее на несколько миллисекунд - человек не заметит разницы, а программа заметит.
Недостаток - только 8 кнопок. Иначе нужно несколько регистров или сканирование.
А вообще, я бы воткнул контроллер - тогда схема еще проще: 8 кнопок, 2 диода, контроллер и несколько полевиков.
Опять же, читай 2-ю строчку сверху - этот пульт все-равно не будет работать в машине. Тупо потому, что неизвестно какая кнопка какой бит кодирует, неизвестны сигналы в состоянии покоя - подтяжка кнопок к нулю или к плюсу. Неизвестны начальные состояния диодов - когда не горят, на регистре от них идут нули или единицы - у флип-флопа есть и прямой и инверсный выходы.
Благо все это можно подобрать опытным путем за полчаса, если есть где подбирать, и угадали с подключением кнопок. При сканировании протокол другой - если ошиблись, менять почти всю схему.
А если пульт для себя - тогда вообще пофиг на протоколы - сам же делаешь, ни к чему подстраиваться не нужно.
Вот теперь точно все.
---UPD
Если тактовый генератор в компе, тогда зачем в пульте столько микросхем? Непонятно.
Если это действительно так, логика работы резко меняется - всем управляет контроллер, а не пульт. Пока контроллер не спросит, пульт не ответит.
Но непонятно, зачем так делать, если пульт сам имеет всю необходимую начинку для полностью автономной работы.
По энергопотреблению решения одинаковы - в обоих случаях пульт в ждущем режиме, а генерация только во время передачи данных. Если очень надо - до нажатия на кнопку можно вообще почти всю начинку обесточивать.
---UPD
В общем
вот (2,5 мб) примерная схема.
Там схема, тайминги, данные симуляции, и проект в протеусе.
Если это слишком много, то вот отдельно
схема и
осциллограмма - обе меньше 100кб.
Схема не полная. Там нет системы первичного запуска - которая триггеры устанавливает при включении. Нет фильтров и обвязки по питанию, нет прошивки. И нет гарантий - симуляция не железо.
При указанных номиналах тактовая частота 17,5 кгц, а частота опроса клавиатуры около 1,4 кгц. Т.е. на 8 бит данных приходится около 13 тактов генератора - есть запас в 5 тактов, на всякий случай.
С учетом того, что 1 посылка может быть битой, и 3 - контрольные, реальная частота опроса - около 350гц - быстрее по клавишам долбить нельзя - не распознает

Т.е. можно уменьшить частоты еще в 4-6 раз.
Триггеры в качестве инверторов все-таки пришлось использовать - без них генерация шла не очень стабильно.