Цитата Сообщение от Temych640 Посмотреть сообщение
В схеме Ленинграда вообще столбцы подключены к плюсу через резистор, а матричная клавиатура вроде как работает, когда на каждую строку/столбец по порядку подается напряжение, и в момент нажатия клавиши считывается, на каком столбце и строке есть напряжение.
У меня сделано примерно по такому же принципу. Вся клавиатура представляет собой 4 строки по по 5 клавиш в каждой. Обращение к строкам осуществляется через порты ввода-вывода (cs0-cs3). А колонки подключены к шине данных через развязывание диоды. Допустим, мы хотим узнать какая из клавиш в нижней строке нажата. Для этого процессор выполняет команду in (00h), a. При этом на линии /CS0 появляется лог "0". Если не нажата ни одна клавиша, на шине данных будет '11111111'. Если нажата, например, клавиша "2", то через развязывающие диоды и замкнутые контакты клавиши на шину данных будет подан код '11111011'. Далее выполняем команды in (0Fh), a in (20h), a и т.д., пока не считаем состояние всех строк. Ну а дальше уже по считанным данным, зная что каждой клавише соответствует свой бит, определяем какие именно кнопки нажаты.

Диоды в схеме стоят для того, чтобы при одновременном нажатии на несколько кнопок в строке не происходило короткое замыкание на шине данных.