close

Вход

Забыли?

вход по аккаунту

?

Разработка программы рисования линий с помощью мыши

код для вставкиСкачать
Aвтор: Цыбин Е. Примечание:от редактора: только текстовые файлы 2004г., Луганск, Восточноукраинский национальный университет им. В. Даля, колледж, преп. Самоздра О.М., "5"
ВВЕДЕНИЕ
Мой курсовой проект посвящается созданию программы, рисующей линии между контурными точками, расставляемыми в местах, где была нажата левая кнопка мыши. Это простейший пример, способный показать, что для демонстрации некоторых функций работы мыши актуальным является применение языка программирования "Ассемблер". Мышь - устройство ввода, получившее очень большую популярность. Трудно представить себе современный компьютер без мыши или эквивалентного ей указывающего устройства. В качестве эквивалентного устройства может быть планшетка или разного рода сенсорные площадки, где управление осуществляется пластмассовым карандашом или непосредственно пальцем пользователя.
1 ОБЩИЙ РАЗДЕЛ
Устройство для ручного ввода графической информации в вычислительную машину, лишь много позже получившее своё современное название, было придумано, сконструировано и запатентовано Дугласом Энгельбартом из Стэнфордского университета в середине 60-ых годов прошлого века. Энгельбарт, известный также как автор графического пользовательского интерфейса и один из первых разработчиков гипертекстовой "нивы", был пионером, так что дальше довольно громоздкого и неудобного прототипа его мысль не пошла. Честь превращения мыши из коробки на двух наружных колёсах в конструкцию, которую сегодня уже начинают забывать - коробочку с шариком, также вращавшим пару роликов, но помещённых внутри - принадлежит работникам лаборатории Xerox PARC, сделавшим это в начале 70-ых гг. Наконец, облекли мышку в привлекательную внешне форму и выпустили на массовый рынок исследователи швейцарского НИИ с труднопроизносимым названием (сокращаемым до EPFL), работавшие в организованной ими и знакомой сегодня каждому компании Logitech. Шли годы, менялись внешний вид и количество кнопок (в конструкции Энгельбарта была только одна клавиша, и этот вариант был сравнительно популярен, в частности, на платформе Mac), а принцип работы манипулятора оставался прежним. Шарик собирал пыль, механическая конструкция была инерционной и неточной, и неудивительно, что в один прекрасный день в чью-то светлую голову пришла идея избавиться от механики, переложив задачу слежения за движениями руки пользователя на плечи электроники и оптики. Ранний период развития варианта мыши, получившей название оптической, связывают с именем неутомимого американского предпринимателя Стивена Кирша (известного, в частности, как основатель Infoseek Corp.). Это он придумал и запатентовал в начале 80-ых годов манипулятор, определявший направление движения с помощью простого оптического сенсора. Мышь Кирша могла работать только на специальном металлическом коврике, покрытом сеткой тёмных полос: она освещала коврик и следила за яркостью отражений, определяя траекторию по пересечениям полос. Ранняя эта конструкция так и не получила массового признания. Потребовались ещё почти двадцать лет развития электроники, для того чтобы оптические мыши смогли составить конкуренцию своим механическим предкам. Впрочем, современные оптические мыши устроены во многом схоже с киршевской. Они включают три основных элемента: светодиод, освещающий рабочую площадку, оптический сенсор в виде простейшей матрицы светочувствительных элементов (похожей на матрицу в цифровых фотоаппаратах, но значительно меньшего разрешения - примерно 16 х 16 пикселей), и сигнальный микропроцессор (DSP), умеющий распознавать образы. "Фотографируя" поверхность под собой полторы тысячи раз в секунду, оптическая мышь с помощью чипа DSP улавливает смещения картинки и подаёт соответствующие сигналы компьютеру. Работают такие мыши практически на любой поверхности, исключая лишь зеркальные, полированные и поверхности с крупноволокнистой фактурой. Точность позиционирования, почти нулевая инерционность, отсутствие необходимости в чистке - всё это помогло оптическим мышам вытеснить своих предшественниц с рабочих столов. И здесь мы подходим к тому, с чего всё собственно и началось. Уже знакомая вам компания Logitech представила на минувшей неделе компьютерную мышь новой конструкции. Строго говоря, Logitech MX1000 Laser Cordless Mouse относится к оптическому племени, но вместо светодиода в ней установлен миниатюрный полупроводниковый лазер, улучшена разрешающая способность фотосенсора. Принцип действия остался прежним, так что посвящать ему отдельный абзац нет необходимости. Чем лазерная мышь лучше оптической? Абсолютной неприхотливостью: она способна работать даже на зеркале благодаря свойствам лазерного излучения и новой оптической системе. Тем же самым она обязана и непревзойдённой точности: MX1000 различает в 20 раз больше деталей, чем обычная оптическая мышь. Стоит такая машинка почти 80 долларов. Вопрос в том, считать ли лазерную мышь Logitech новой ветвью на эволюционном древе (авторитет компании - аргумент в пользу) или это обычный маркетинговый ход с добавлением никому не нужной функции, для того чтобы выделиться средь толпы производителей? В самом деле, зачем вам двадцатикратное улучшение и без того более чем приемлемой точности?
2 ОПИСАНИЕ УСТРОЙСТВА 2.1 ОПИСАНИЕ МЫШИ
Популярность мышек заставила производителей серьезно задуматься о модернизации своих продуктов. В результате мы получили несколько типов мышек: механических, оптических, беспроводных оптических, беспроводных механических. В механических мышках для определения расстояния, на которое она переместилась, используются механические системы оповещения, в которых механическое вращение вертикальной, горизонтальной и диагональной осей преобразуются в сигналы, передаваемые на контроллер. В оптических мышках используются мощный светодиод, по отражению луча которого от поверхности, на которой находится мышка рассчитывается расстояния, на которое она переместилась,. Наличием колесика прокрутки уже трудно кого-либо удивить, зато в списках рейтингов можно увидеть мультимедийные мышки, сочетающие в себе все приемущества передовых разработок. При использовании такой мышки каждый палец задействован в работе для ее удобства и ускорения. Теперь без лишних движений мыши вы можете сворачивать, разворачивать, закрывать окна, управлять проигрывателем музыки или видео. При просмотре изображений вы можете без затруднения пролистывать их, изменять размеры и т. п.
Мышь состоит из 3-х частей: внешней оболочки (обычно пластмассовой, в области которой находятся кнопки и колесики прокрутки), блока микросхем (имеет прямое подключение к порту компьютера, передает сигналы от мыши), механической или оптической части (служит для определения расстояния, на которое мышь переместилась).
Современная мышь смогла избавить нас от рутинной работы, лишних движений и таких неприятных вещей как чистка механических элементов от накопившейся грязи...
Не трудно догадаться, что для такого набора функций понадобятся нестандартные драйверы, (система может установить свои версии, но они предназначены для использования лишь стандартных функций. По-умолчанию (в самых последних версиях операционных систем, таких как Windows XP, Windows Longhorn) эти драйверы могут использовать левую, правую кнопки, колесико прокрутки и до двух кнопок навигации для упрощения работы в сети Интернет.). Их можно найти в коробке с устройством. Эти драйверы позволяют мышку работать корректно и использовать полный спектр функций, предусмотренных производителем. В панели управления на вкладке "Мышь" становятся доступными настройки новых функций.
2.2 ПРОГРАММНАЯ МОДЕЛЬ МЫШИ
Все общение с мышью в DOS выполняется через прерывание ЗЗh,обработчик которого устанавливает драйвер мыши, загружаемый обычно при запуске системы. Современные драйверы поддерживают около 60 функций, позволяющих настраивать разрешение мыши, профили ускорений, виртуальные координаты, дополнительные обработчики событий и т. п. Большинство этих функций требуются редко, сейчас рассмотрим основные.
INT33h, АХ=0: Инициализация мыши Вход: АХ = OOOOh Выход: АХ = OOOOh, если мышь или драйвер мыши не установлены
АХ = OFFFFh, если драйвер и мышь установлены
ВХ = число кнопок:
2 или OFFFFh - две
3 - три
0000 - другое количество Выполняется аппаратный и программный сброс мыши и драйвера.
INT33h, AX=1: Показать курсор Вход: АХ - 000 lh
INT33h, AX = 2: Спрятать курсор Вход: АХ = 0002h
Драйвер мыши поддерживает внутренний счетчик, управляющий видимостью курсора мыши. Функция 2 уменьшает значение счетчика на единицу, а функция 1 увеличивает его, но только до значения 0. Если значение счетчика - отрицательное число, он спрятан, если ноль - показан. Это позволяет процедурам, использующим прямой вывод в видеопамять, вызывать функцию 2 в самом начале и 1 в самом конце, не заботясь о том, в каком состоянии был курсор мыши у вызвавшей эту процедуру программы.
INT33h, AX = 3: Определить состояние мыши Вход: АХ - ОООЗh Выход: ВХ - состояние кнопок:
бит 0. нажата левая кнопка
бит 1: нажата правая кнопка
бит 2: нажата средняя кнопка
СХ
DX
Х-координата Y-координата
Возвращаемые координаты совпадают с координатами пикселов соответствующей точки на экране в большинстве графических режимов, "роме 04, 05, ODh, 13h, где Х-координату мыши нужно разделить на 2, чтобы получить номер столбца соответствующей точки на экране. В текстовых режимах oбе координаты надо разделить на 8 для получения номера строки и столбца соответственно.
В большинстве случаев эта функция не используется в npoграммах, так как для того, чтобы реагировать на нажатие кнопки или перемещение мыши в заданную область, требуется вызывать это прерывание постоянно, что приводит к трате процессорного времени. Функции 5 (определить положение курсора при последнем нажатии кнопки), 6 (определить положение курсора при последнем отпускании кнопки) и OBh (определить расстояние, пройденное мшью) могут помочь оптимизировать работу программы, самостоятельно "следящей" за всеми передвижениями мыши, но гораздо эффективнее указать драйверу контролировать ее передвижения (чем он, собственно, и занимается постоянно) и передавать управление в программу, как только выполнится заранее определенное условие, например пользователь нажмет на левую кнопку мыши. Такой сервис обеспечивает функция 0Сh - установить обработчик событий.
INT 33h, AX = 0Сh: Установить обработчик событий Вход: АХ = 000Ch
ES:DX = адрес обработчика СХ = условие вызова
бит 0: любое перемещение мыши
бит 1: нажатие левой кнопки
бит 2: отпускание левой кнопки
бит 3: нажатие правой кнопки
бит 4: отпускание правой кнопки
бит 5: нажатие средней кнопки
бит 6: отпускание средней кнопки СХ = 0000h - отменить обработчик
Обработчик событий должен быть оформлен, как дальняя процедура (то есть завершаться командой RETF). На входе в процедуру обработчика АХ содержит условие вызова, ВХ - состояние кнопок, СХ, DX - Х- и У-координаты курсора, SI, DI - счетчики последнего перемещения по горизонтали и Вертикали (единицы измерения для этих счетчиков - мики, 1/200 дюйма), DS - сегмент данных драйвера мыши. Перед завершением программы установленный обработчик событий должен быть обязательно удален (вызов функции 0Сh с СХ= 0). так как иначе при первом же выполнении условия управление будет передано по адресу в памяти, с которого начинался обработчик.
Функция 0Сh используется так часто, что у нее появилось несколько модификаций - функция 14h, дающая возможность установить одновременно три обработчика с разными условиями, и функция 18h, также позволяющая установить
3 РАЗРАБОТКА АЛГОРИТМА УПРАВЛЕНИЯ МЫШЬЮ
Схема обработки прерываний:
Обработка прерываний осуществляется с помощью специального процессора, производящего предварительную обработку запросов на прерывания. Выбирается запрос с наибольшим приоритетом, а затем уже обращается к процессору, т.е. на выходе INTR подключен контроллер прерываний, а к нему уже подключается внешнее устройство. Немаскируемое прерывание связано с процессором. Таймер обращается к процессору напрямую. Запрос на прерывание внешнее устройство посылает на контроллер прерываний , который затем посылает запрос по линии INTR на процессор, анализирующий флаг прерывания, если он равен 1, то по линии INTA идет подтверждение готовности обработать запрос. После этого через шину данных контроллер прерываний формирует команду INT с соответствующим номером прерывания. Далее процессор обрабатывает эту команду и передает управление на обработчик прерывания, который взаимодействует с устройством, вызвавшим это прерывание через шину данных и адреса, а также через порты, к которым подсоединено устройство и его контроллер.
4 РАЗРАБОТКА И РЕАЛИЗАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Для работы моей программы требуется IBM совместимый компьютер на базе процессора Intel и любая возможная техническая конфигурация для запуска операционной системы DOS. Программа занимает не более 500 байт оперативной памяти. Также потребуется предварительно откомпилированный исполняемый файл программы. Пользователю нужно запустить программу и нажать левую кнопку мышки в разных местах экрана для проверки работоспособности программы. Если между точками в которых были произведены нажатия рисуются лини, то программа работает корректно.
Исходный код программы представлен в приложении А.
Блок-схема представлена в приложении Б.
5 ОТЛАДКА И ИСПЫТАНИЕ ПРОГРАММЫ
Перед запуском программы следует убедиться в том, что к компьютеру подсоединена мышь, включить компьютер, запустить программу в 16-битной среде, нажать левую кнопку мыши в разных местах экрана. Программа может работать некорректно при условии несоблюдения вышеуказанных условий.
В процессе испытаний программа работала корректно, трудностей с компиляцией и отладкой не возникло.
ЗАКЛЮЧЕНИЕ
В процессе выполнения данного курсового проекта я ознакомился с устройствами разных типов мышек, с их программными моделями. Научился писать простейшее программное обеспечение, использующее некоторые функции мыши. Разработал алгоритм управления устройством, написал, отладил и экспериментально проверил функциональность программы.
ЛИТЕРАТУРА
1. Абель П. и программирования/ Пер. с англ. Ю. В. Сальникова.- М.: Высш. Шк. 1992г. - 447с.: ил. 2. А. Жуков, А. Авдохин "Assembler".-Спб: БХВ - Петербург, 2002..
3. Архитектура ввода-вывода персональных ЭВМ IBM PC Под pедакцией Ю. С. Лукача (C) Инженеpно-техническое бюpо, 1990 4. В. Юров "Assembler" Практикум.-Спб.:Питер, 2001.
5. В. Юров "Assembler" Учебник.-Спб.:Питер, 2001.
6. Ирвин, Кип. Язык Ассемблера для процессоров Intel, 3-е издание: Пер. с англ. - М.: Издательский дом "Вильямс", 2002.-616с.: ил. - Парал. Тит. Англ.
7. Использование Turbo Assembler при разработке программ / Сост. А. А. Чекатков.-Киев:Диалектика,1995.-228с
Документ
Категория
Программирование, Базы данных
Просмотров
132
Размер файла
2 299 Кб
Теги
курсовая
1/--страниц
Пожаловаться на содержимое документа