Скан коды клавиш клавиатуры онлайн. Нихт ферштейн: учим пингвина понимать мультимедийные клавиши

Скорее всего на вашем телефоне уже установлен по умолчанию сканер QR-кода, вы можете легко с его помощью просканировать первый QR-код. Сделать это очень легко. Просто следуйте нашей инструкции.

1. Откройте устройство чтения QR-кода на своем телефоне.

2. Держите устройство над QR-кодом так, чтобы он был хорошо виден на экране вашего смартфона.

Если вы правильно держите смартфон над QR-кодом, то в таком случае произойдет следующее:

  • Телефон автоматически сканирует код.
  • В некоторых приложениях для сканирования кода вы должны нажать на изображение, а не на кнопку как для создания фото на вашем смартфоне.

3. Нажмите указанную кнопку, если потребуется.

Супер! Ваш смартфон считывает код и переходить по заданной ссылке, что не всегда происходит мгновенно. На большинстве устройств это может занять несколько секунд.

Вы начнете видеть QR-коды повсюду. Они используются для обучения, информирования, объяснения и для многих других вещей. Находите их и сканируете! QR-коды сэкономят вам много времени и усилий.

Как сканировать QR-коды на Android

А теперь мы расскажем вам, как использовать приложение сканирования для QR-кодов на Android.

Кратко:
1. Откройте Play Маркет .
2. Поиск считывателя QR-кода .
3. Выберите QR Code Reader (через Scan).
4. Нажмите «Установить» .
5. Откройте программу чтения QR-кода .
7. Направьте камеру на QR-код.
8. Нажмите «ОК» .

Шаг 1 . Откройте Play Маркет на Android. Это значок в приложении или на главном экране.

Шаг 2. Введите считыватель QR-кода в поисковике. Появится список приложений для чтения QR-кода.

  • Эта статья объясняет, как использовать QR-код Reader, но вы можете выбрать то, приложение, которое вам понравится. Просто не забудьте прочитать о приложении перед загрузкой.
  • Шаги должны быть одинаковыми для всех приложений чтения QR-кода.

Шаг 3. Нажмите QR Code Reader, разработанный Scan. Имя разработчика указано ниже каждого приложения. Возможно, вам придется прокрутить страницу вниз, чтобы найти приложение, сделанное Scan.

Шаг 4. Нажмите « Установить» . Появится всплывающее окно с просьбой предоставить разрешение для доступа к информации на вашем Android.

Шаг 5. Нажмите «Принять» . QR-код Reader теперь будет установлен на вашем Android-устройстве.

    • Когда приложение будет загружено, кнопка «Установить» смениться на «Открыть», и у вас появится новый значок в приложении.

Шаг 6. Откройте QR Code Reader. Это значок, который похож на QR-код в приложении. Откроется приложение, которое выглядит как стандартный экран камеры.

Шаг 7. Выровняйте QR-код в кадре камеры. Немного похоже на то, как вы делаете фотографии, за исключением того, что вам не нужно нажимать какие-либо кнопки. Когда сканер штрих кодов прочитает код, появится всплывающее окно с URL-адресом в коде.


Шаг 8. Нажмите «ОК», чтобы открыть веб-сайт. Это запускает ваш веб-браузер по умолчанию и перемещается по URL-адресу в QR-коде.

  1. В верхней части окна Google Play есть поисковая строка. Именно ею мы и воспользуемся. Активируем и пишем название нашего приложения. Вводить его до конца необязательно. Как только в поисковой выдаче появится обозначенный на скриншоте объект, просто тапайте по нему.
  1. Мы будем переадресованы на домашнюю страничку программы. Тут есть большая зеленая кнопка с надписью «УСТАНОВИТЬ». Нажмите ее.
  1. Дожидаемся окончания скачивания приложения. Так как оно «весит» немногим менее 5 МБ, процесс не займет много времени.
  1. Готово. После того как автоматическая инсталляция будет окончена, мы сможем запустить программу прямо отсюда.
  1. Также на домашнем экране (если активировано в настройках) появится ярлык запуска.

На этом установка программы завершена, и мы можем переходить к обзору работы с нею.

На скриншоте ниже вы видите программный интерфейс. Тут он поделен на 3 основные вкладки. Также есть иконка настроек, выполненная в виде шестеренки. На главной вкладке «SCAN» находятся 4 основных инструмента:

  • Scan Barcode. Это и есть сканер QR, который работает посредством камеры;
  • Manual Key-in. Функция ручного ввода данных о коде;
  • Decode from File. Декодирование из файла. Отсюда можно открыть ранее загруженный QR-код и считать его;
  • Decode from Url. Сканирование по ссылке.

Внизу находятся несколько кнопок, не несущих полезного функционала. На них обращать внимание не следует.

Рассмотрим настройки программы. Их тут довольно много. На ваших экранах будут скриншоты разных областей конфигурации, мы же просто озвучим некоторые самые интересные моменты.

Например, на первом экране можно включить или отключить звук программы. То же самое получится сделать и с виброоткликом. Можно задать режим работы, когда программа начнет запускаться сразу со сканера, минуя главное меню. Еще одной важной особенностью является автоматическое копирование данных в буфер обмена.

Как только мы захотим начать сканирование и запустим сам сканер, программа запросит доступ к нужным системным ресурсам. Естественно, его нужно разрешить. Жмем кнопку, отмеченную на скриншоте.

Далее, наводим рамку сканера так, чтобы горизонтальная полоска попала прямо на QR. Старайтесь чтобы ваши руки не дрожали и в то же время следите за фокусировкой. Без нормальной резкости сканирование не удастся.

Для работы QR BARCODE SCANNER в условиях недостаточной освещенности присутствует подсветка.

Как только код будет распознан, вы увидите информацию, приведенную на скриншоте ниже.

Кроме сканирования QR тут можно также создавать их. Для этого переходим в третью вкладку. Мы отметили ее на скриншоте. В виде списка приведены все типы данных, которые можно зашифровать. Поддерживается следующее:

  • контакт телефонной книги;
  • номер телефона;
  • URL-адрес;
  • Email;
  • приложение;
  • местоположение;
  • любой текст;
  • закладка;
  • событие календаря.

Выглядит все это следующим образом:

Когда тип данных будет выбран и задан, нам остается лишь нажать кнопку «Encode». В данном случае мы зашифровали ссылку.

Давайте попробуем зашифровать также произвольный текст. Для этого выбираем нужный пункт.

Вводим фразу в обозначенное поле и жмем кнопку «Encode».

Результат выглядит прекрасно. Давайте еще поменяем его цвет. Жмем кнопку, предназначенную для этого.

Выбираем нужный оттенок из палитры.

И любуемся полученным QR.

Переходим к следующей программе, которая тоже обладает внушительным функционалом.

QR Droid Code Scanner

Еще одно приложение, найти которое можно в Google Play. Также вы можете скачать его по прямой ссылке на сайте Google . Мы же пока рассмотрим саму программу.

Так выглядит ярлык запуска QR Droid Code Scanner – жмем по нему.

Данное приложение, в отличие от предыдущего, выполнено на русском языке и, как только оно запустится, нам понадобится нажать на кнопку с надписью: «НАЧАЛО РАБОТЫ».

Сразу же виден сканер, но для начала давайте разберемся с его настройками. Тапаем по кнопке, расположенной в верхнем правом углу.

В главном меню видны 6 плиток-кнопок, которые переадресуют пользователя в нужный раздел. Вот они:

Итак, для того чтобы воспользоваться сканером, нужно активировать его в главном меню и, наведя на QR-код, нажать кнопку «Считать».

Тут выбирается стартовый экран, задается адрес для резервного копирования и настраивается язык программного интерфейса.

Далее мы можем установить механизм сканирования. Используется один из фирменных алгоритмов: Zapper или ZXing. Ниже получится включить или отключить перекрестие, настроить автоматическое действие после сканирования и включить отображение подсказок или копирование ссылки в буфер обмена.

В данном разделе настраивается звуковое сопровождение, включается и выключается вибро. Также конфигурируется процесс записи действий в журнал и взаимодействие с умными часами Android Wear.

Затем у нас получится экспортировать или импортировать резервную копию или установить дату.

Разрешить отправку анонимных данных (лучше отключить), активировать проверку получаемой при сканировании ссылки на безопасность или настроить пакетное сканирование. Ниже доступны такие функции, как масштабирование или подсветка.

Но на этом наши настройки не заканчиваются. Кроме приведенных выше функций, мы имеем следующее:

  • настройка ориентации экрана;
  • работа с фронтальной камерой;
  • парсинг ссылок;
  • показ магазинов.
  • функция расширенного описка;
  • запрет некоторых спецсимволов;
  • активация WEB-предпросмотра;
  • поиск сохраненных изображений.

Последний экран настроек содержит такие интересные функции, как: настройка максимального количества позиций, конфигурация пользовательских CSV, встряхивание «умных» часов и сохранение повторяющихся позиций.

Кроме настроек в меню QR Droid Code Scanner присутствует пункт под названием «Еще». Рассмотрим его функционал.

Тут имеются такие возможности:

Рассмотрим последнее, но от этого не менее функциональное, приложение в нашем списке.

NeoReader QR & Barcode Scanner

Данную программу, как и другие, вы можете скачать и установить через Google play либо по прямой ссылке . Когда это будет сделано, можно переходить непосредственно к работе с нею.

При первом запуске нам потребуется удовлетворить запрос доступа. Жмем «РАЗРЕШИТЬ».

Затем появится окно с настройками. Тут получится выбрать язык, указать свои страну, пол и возраст. Две галочки, размещенные ниже, позволяют включить или отключить доступ программы к геоданным.

Можно, собственно, приступать к сканированию. Наведите камеру на QR-код и NeoReader QR & Barcode Scanner автоматически распознает его содержимое.

Мы думаем, что этих трех программ полностью хватит для любого человека. Выберите наиболее удобную для вас и используйте на свое усмотрение. Мы же поговорим о некоторых особенностях китайских девайсов.

Стандартный функционал

В некоторых смартфонах и планшетах (в зависимости от марки) есть функционал сканирования QR-кодов в штатном исполнении и сделать все можно без приложения. Не будем перечислять их все, затронем лишь модель от Xiaomi.

Подводим итоги

В результате мы с вами узнали, как сканировать QR-код на Андроид разными способами. Надеемся статья оказалась для вас полезной. Если вопросы все же остались, задавайте их в комментариях. Мы постараемся помочь каждому.

Если даже этого не произойдет, кто-нибудь из пользователей, находящихся на сайте, обязательно подскажет как выйти из ситуации и даст дельный совет. Вам останется только воплотить его в жизнь.

Видеоинструкция

Следующим типовым устройством ПЭВМ, вроде бы и несложным, но доставляющим, порою, хлопоты исследователю, является клавиатура.

В общем-то устройство несложное. Особенно ноне уже устаревшие модели, подключаемые к порту PS/2. Как показывают многочисленные экспериментальные данные микросхема управления «клавы» сканирует нажатия клавиш и передаёт в последовательном коде в порт. Тактовая частота этой передачи кратна (в подавляющем числе случаев) » 6,3 или 10 кГц. Хотя автору попались в самые последние года пара экземпляров, тактовая частота которых лежала в районе 20 кГц.

Все клавиатуры при нажатии и удерживании любой клавиши начинают (после некоторой паузы) повторять передачу кода клавиши «до бесконечности». В обычном режиме это, как правило, через несколько секунд приводит к переполнению буфера контроллера и нарушению работы. Появляется звуковой сигнал системного «динамика» - «писк». Суть тест-режима (самого общепринятого) заключается в блокировании команды переполнения буфера, что позволяет, при нажатой клавише, обеспечить бесконечную передачу по кабелю «клавы» выбранного символа.

Как и всегда, для правильного последующего расчёта результата, необходимо создать постоянное чередование импульсов в кодовом пакете. Для кодов клавиатуры таких комбинаций может существовать две:

10101010 (55) клавиша « +; = »

01010101 (АА) в типовых таблицах - не применяется

Общая таблица скан-кодов приведена в таблице 14.1

Таблица 14.1 - Скан-коды клавиатуры

Клавиша

Скан-код

Клавиша

Скан-код

Клавиша

Скан-код

Клавиша

Скан-код

Таким образом, при реализации тест-режима и, например, положенном на клавишу «+» грузике в кабеле «клавы» будет присутствовать бесконечная последовательность пакетов импульсов. При этом период следования импульсов в пакете (то есть тактовая частота), будет равна 6,10 или 20 кГц, а частота следования пакетов будет много ниже. Формат данных приведён на рисунке 14.1

Для обмена данными в кабеле клавиатуры служат две линии – KBData и KBSync. При передаче скан-кодов клавиатура выставляет очередной разряд данных на линии KBData и подтверждает передачу переводом из «1» в «0» сигнала на линии KBSync.

Контроллер может сигнализировать о своей неготовности передавать/принимать данные низким уровнем на линии KBSync. Все остальное время, когда нет данных для передачи, обе линии имеют высокий уровень сигнала.



Как следует из вышеприведённого, в спектре ПЭМИН кабеля клавиатуры следует ожидать частотных составляющих с тактовой частотой 1/76,04·10 -6 =13,15 кГц. Причём из-за наличия двух, сдвинутых по фазе, сигналов с разными (но кратными!) периодами, чётные и нечётные частотные составляющие будут отличаться по амплитуде.

Как и следует ожидать, ПЭМИН линии синхроданных неинформативен, в принципе. Но отличить один ПЭМИН от другого совсем непросто. Кабель один, сигналы синхронны…

Практически единственный способ – подобрать скан-код с минимальным числом логических «1» в посылке. Таковыми являются клавиши «F3» и F9» (03 и 01 в hex-коде). Код «00» не используется.

Осциллограмма скан-кода «F3» приведена ниже.


Строго «по энергетике», если измерить все частотные составляющие ПЭМИН с кодом «=» и, например, кодом «F9», то разность в показаниях приёмника на КАЖДОЙ из частотных составляющих и есть истинно информационная часть энергии ПЭМИН. Причём это максимум максиморум. Работа достаточно сложная и утомительная, если нет возможности поручить её «автомату». Сами-то составляющие ПЭМИН для столь низких частот выявляются не без труда. Так ещё и разности «ловить»…



В практике СИ, в подавляющем числе случаев, просто измеряют уровни ПЭМИН (ничего не вычитая) и считают параметр защищённости. Можно и так, «с запасом», но знать истинное положение дел специалист обязан.

В заключение рассмотрения - «распиновка» разъемов AT- и PS/2-клавиатуры.


«Картинки» на приёмнике выглядит далеко не так «классически», однако и он вполне узнаваем. Вот примеры



На спектре хорошо видно возрастание амплитуды компонент с уменьшением частоты.

Есть ещё особенности измерений «клавы» в этой частотной области (от десятков кГц и далее). Дело в том, что клавиатура, в обычном размещении, находится неподалеку от системного блока. А в верхней части СБ находится импульсный блок питания – мощнейший источник ПЭМИН и по «Е», и по «Н» компонентам. В «свете» такого театрального софита, тускловатый «свет» клавиатуры узреть – особое искусство! Поэтому предлагаю следующий приём. Отодвиньте «клаву» от СБ как можно дальше. Лучше – на удлинителе PS/2. Эдак метра на 2-2,5.

Разместите антенну так, чтобы на неё наводилось как можно меньше от СБ (сигнал, при полосе приёмника больше 10 кГц – сплошной спектр). И вот около так сориентированной, неподвижной антенны, начинайте крутить «клаву» и её кабель (не наоборот!). Тогда у Вас будет много больше шансов обнаружить сигналы ПЭМИН именно клавиатуры, увидеть компоненты ПЭМИН на экране анализатора воочую.

Всё вышеизложенное относилось к клавиатуре с интерфейсом PS/2. Но сейчас их массово заменяют клавиатуры с интерфейсом USB.

Вообще этот интерфейс достаточно подробно рассматривался совместно с принтерами. Однако будет нелишним дать некоторое «целеуказание» и относительно клавиатуры.

Вспомним построение пакетов для интерфейса USB, учитывая, что клавиатура подключается, строго, с low-speed (то есть, фактически по интерфейсу USB 1.0).

Максимальный размер полезной нагрузки DATA (payload) для low-speed устройств составляет 8 байт. То есть это, как раз, то, что требует скан-код клавиатуры.

Увидеть сигнал (именно данные) в линии USB оказалось не такой уж простой задачей. Тем не менее – вот что выявилось именно в кабеле типовой USB «клавы» модели GENIUS KB-06XE, конкретно в линии (проводе) «data +» (рисунок 14.10)


Эти две осциллограммы меняют друг друга с неустановленной (хаотической) периодичностью, причём «картинки» сигналов не зависят от нажатой клавиши клавиатуры (или ненажатой никакой). Никаких иных изменений в «переменной» части пакета (фрейма) выявить не удалось.

Периодичность следования этих пакетов жёстко стабилизирована (рис. 14.11), а длительность каждого составляет (видно на осциллограммах) около 34 ±1 мкс.


Пакеты следуют каждые 4 мс. Однако необходимо отметить, что окончание каждого пакета всё время «дрожит», причём заметно, классический «джиттер». Поэтому спектральная картинка несколько размыта и становится чёткой лишь при достаточно длительном усреднении.


Кроме того, следует учитывать, что из-за разных периодов следования импульсов и разной их длительности спектр носит характер некоторой смеси из спектра сплошного и линейчаатого. Тем не менее лепестковый характер спектра, естественный для бесконечной последовательности пакетов и кратный в своих «лепестках» средней длительности пакета, сохраняется весьма наглядно. Только «нули» функции сглажены джиттером и неременным периодом следования отдельных импульсов. Однако сама картинка вполне характерна. При более тонком частотном разрешении спектр начинает разрешаться на «линии», обусловленные частотой следования пакетов (250 Гц) (рис. 14.13)Таким образом, при простейшем и незасинхронизованном с истинной передачей скан-кода просмотре осциллограмм, выявить и визуализовать участки фрейма (пакета), отвечающий за передачу данных, не удалось. Тем не менее, можно утверждать, что ПЭМИН кабеля клавиатуры всё равно будет вот такой и никакой другой. Понятно, на каких частотах его искать, понятно, что он будет носить характер сплошного (во всяком случае, при частотном разрешении приёмника более 0,3 кГц). И понятно, какую величину подставлять при расчётах в качестве тактовой (минимальный период импульсов в пакете в эксперименте составил 1,322 мкс). Измерить это, при любых СИ, имея осциллограф, хотя бы с 200 МГц полосой – задача тривиальная. Тест-режим, по сути – любой, можно нажимать клавиши (любые), можно не нажимать ничего. Пакеты по интерфейсу передаются всё равно. И, в первом приближении, считаем их информативными (пока не доказано обратное).

Приведённые осциллограммы и спектры получены с помощью осциллографа АКИП-4108/2, подключённому к тому же компьютеру, на котором выполнялись измерения (надо заметить – весьма функциональный повтор разработки фирмы «PICO Technology» нашими. Не хуже китайцев:)) .

Спектр явно уходит далеко за 1 МГц (больше не позволил осциллограф, а подключать анализатор большого смысла не было). Остальное обусловлено уже кабелем, как случайной антенной и степенью его экранирования.

Для иных режимов интерфейса USB нужен уже осциллограф с полосою в многие ГГц.

Как именно считать сплошной спектр и, при этом, остаться в рамках действующих НМД – разговор отдельный и не для открытого обсуждения, увы… Однако в последующих публикациях придётся к нему вернуться, деваться некуда. Попытаюсь «остаться в рамках дозволенного»…

Заняться устройством подобного рода меня побудил тот факт, что большая часть простых для повторения геймортовских устройств не позволяла реализовать достаточное количество кнопок управления. Игровой порт PC изначально вообще расчитан максимум на четыре кнопки. Всевозможные расширения также не обладают желаемой гибкостью. К примеру, популярное среди самодельщиков расширение CH Flightstick Pro позволяет реализовать до 14-ти кнопок, но при этом одновременно нельзя использовать две любые кнопки - о полетах на таких устройствах в играх, в которых приходится постоянно «крутить головой» - в тех же птичках, можно забыть. Некоторые расширения используют исключительно цифровой интерфейс - данные о нажатых кнопках и отклонении ручки передаются по цифровым линиям геймпорта, которые изначально предназначались для передачи данных о четырех «стандартных» кнопках. Я даже считаю такие расширения в чем-то избыточными. Да и преобразование аналоговых данных в цифровые усложняет конструкцию джойстика. Кроме того, не всякая игра захочет понять что за монстр к ней «присосался». А клава - вот она, во всей своей 102-х клавишной красе! Кроме того, масла в огонь подливали подписчики RU.GAME.FLIGHT, время от времени вопрошавшие «а как бы мне клаву приручить и с джоем скрестить?» и уходившие ни с чем.

Короче говоря, задача устройства - «сидеть» на шине между клавиатурой и PC и имитировать нажатие клавиш на клавиатуре, в соответствии с нажатыми кнопками устройства.

Итак, я засел за разработку. До этого у меня был опыт работы с различными микропроцессорами и микроконтроллерами. В общем - пальцы от уха до уха. И я наивно полагал, что вот, сейчас я возьму доки, сделаю RTFM и через неделю буду на белом коне. Вся загвоздка оказалась в том, что документации о протоколе передачи данных между клавиатурой и контроллером я не смог найти ни в Интернете, ни в соответствующих конференциях Фидо. Пришлось брать осцилограф и несколько недель заниматься разбором времянок и попытками их повторить. Поэтому большая часть изложенной ниже информации является результатом моих умозаключений и не подтверждена документально. Если я в чем-то заблуждаюсь - рад буду выслушать комментарии по адресу rashpil at ukr dot net .

Основные принципы передачи данных

Все нижеследующее справедливо для PS/2 и AT-клавиатур, которые отличаются только исполнением разъема (могут подключаться через переходник).

Между клавиатурой и контроллером, расположенным на материнской плате компьютера (далее - просто «контроллером»), осуществляется двусторонний обмен данными. Контроллер передает различные команды (например - изменение состояния светодиодов или скорости автоповтора). Клавиатура передает скан-коды нажатых клавиш (скан-код - условное обозначение клавиши, не стоит путать с ASCII-кодами).

Скан-коды

Клавиша Скан-код Клавиша Скан-код Клавиша Скан-код Клавиша Скан-код
1 16 2 1E 3 26 4 25
5 2E 6 36 7 3D 8 3E
9 46 0 45 - 4E + 55
Backspace 66 Tab 0D Q 15 W 1D
E 24 R 2D T 2C Y 35
U 3C I 43 O 44 P 4d
[ 54 ] 5B Enter 5A Ctrl(L) 14
A 1C S 1B D 23 F 2B
G 34 H 33 J 3B K 42
L 4B ; 4C " 52 ` 0E
Shift(L) 12 \ 61 Z 1A X 22
C 21 V 2A B 32 N 31
M 3A , 41 . 49 / 4A
Shift(R) 59 Alt(L) 11 Space 29 Caps Lock 58
Esc 76 F1 05 F2 06 F3 04
F4 0C F5 03 F6 0B F7 83
F8 0A F9 01 F10 09 F11 78
F12 07 Scroll Lock 7E * 7C Num Lock 77
7 6C 8 75 9 7D - 7B
4 6B 5 73 6 74 + 5A
1 69 2 72 3 7A 0 70
. 71 Alr(R) E0-11 Ctrl(R) E0-14 Print Screen E0-12-E0-7C
Insert E0-70 Delete E0-71 Left E0-6B Home E0-6C
End E0-69 Up E0-75 Down E0-72 PageUp E0-7D
PageDown E0-7A Right E0-74 Enter E0-5A / E0-4A

Примечание: на самом деле AT-клавиатура имеет три различных набора сканкодов. Я привел только значения для набора № 2 - дефолтного.

При нажатии на клавишу клавиатура передает контроллеру скан-код этой клавиши. При отпускании - сначала префикс 0F0h, а потом скан-код отпущенной клавиши.

Комбинации клавиш с Shift, Alt и Ctrl передаются как последовательность двух скан-кодов. С точки зрения контроллера эти клавиши ничем не отличаются от всех остальных. Точно так же на аппаратном уровне не различаются режими Num Lock и Caps Lock - они различаются на программном уровне программой, которая обслуживает прерывания от клавиатуры.

Коротко хочу остановиться на реализации режима автоповтора. Как правило функции автоповтора возлагаются на саму клавиатуру - через определенное время, если клавиша не отпущена, то клавиатура посылает еще один точно такой же скан-код. Если в это время нажать еще одну клавишу, то к контроллеру «полетит» уже другой скан-код и будет считаться, что нажата только одна клавиша. В играх эта проблема решена элементарно - клавиша считается нажатой, пока не прийдет соответствующий скан-код с префиксом 0F0h. Поэтому я не стал реализовывать функции автоповтора в принципе.

Кроме приведенных выше скан-кодов, клавиатура может возвращать некоторые служебные команды. Но эти команды, равно как и команды, выдаваемые контроллером, не представляют в данном случае практической ценности. Поэтому на них останавливаться не буду.

Описание протокола обмена

Обмен данными между клавиатурой и контроллером осуществляется асинхронно по последовательному протоколу. Суть асинхронной передачи состоит в том, что данные передаются только тогда, когда есть что передавать - нажата/отпущена клавиша на клавиатуре и нужно выдать соответствующий скан-код или контроллеру нужно выдать команду клавиатуре.

Для обмена данными служат две линии - KBData и KBSync. При передаче скан-кодов клавиатура выставляет очередной разряд данных на линии KBData и подтверждает передачу переводом из «1» в «0» сигнала на линии KBSync. При приеме данных от контроллера клавиатура считывает разряд данных с линии KBData и выдает подтверждение приема переводом из «1» в «0» сигнала на линии KBSync. Контроллер может сигнализировать о своей неготовности передавать/принимать данные низким уровнем на линии KBSync. Все остальное время, когда нет данных для передачи, обе линии имеют высокий уровень сигнала. Частота следования импульсов линии KBSync составляет около 10-25КГц.

Данные передаются в таком порядке: один стартовый бит - «0», восемь бит данных, бит четности (сумма всех разрядов +1), один стоповый бит - «1». После приема каждого байта данных контроллер выставляет низкий уровень на линии KBSync, сигнализируя тем самым, что занят обработкой принятых данных и не готов принимать следующие. Это можно считать подтверждением приема. Клавиатура подтверждает каждый байт принимаемой команды выдачей кода 0FAh. При возникновении ошибки при передаче, контроллер может потребовать повторить передачу последнего байта, выдачей команды 0FEh. Клавиатура же ведет себя по-другому - просто игнорирует ошибки. Я не вижу в этом ничего фатального - если ваша система дает частые сбои, то ей не место на рабочем столе.

Скорее всего, мои объяснения были слишком запутаны, поэтому постараюсь проиллюстрировать их несколькими временными диаграммами.

Общий вид передачи данных от клавиатуры (S1 - стартовый бит; S2 - стоповый бит; D0-D7 - данные; P - бит четности; W - обработка принятых данных)

Пример передачи байта 74h - клавиша «6» на нумпаде. В этом примере при инициации передачи клавиатурой контроллер сигнализирует о своей неготовности принимать данные и клавиатура ожидает освобождения линии KBSync

Аппаратная реализация

Теперь я перейду непосредственно к описанию реализации устройства в «железе».

Устройство включается в разрыв сигналов KBSync и KBData и пропускает через себя сигналы от/к клавиатуре, опрашивает состояние четырех кнопок и выдает соответствующие скан-коды, имитируя тем самым работу клавиатуры.

Основу устройства составляет однокристальный микроконтроллер AT89C2051. Микроконтроллер AT89C2051 фирмы Atmel принадлежит к семейству MCS-51 (отечественный аналог - МК-51). Основное отличие AT89C2051 от i8051 - пониженное энергопотреблениее, сокращенное до 15-ти количество линий ввода-вывода, отсутствие возможности использовать внешнюю память. Более подробную информацию по AT89C2051 и i8051 можно найти на www.atmel.com и www.intel.com . Вместо AT89C2051 можно использовать AT89C51, i8051 (КР1816ВЕ51) или i8031 (КР1816ВЕ31) с внешним ПЗУ. Но два последних варианта из-за своего повышеного энергопотребления могут привести к перегоранию предохранителя контроллера клавиатуры.

На микроконтроллерах фирмы Atmel после основного обозначения указывается максимальная частота тактового генератора в мегагерцах. Я советую ставить микроконтроллер расчитанный на частоту 24МГц и кварц с частотой повыше - 16-20МГц.

Принципиальная схема. (R1-R4 - 47K; R5 - 10K; C1, C2 - 18пФ; C3 - 1мкФ; D1 - AT89C2051; BQ1 - кварц 12-24МГц)

Линия P1.4 используется как выход разрешения опроса кнопок. Это - задел для будущих расширений, - линии P1.4-P1.7 будут использованы для выдачи адреса строки для опроса нажатых кнопок (до 16-ти строк по 4-ре кнопки). «0» на линии P1.0-P1.3 означает, что нажата соответствующая кнопка.

Элементы C3 и R5 реализовывают схему генерации сигнала сброса при подаче питания.

Линии KBData со стороны клавиатуры и контроллера подаются на входы P3.2 (INT0) и P3.3 (INT1). Таким образом попытка инициировать передачу данных со стороны клавиатуры или контроллера вызывает соответствующее прерывание. Подпрограммы обслуживания этих прерываний просто транслируют сигналы, соответствующие передаче одного байта, через микроконтроллер. В то время, когда микроконтроллер не занят передачей данных, происходит опрос линий P1.0-P1.4, обработка полученых данных и выдача соответствующих скан-кодов контроллеру. В данной версии приоритет отдается данным, передаваемым самим устройством. Поэтому данные от клавиатуры иногда могут теряться.

Завершая этот раздел, приведу распиновку разъемов AT- и PS/2-клавиатуры.

Сигнал -KBReset - необязательный сигнал. Некоторые контроллеры могут использовать его для сброса клавиатуры.

Текст микропрограммы

Я привожу исходный текст микропрограммы для микроконтроллера AT89C2051 в надежде на то, что пытливый читатель сможет меня поправить или адаптировать программу для работы с другим типом микроконтроллера.

Org 0 sjmp start org 3 jmp from_keyboard ; INT0 org 13h jmp to_keyboard ; INT1 start mov a,#5 ; установка типа прерываний mov tcon,a ; INT0 и INT1 по фронту - mov a,#0 ; переход из "1" в "0" mov ip,a mov a,#85h mov ie,a mov a,#0ffh ; по адресу 06h хранится последний mov 6,a ; обработанный код clr p1.4 ; разрешение опроса loop mov a,p1 ; считывается состояние кнопок anl a,#15 ; - младшие четыре разряда порта P1 ; D0 - вверх; D1 - вправо; D2 - вниз; D3 - влево mov dptr,#hat_table ; считанные данные о четырех кнопках movc a,@a+dptr ; расширяются до восьми направлений; D0 - вверх; D1 - вправо; D2 - вниз; D3 - влево; D4 - вправо-вверх; D5 - вправо-вниз; D6 - влево-вниз; D7 - влево-вверх mov r2,a ; сохранение данных mov r0,a xrl a,6 ; если новые данные не отличаются от jz loop ; полученных в предыдущем цикле - повторяем опрос mov r1,#8 ; цикл для восьми разрядов loop3 jnb acc.7,loop2 ; "1" - было изменение push acc mov a,r1 mov dptr,#key_table-1 ; извлекаем соответствующий скан-код movc a,@a+dptr push acc mov a,r0 ; ресистр R0 - признак нажатия/отпускания rlc a ; эмулируемой клавиши mov r0,a ; "1" - "клавиша" была отпущена pop acc mov acc.7,c ; если D7=1 - скан-коду будет предшествовать 0f0h acall send_key ; выдача скан-кода pop acc sjmp loop2a loop2 push acc mov a,r0 rlc a mov r0,a pop acc loop2a rl a djnz 1,loop3 mov 6,r2 sjmp loop send_key mov ie,#80h ; прерывания запрещены acall send2comp ; посылка скан-кода mov ie,#85h ; прерывания разрешены ret send2comp jnb acc.7,send ; при необходимости первым выдается 0f0h push acc mov a,#0f0h acall send pop acc clr acc.7 mov b,#200 l9 nop djnz b,l9 send push 1 push 0 clr p3.3 ; P3.3 - KBData mov b,#6 ; выдача стартового бита l10 nop djnz b,l10 clr p3.5 mov b,#15 l2 nop djnz b,l2 setb p3.5 mov b,#6 l3 nop djnz b,l3 mov r0,#8 ; выдача восьми бит данных и подсчет четности mov r1,#1 byte_loop xrl 1h,a rrc a mov p3.3,c mov b,#6 l6 nop djnz b,l6 clr p3.5 mov b,#15 l4 nop djnz b,l4 setb p3.5 mov b,#6 l5 nop djnz b,l5 djnz r0,byte_loop mov a,r1 mov c,acc.0 mov p3.3,c ; выдача разряда четности mov b,#6 l8 nop djnz b,l8 clr p3.5 mov b,#15 l12 nop djnz b,l12 setb p3.5 mov b,#6 l13 nop djnz b,l13 setb p3.3 ; выдача стопового бита mov b,#6 l7 nop djnz b,l7 clr p3.5 mov b,#15 l11 nop djnz b,l11 setb p3.5 mov b,#200 l14 nop djnz b,l14 setb p3.5 pop 0 pop 1 ret from_keyboard ; передача одного байта к контроллеру mov ie,#80h push psw push acc push b mov b,#2 in6 jnb p3.4,in8 djnz b,in6 sjmp in7 in8 mov b,#10 in1 mov a,p3 rl a orl a,#11010111b mov p3,a jnb p3.4,in1 in2 mov a,p3 rl a orl a,#11010111b mov p3,a jb p3.4,in2 djnz b,in1 in3 mov a,p3 rl a orl a,#11010111b mov p3,a jnb p3.4,in3 mov p3,#0ffh in4 jb p3.5,in4 in5 jnb p3.3,in7 clr p3.4 jnb p3.5,in5 in7 mov p3,#0ffh pop b pop acc pop psw mov tcon,#5 mov ie,#85h reti to_keyboard ; передача одного байта к клавиатуре mov ie,#80h push psw push acc push b mov b,#5 out61 jb p3.5,out7 djnz b,out61 setb p3.4 setb p3.2 out62 jnb p3.5,out62 out6 mov c,p3.4 mov p3.5,c mov c,p3.3 mov p3.2,c jb p3.4,out6 out8 mov b,#10 out1 mov c,p3.4 mov p3.5,c mov c,p3.3 mov p3.2,c jnb p3.4,out1 out2 mov c,p3.4 mov p3.5,c mov c,p3.3 mov p3.2,c jb p3.4,out2 djnz b,out1 out3 mov c,p3.4 mov p3.5,c mov c,p3.2 mov p3.3,c jnb p3.2,out3 out7 mov p3,#0ffh pop b pop acc pop psw mov tcon,#5 mov ie,#85h reti hat_table ; таблица для расширения данных считанных с порта P1 ; индекс в таблице - четырехразрядный двоичный код; данные - состояние восьми эмулируемых клавиш; "0" - клавиша нажата db 0ffh ; влево+вправо+вверх+вниз=запрещенная комбинация db 0ffh ; влево+вправо+вниз=запрещенная комбинация db 0ffh ; влево+вверх+вниз=запрещенная комбинация db 0bfh ; влево+вниз=влево-вниз db 0ffh ; влево+вправо+вверх=запрещенная комбинация db 0ffh ; влево+вправо=запрещенная комбинация db 07fh ; влево+вверх=влево-вверх db 0f7h ; влево db 0ffh ; вправо+вверх+вниз=запрещенная комбинация db 0dfh ; вниз+вправо=вниз-вправо db 0ffh ; вверх+вниз=запрещенная комбинация db 0fbh ; вниз db 0efh ; вправо+вверх=вправо-вверх db 0fdh ; вправо db 0feh ; вверх db 0ffh ; нет нажатых кнопок key_table ; таблица скан-кодов db 75h ; numpad 8 db 74h ; numpad 6 db 72h ; numpad 2 db 6bh ; numpad 4 db 7dh ; numpad 9 db 7ah ; numpad 3 db 69h ; numpad 1 db 6ch ; numpad 7

В архиве tools.zip вы найдете две программы: a51.exe - асемблер, hex2bin - конвертер hex-файлов, которые получаются на выходе асемблера, в двоичный формат, пригодный для прошивки ПЗУ микроконтроллера программатором.

Сборка и устранение неполадок

Собрать устройство по приведенной выше схеме можно на макетнице, плате вытравленной в домашних условиях или изготовленной промышленным способом. Под микроконтроллер следует поставить панельку. Лучше всего оставить место на плате под 2-3 16-выводных DIP-корпуса - они будут добавлены в последующих версиях.

Далее, после внесения желаемых изменений, ассемблируется исходный текст микропрограммы - программой a51.exe. Для прошивки программатором полученный hex-файл переводится в двоичный образ программой hex2bin.exe.

Собрав полностью устройство, подключаем его к клавиатуре и компьютеру. Три... Два... Один... Поехали!.. Правильно собранное из заведомо исправных компонентов устройство должно заработать сразу. Если нет - проверьте правильность монтажа, наличие питания на микроконтроллере. Осцилографом проверьте, запустился ли тактовый генератор и приходит ли импульс высокого уровня на вход RST при включении питания. При нажатии клавиш на клавиатуре импульсы на линиях P3.3 и P3.5 должны повторять с некоторой задержкой импульсы на линиях P3.2 и P3.4 соответственно. При нажатии/отпускании кнопок устройства на линиях P3.3 и P3.5 должны также появляться ипульсы. Если это не поможет - напишите мне (rashpil at aport dot ru ) багрепорт, указав модель и тип (AT, PS/2) своей клавиатуры, материнской платы/мультикарты, использованого микроконтроллера и частоту использованого кварцевого резонатора. Я постарался протестировать устройство с максимальным числом доступных мне материнских плат и клавиатур - неполадок выявлено не было. В моем случае использован кварц 14.2МГц.

Known bugs

Текущая версия микропрограммы содержит такие недоработки:

  • Не отслеживаются двухбайтовые скан-коды. Это приводит к тому, что иногда, при использовании одновременно хатки и клавиатуры, клавиши клавиатуры «зависают» в нажатом состоянии или воспринимаются неверно;
  • Иногда неверно передаются данные от контроллера к клавиатуре. Это может выражаться, например, в том, что не меняют свое состояние светодиоды, при нажатии клавиш Num Lock, Caps Lock, Scroll Lock;
  • Дребезг контактов кнопок хатки. Пока что это не стало фатальным для меня в играх.

Планы на будущее

Вот краткий список того, что я хотел бы реализовать в последующих версиях:

  • Мелкие багфиксы - более корректная обработка сигналов; отслеживание двухбайтовых скан-кодов;
  • Подключение матрицы 16x4 - поддержка до 64-х кнопок или двух хаток и до 56-ти кнопок;
  • Поддержка до 16-ти различных раскладок скан-кодов, сохраненных в ПЗУ микроконтроллера;
  • Подключение микросхемы NVRAM с возможностью сохранения и перепрограммирования «на лету» до 32-х раскладок скан-кодов.

Заключение

Я постарался изложить все данные, необходимые для понимания принципа функционирования моего устройства. Это описание не претендует на стопроцентную техническую точность. Если я в чем-то заблуждаюсь - пожалуйста изложите мне свою версию событий. Если вы сможете внести в мою схему и/или микропрограмму улучшения и дополнения, если у вас есть идеи относительно дальнейшего развития схемы - также сообщите мне об этом. Кроме того, жду информации от умельцев, которые смогли повторить или адаптировать это устройство под другие типы микроконтроллеров.

Владимир "Рашпиль" Климус (rashpil at ukr dot net )

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.

Компакт-диск прилагается только к печатному изданию книги.

Книга:

Разделы на этой странице:

На клавиатуре есть множество клавиш, которыми вы никогда не пользуетесь. Одна из самых надоедливых – клавиша , сохранившаяся со времен программистских языков типа Фортрана, где все писалось заглавными буквами. Редко кто пользуется и системными клавишами Windows (и основной, и для вызова контекстного меню) – это удобнее делать мышью. Между тем случайное нажатие этих клавиш тормозит всю работу. Те, кого это раздражает, могут отключить их или переназначить на другие функции – например, на соседние клавиши.

Рассмотрим на примерах эти действия, а потом расскажем, как это осуществляется в общем случае – для любой клавиши.

Сначала нужно в разделе реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSet ControlKeyboard Layout (не путать с Keyboard Layouts!) создать новый двоичный параметр (в меню так и будет написано – двоичный параметр), озаглавив его Scancode Map (с пробелом!), и присвоить ему значение по следующему образцу:

00 00 00 00 00 00 00 00

03 00 00 00 00 00 5C E0

00 00 5D E0 00 00 00 00

Эта строка отключит клавишу с флажком Windows и соседнюю клавишу вызова всплывающего меню. Разберемся в том, что здесь написано.

Сначала должно идти 8 пар нулей подряд. Затем идет число (с ведущим нулем) – в данном случае 03, которое означает количество отслеживаемых клавиш плюс единица (т. е. в этом примере отслеживаем две клавиши). После него всегда должно идти три пары нулей (дополняя до 4-х пар цифр). Заканчиваться запись должна всегда четверкой пар нулей. А вот между ними мы должны записать столько четверок парных чисел, сколько мы предусмотрели клавиш для отслеживания – в данном случае две. В них записываются так называемые скан-коды клавиш, которые желаем отключить. В табл. 12.2 приведены коды тех клавиш, которые целесообразно рассматривать в плане кандидатов на отключение или замену (см. далее).

Эти коды записываются в последние две пары каждой четверки пар чисел, первые две пары опять же нули – как вы и видите в образце. Таким образом, приведенная в качестве примера строка отключит нам правую клавишу (с флажком Windows) (00 00 5C E0) и соседнюю клавишу Вызова всплывающего меню (00 00 5D E0).

Таблица 12.2. Скан-коды клавиш


Что такое скан-коды и где их взять

Скан-код – это то число, которое выдает клавиатура при нажатии определенной клавиши. Скан-коды не следует путать с виртуальными кодами клавиш – последние формируются уже на уровне BIOS и Windows и в дальнейшем определяют коды символов, те самые, что, например, образуют содержимое текстовых документов. В большинстве случаев они никак между собой не связаны. Например, виртуальный код клавиши «пробел» – 32 (совпадает с кодом символа «пробел» в однобайтных кодировках), а скан-код ее – 57 (в HEX-форме это будет 20 и 39 соответственно). Заметьте, что виртуальные коды не эквивалентны символьным – чтобы превратить виртуальный код в код символа, надо еще учесть языковую раскладку, состояние клавиш , и, между прочим, используемую систему кодировок – однобайтную или Unicode. Все это проделывает системный драйвер клавиатуры еще до того, как событие нажатия попадает в очередь Windows-сообщений. Некоторые клавиши ( или ) вообще ни с какими символами не связаны и в указанную очередь не попадают. Поэтому для полной подмены функциональности некоей клавиши подменить виртуальные коды (что вообще-то может сделать любой, владеющий навыками программирования в Delphi или Visual C++) недостаточно – надо действовать на более глубоком уровне, манипулируя именно скан-кодами. Это и позволяет осуществить параметр Scancode Map в реестре Windows.

Для наших целей скан-коды, как вы можете догадаться по приведенной таблице, должны быть представлены в шестнадцатеричной (HEX), а не десятичной форме. Таблицы виртуальных кодов и кодов символов обычно прилагается к любому пособию по Windows-программированию, а вот полную таблицу скан-кодов разыскать непросто. Одна из таких таблиц находится на сайте «Электронная библиотека» по ссылке http://ntlib.chat.ru/ware/tables/scan.htm . Она немного неудачно составлена – так называемые расширенные клавиши (это те, у которых второй байт в нашей таблице равен E0) там показаны добавлением лишнего разряда, равного 1. То есть выбрав из колонки HEX скан-код, например, 11С (клавиша на цифровой клавиатуре), его надо для наших целей переписать как 1С E0. Официальный полный набор скан-кодов, включая и клавиши управления питанием (но исключая дополнительные медиаклавиши), можно скачать с сайта Microsoft. Ссылка на документ очень длинная, потому просто наберите в поиске на microsoft.com слова Keyboard Scan Code Specification», и получите искомое – правда, по-английски. При изучении этого документа учтите, что нас интересует только один набор кодов: Scan Code Set 1.

Разумеется, готовить такую строку чисел следует заранее и внимательно пересчитать все пары перед тем, как вводить ее в реестр. Но при вводе вы увидите, что вам помогут не наделать ошибок. Ввод значения двоичного числа осуществляется вручную (рис. 12.11), но несмотря на непривычный вид этого редактора, вы быстро убедитесь, что работать с ним очень удобно. В частности, не возникает проблем при подсчете вводимых пар – они автоматически группируются по восемь в строке. Не забудьте перезагрузить ПК после окончательного ввода значений параметра.


Рис. 12.11. Ввод значений двоичного параметра

Для не просто отмены, а еще и переназначения, придется немного усложнить запись – первые две пары нулей в тех четверках, что содержат коды отключаемых клавиш, заменить на те коды, которые должны, по вашему мнению, работать. Например, значение параметра Scancode Map, равное

00 00 00 00 00 00 00 00

03 00 00 00 00 00 5C E0

1D E0 5D E0 00 00 00 00

сделает так, что правая клавиша с флажком Windows отключится, а Будет дублировать правый , т. е. ближайшую к ней клавишу. Именно это значение Scancode Map приведено в качестве примера на рис. 12.11.

Покажем, как справиться с . Эксперименты показывают, что с ней не все однозначно – в частности, попытка простого отключения может не дать результатов. Но я приведу значение параметра Scancode Map, которое гарантировано отключает – ее функция меняется на функцию (правого, но на практике это неважно), а Здесь, как и ранее, дублирует правый :

00 00 00 00 00 00 00 00

03 00 00 00 1D E0 5D E0

2A 00 3A 00 00 00 00 00

На прилагаемом диске в папке Registry находится файл key.reg, при запуске которого и подтверждении того, что вы действительно хотите внести изменения в реестр, автоматически создастся параметр Scancode Map с таким значением. Если не хотите трогать ничего, кроме , то отредактируйте это значение следующим образом: 03 замените на 02 и замените четыре байта с ненулевым значением во второй строке нулями.

Ничего фатального в результате этих ваших экспериментов произойти не должно – если вы в чем-то ошиблись или решили оставить все как есть, просто удалите из реестра параметр Scancode Map и перезагрузите компьютер. Или верните систему в исходное состояние с помощью точек восстановления.

Отключение клавиши , как входа в меню

К сожалению, справиться с клавишей как системной для Windows (вызова главного меню), сохранив ее функциональность как клавиши-модификатора, через реестр не получится – она вообще перестанет реагировать на нажатие. Потому, раз уж мы занялись клавишами, заодно укажу средство с ней справиться, хотя оно и не имеет отношения к реестру. На диске к книге имеется папка AltSpy, в которой размещена программа того же имени. Скопируйте всю папку (она содержит три файла) на жесткий диск и запустите файл с расширением js (сценарий на языке Java Script). Чтобы не запускать руками каждый раз, его следует включить в автозагрузку (см. разд. 10.1.3 «Автозагрузка»). Спустя 10 секунд после запуска сценария AltSpy создаст в области уведомлений кареглазый значок, у которого окажется единственный пункт контекстного меню – Закрыть. Пауза нужна для того, чтобы AltSpy гарантированно оказался самым последним при запуске и перекрыл другие службы. После этого перестанет вызывать главное меню, зато сохранит свою основную функциональность. Возможность вызвать главное меню у вас при этом не пропадает – эту функцию по-прежнему выполняет клавиша , зато теперь куда труднее вызвать его случайно и тем самым сбить фокус ввода с нужного элемента.