|
По поводу сканирования все просто. Есть два способа устранения дребезга. Первый - подсчет количества совпадений состояния клавиши, второй опрос с периодом заведомо превышающим дребезг. В PS-ных клавиатурах по-моему используется первый способ. Хотя я чаще использую второй, т.к. мне он проще. Сканирую клавиатурную матрицу и держу в памяти два ее битовых образа - текущий и предыдущий. Затем делаю XOR этих образов и смотрю результат ноль или не ноль. Если изменений нет (результат - ноль), то считаю, что состояние клавиатуры устойчивое и считаю текущий образ "действительным". Далее точно также по XOR сравниваю два "действительных" (предыдущий и текущий) битовых образа матрицы клавиш и если есть изменения, то по таблице определяю код клавиши в соответствии с позицией бита в битовом образе. При необходимости генерации различных кодов одной и той же клавиши (например, когда одни и те же клавиши должны выполнять несколько функций) составляю несколько таблиц кодов клавиш, которые переключаю по условию. Поскольку результатом сравнения XOR является разница в состояниях битов, то обрабатывая оба их состояния в битовой матрице, можно генерировать как коды нажатия, так и коды отжатия. Повтор нажатых кнопок делается по таймеру. Точно также как и частота их поторения.
Про интерфейс PS/2 читал очень давно. Помню смутно. Там последовательная синхронная передача данных. Причем двунаправленная, т.е. не только клавиатура генерит данные, но и PS может программировать некоторые параметры клавитуры. Поэтому двупроводный интерфейс выполнен по типу I2C, т.е. монтажное ИЛИ с pull-up резисторами и выходами с ОК или общим стоком.
E-mail: info@telesys.ru