Russian Hamradio - Устройство компьютерной мыши.
Сайт радиолюбителей Республики Коми.
Устройство компьютерной мыши.
На главнуюГлавная

Редкий владелец персонального компьютера (ПК) не пользуется сегодня манипулятором, называемым в обиходе "мышью". И это неудивительно — во многих случаях работать на ПК с ее помощью гораздо удобнее, чем с клавиатуры. Однако не все знают, как устроена "мышь", как взаимодействует с ПК, как использовать ее в своих программах. Ответы на эти вопросы найдете в публикуемой ниже статье.

История

История "мыши" восходит к сороковым годам и связана с развитием радиолокационной техники. Системы автоматического слежения за целями в те времена отсутствовали, и операторы первых радиолокационных станций (РЛС) определяли их координаты, прикладывая к экрану специальную линейку, а результат сообщали голосом. Позднее с отметкой цели стали совмещать специальный маркер (по теперешней терминологии — "курсор"). формируемый на экране локатора электронным методом. Положение маркера можно было автоматически передать, например, в систему наведения зенитного орудия.

Для управления маркером было придумано специальное устройство, которое у англичан получило название "target tracking ball" (шар для сопровождения целей), а у нас — "шаровой манипулятор", хотя чаще неофициально использовалось немецкое название "кнюппель". Устройство представляло собой шар размером с биллиардный (нередко это и был самый настоящий биллиардный шар), вмонтированный в стол оператора и снабженный датчиками вращения. Оператор управлял маркером, вращая шар ладонью. Это оказалось настолько удобным, что "кнюппель" до сих пор остается принадлежностью многих пультов операторов РЛС.

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

Первоначально манипулятор предназначался для компьютерных игр, почему и получил "детское" название "мышь". Между прочим, когда подобным манипулятором был оснащен отечественный компьютер ЕС-1841, ему придумали название "колобок". Но распространения оно не получило, возможно потому, что дети редко играли с этим компьютером и не знакомились с его документацией. В последнее время "мышь" снова перевернули шаром вверх — таким манипулятором часто снабжают малогабаритные компьютеры типа "Notebook".

Обычно "мышь" имеет несколько кнопок, позволяющих оператору, не отрывая руки от манипулятора, подавать команды на выполнение тех или иных действий. Чаще всего кнопок — две или три, хотя известна конструкция с 42 кнопками. С точки зрения внутреннего устройства "мыши" все кнопки равноправны, их функции определяются программой, исполняемой компьютером. Левая кнопка обычно дублирует клавишу Enter, и нажатие на нее приводит к исполнению какого-либо действия, например выбору пункта меню, на который указывает курсор. Правая кнопка чаще всего дублирует клавишу Esc, отменяя выполняемую операцию. Для средней кнопки устоявшихся правил нет.

Во многих программах, использующих "мышь", предусмотрены и более сложные операции. Например, при перемещении "мыши" с одновременным удержанием в нажатом положении одной из кнопок может перемещаться по экрану не только курсор, но и объект, на который он указывает. Двойной "щелчок" (т. е. двукратное нажатие на нее) применяется для запуска прикладной программы, на название которой указывает курсор мыши.

Устройство

Устройство основного элемента "мыши" —датчика перемещения схематично показано на рис. 1. Он состоит из обрезиненного шарика 5 и двух касающихся его металлических валиков 1 и 7. Точки касания разнесены по образующей шара на угол 90°. При движении "мыши" по оси X шарик вращается вокруг оси Y, приводя во вращение валик 1, а валик 7 остается неподвижным. Если же "мышь" движется по оси Y, то вращается валик 7, а неподвижен валик 1. Таким образом, любое движение "мыши" раскладывается на составляющие по двум взаимно перпендикулярным осям, остается только преобразовать вращение валиков в электрические сигналы.

Рис.1.

Делается это с помощью закрепленных на осях валиков теневых масок 4 и 6, представляющих собой диски из непрозрачного материала с прорезями. У каждого из дисков размещено по два фотодиода 2, которые через прорези диска освещаются светодиодами 3. Благодаря этому при вращении диска со светодиодов снимаются импульсные сигналы. Соотношение диаметров шара и валиков и число прорезей в дисках, как правило, выбраны таким образом, что каждый импульс соответствует перемещению "мыши" на 1/ 200 дюйма (0,127 мм). Эту единицу иногда называют "микки" по имени героя диснеевских мультфильмов Микки-Мауса.

Почему каждый диск снабжен не одним, а двумя оптическими датчиками? На рис. 2 диск показан в положении, в котором освещены оба его датчика. Так как фотодиоды смещены относительно плоскости оси вращения, при повороте диска по часовой стрелке первым будет затенен датчик 1, а затем датчик 2. При дальнейшем вращении они в таком же порядке выйдут из затенения. С изменением направления вращения изменяется и очередность затенения и освещения датчиков. После несложной логической обработки контроллер "мыши" определяет не только величину, но и знак перемещения: положительным считается движение вверх или вправо, отрицательным — вниз или влево.

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

Рис.2.

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

Читатели, знакомые с сигналами, выведенными на разъем коммуникационного порта, могут задать вопрос, вынесенный в заголовок статьи: Чем же питается "мышь"? Ведь для оптических датчиков и микросхемы-контроллера требуется питание, а ни одно из напряжений источника питания компьютера на коммуникационный разъем не выведено. Ответ прост: датчики и контроллер "мыши" настолько экономичны, что для их питания достаточно сигналов TXD, DTR или RTS, всегда присутствующих на этом разъеме.

Информация от "мыши" передается последовательным кодом всего по одной паре проводов. Передача ведется со скоростью 1200 Б (бод) с восемью информационными и одним стоповым битом без контроля четности. Чаще всего при каждом изменении состояния (перемещение, нажатие или отпускание кнопки) "мышь" передает 5 байт данных. Первый из них обязательно содержит 1 в старшем разряде, а три его младших разряда отображают состояние кнопок "мыши".

Каждый из них равен 0, если соответствующая ему кнопка нажата, и 1 в противном случае. Остальные разряды первого байта всегда равны 0. Второй и третий байты содержат информацию о величине перемещения "мыши" по оси X (вправо — влево), а четвертый и пятый — по оси Y (вверх — вниз). Это самый распространенный вариант, однако существуют и другие. Иногда "мышь" имеет переключатель, позволяющий выбрать нужный формат передаваемых ею сигналов.

Данные о сигналах, передаваемых "мышью", могут понадобиться только при самостоятельном сопряжении ее с каким-либо компьютером. Все программное обеспечение, нужное для работы на IBM-совместимом компьютере с "мышью", обычно имеется на дискете, продаваемой вместе с ней. На дискете записан так называемый "драйвер мыши" — программа, дополняющая операционную систему компьютера функциями, необходимыми для того, чтобы прикладные программы могли пользоваться возможностями "мыши". Драйвер преобразует сигналы "мыши", учитывая все их особенности, в стандартную форму, понятную прикладным программам.

Файл драйвера обычно носит имя mouse.sys, mouse.com или mouse.exe. Как правило, вместе с ним поставляется установочная программа (она называется install.exe), которую достаточно запустить один раз, и она автоматически выполнит все необходимые для установки драйвера операции.

Если установочной программы нет, то чаще всего достаточно сделать следующее. Переписать файл драйвера в корневую директорию диска С компьютера. Если драйвер имеет расширение .sys, то файл config.sys следует дополнить строкой

DEVICE = MOUSE.SYS

Для использования драйверов с расширением .com или .ехе нужно записать в файл autoexec.bat строку

MOUSE

В некоторых случаях, кроме имени драйвера, нужно указать и номер коммуникационного порта, к которому подключена "мышь", например, MOUSE/2 означает, что "мышь" подключена к порту COM2. Имеются и некоторые другие параметры, о которых можно узнать из описания конкретного драйвера. Краткую информацию об особенностях и параметрах драйвера можно получить, выполнив команду

MOUSE/?

Для приведения в действие установленного драйвера осталось перезапустить компьютер комбинацией клавиш Ctrl + Alt + Del, кнопкой Reset или просто выключив и включив питание.

Функции

Доступ к "мышиным" функциям производится через прерывание 33Н. Вызывая это прерывание, в регистре АХ (не АН!) указывают номер функции. Необходимо помнить, что во всех функциях координаты "мыши" всегда задаются и отсчитываются в элементах графического изображения (пикселах) независимо от того, в каком (текстовом или графическом) режиме работает контроллер дисплея. Для пересчета числа пикселов в число текстовых символов необходимо разделить значение координаты на 8.

Функция ООН предназначена для выяснения, загружен ли драйвер "мыши" в ОЗУ компьютера. Если эта функция возвращает в регистре АХ значение 0, то драйвер отсутствует и вызывать другие функции "мыши" нет смысла. Если же драйвер есть, то в регистре АХ возвращается значение OFFFFH, а в ВХ — число кнопок "мыши". Одновременно драйвер устанавливается в исходное состояние.

Функция 01Н включает, а 02Н — выключает изображение курсора "мыши" на экране.

Функция 03Н служит для определения координат "мыши" и состояния ее кнопок. Она возвращает в регистре СХ горизонтальную, а в регистре DX вертикальную координаты. Нулевой (младший), первый и второй разряды регистра ВХ содержат логические 1, когда нажаты соответственно левая, правая и средняя кнопки "мыши".

Функция 04Н перемещает курсор "мыши" на экране в позицию, заданную регистрами СХ и DX.

Функция 05Н сообщает, сколько раз нажималась кнопка "мыши" за время, прошедшее с момента последнего вызова этой же функции. Содержимое регистра ВХ при вызове функции определяет, о какой кнопке запрашиваются данные (0 — левая, 1 — правая, 2 — средняя). В этом же регистре возвращается число нажатий, а регистры СХ и DX содержат координаты курсора в момент последнего нажатия. В регистре АХ возвращается текущее состояние всех кнопок аналогично возвращаемому в регистре ВХ функцией 03Н.

Функция 06Н аналогична функции 05Н, но подсчитывается число не нажатий, а отпусканий кнопки.

Функция 07Н задает границы перемещения курсора "мыши" по горизонтали. В регистре СХ задается минимальная, а в регистре DX — максимальная координата. При попытке вывести курсор за указанные пределы он останется на одной из границ.

Функция 08Н аналогична функции 07Н, но задает границы вертикального перемещения курсора.

Функция 09Н задает форму курсора "мыши" в графическом режиме. Курсор размерами 16x16 пикселов по умолчанию имеет вид стрелки, направленной влево вверх. Координатами курсора ("точкой прицеливания") считаются координаты острия стрелки. С помощью этой функции курсору можно придать желаемую форму и выбрать в качестве "точки прицеливания" любую его точку. Форму курсора задают двумя массивами 16-разрядных слов по 16 слов в каждом.

Первый из них (маска AND) определяет, какие из элементов основного изображения, попавшего в область курсора, будут удалены с экрана, т.е. нарисованы цветом фона, второй (маска XOR) — какие элементы изменят цвет на дополнительный (например, из синих станут желтыми). Адрес начала области памяти длиной 64 байта, содержащей эти два массива, должен быть задан в паре регистров ES:DX.

В регистрах ВХ и СХ задают соответственно горизонтальную и вертикальную координаты "точки прицеливания", причем верхнему левому углу области курсора соответствуют координаты 0, 0, а нижнему правому углу — 15,15. Пример формирования изображения курсора показан на рис.3.1, рис.3.2, рис.3.3.

Рис.3.1

Функция ОАН задает вид курсора в текстовом режиме. Если при вызове этой функции ВХ = 1, то курсор "мыши" будет формироваться контроллером дисплея аналогично обычному текстовому курсору. В регистрах СХ и DX в этом случае указывают номера его начальной и конечной строк. Если же ВХ = 0, то курсор будет формироваться программно.

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

Рис.3.2.

Все разряды этого слова, которым в коде, записанном в регистре СХ, соответствуют нули, Очищаются. Затем инвертируются разряды, которым в коде, записанном в регистре DX, соответствуют единицы. Полученные новые значения кодов записываются обратно в видеопамять. Естественно, старые значения кодов символа и атрибута сохраняются в памяти драйвера "мыши" и будут восстановлены на прежнем месте при перемещении курсора.

Имеется одна тонкость, которую нужно учитывать при программировании. Если на знакоместо, занятое курсором "мыши", вывести символ, отличающийся от находившегося там ранее, то после перемещения манипулятора здесь восстановится старый символ.

Рис.3.3.

Функция ОВН аналогична функции 03Н, но возвращает не абсолютные координаты курсора, а величину его перемещения со времени последнего вызова этой же функции. Информации о состоянии кнопок функция не дает.

Функция ОСН позволяет программисту задать нужную ему реакцию на события, связанные с "мышью": ее перемещение, нажатие и отпускание кнопок. События, на которые необходимо реагировать, должны быть отмечены единицами в соответствующих разрядах регистра СХ:

  • разряд 0 (младший) — движение "мыши";
  • 1 — нажатие левой кнопки;
  • 2 — отпускание левой кнопки
  • 3 — нажатие правой кнопки;
  • 4 — отпускание правой кнопки;
  • 5 —нажатие средней кнопки;
  • 6 — отпускание средней кнопки

После выполнения этой функции драйвер "мыши" на каждое из заданных событий будет реагировать вызовом обработчика событий — подпрограммы, адрес которой был указан в регистровой паре ES:DX. Этой подпрограмме в регистре АХ будет передаваться маска происшедшего события в указанном выше формате, ВХ будет содержать текущее состояние кнопок, СХ и DX — координаты курсора, а в регистрах SI и DI будут находиться величины последнего перемещения "мыши" по горизонтали и вертикали. Естественно, придется самостоятельно написать эту подпрограмму, позаботившись о том, чтобы она выполняла все нужные действия.

Функция OFH изменяет соотношение скоростей движения ''мыши" и ее курсора. При вызове в регистре СХ указывают число "микки", необходимых для перемещения курсора на восемь элементов изображения (пикселов) по горизонтали, а в регистре DX — аналогичную величину по вертикали.

Функция 10Н устанавливает прямоугольную "запретную зону", попав в которую курсор "мыши" становится невидимым. Координаты левого верхнего угла этой зоны задаются в регистрах СХ и DX, а правого нижнего — в регистрах SI и DI. Запретная зона отменяется каждым вызовом функций 00Н или 01Н.

Функция 13Н устанавливает порог скорости перемещения "мыши", при превышении которого скорость движения курсора по экрану удваивается. Это позволяет быстро перемещать курсор на большие расстояния, сохраняя возможность плавно подводить его к желаемой точке. Величину порога задают в регистре DX.

Функция 14Н аналогична функции ОСН и отличается от нее тем, что, установив новый обработчик, возвращает в регистрах СХ и ES:DX маску и адрес ранее действовавшего. Это позволяет при необходимости восстановить старый обработчик.

Функции 15Н, 16Н и 17Н позволяют запомнить состояние драйвера "мыши" и при необходимости восстановить его. Первая из них (15Н) сообщает в регистре ВХ размер необходимой для этого области памяти, вторая (16Н) запоминает состояние драйвера в области памяти, адрес которой указывается в регистрах ES:DX, а длина должна быть равна величине, определенной с помощью функции 15Н. Функция 17Н восстанавливает состояние драйвера, пользуясь данными из этой области.

Функция 1DH устанавливает, на какой видеостранице отображается курсор "мыши". Номер страницы задают в регистре ВХ.

Функция 1ЕН сообщает в регистре ВХ номер видеостраницы, на которой отображается курсор "мыши".

Функция 24Н сообщает в регистре ВХ номер версии драйвера "мыши". Кроме того, в СН сообщается тип "мыши" (например, цифра 2 означает "мышь", подключаемую к последовательному порту), а в CL — номер аппаратного прерывания, используемого драйвером.

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

А. Долгий

На главнуюГлавная
Rambler's Top100 Rambler's Top100 Рейтинг ресурсов УралWeb