Программирование LPT порта в Delphi, под Win9x, WinXP на основе метода «inpout32»
В этой статье, я хочу подробно остановиться еще на одном методе, программирования LPT порта под Win9x, WinXP. Возможно, кому то он покажется более удобным нежели программирование с помощью драйвера LPTWDMIO, описанного в предыдущей статье. Будем учиться управлять регистрами порта LPT, из программы на Delphi с помощью библиотеки inpout32.dll.
Сразу скачайте файлы проекта (среда программирования: Borland Delphi 5.0 - 7.0).
А теперь рассмотрим, как это приложение сделать. Итак, запускаем Borland Delphi 7.0. Перед нами должна сразу появиться рабочая среда и заготовка формы будущего приложения.
Давайте прикинем, каким будет наше приложение. Наверное, нам хотелось бы иметь возможность указать адрес порта с которым будем работать, значение которое мы захотим туда (в порт) записать и две кнопки: одна предназначена для записи данных в порт, другая для чтения. Сказано - сделано. С верхней панели перетаскиваем на форму нужное количество edit-окошек, статических текстов и кнопок. При выделении нужного элемента на форме справа в окне Object Inspector можно задавать различные свойства для элемента. В итоге сформируйте форму, так как на рис. ниже.


Теперь возьмемся собственно за программирование. Для начала нам нужно как-то подсоединить inpout32.dll к нашему проекту. Для этого в Delphi есть несколько вариантов, но остановимся на следующем: в папку где расположен проект программы помещаем только библиотеку inpout32.dll (см. пример в папке Eximp архива). Далее в заголовке программы в секции uses помещаем прототипы функций Out32 и Inp32 со специальной директивой компилятора external, говорящей откуда нужно эти функции брать.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
function Inp32(PortAdr: word): byte; stdcall; external 'inpout32.dll';
function Out32(PortAdr: word; Data: byte): byte;
stdcall;
external 'inpout32.dll';
Ok. Теперь создадим обработчики на нажатие кнопок. Для этого дважды щелкаем на кнопке в редакторе формы. Нас автоматом переносит к коду функции-обработчика. Рассмотрим сначала функцию для записи данных в порт. Тут особенно сложно ни чего нет. В переменные Port и Data, помещаем данные из соответствующих окошек ввода предварительно преобразовав их из текста в целое число. Затем вызываем функцию Out32()с этими параметрами.
procedure TForm1.Button1Click(Sender: TObject);
var
Port: word;
Data: Byte;
begin
Data:= StrToInt(Edit1.Text);
Port:= StrToInt(Edit2.Text);
Out32(Port, Data);
end;
Аналогично делаем для кнопки для чтения данных. Из нужного edit-окошка считываем введенное там значение адреса порта откуда будет проводится чтение, преобразуем его в число. Вызываем функцию Inp32() с этим параметром. Затем выводим окно сообщения с результатом чтения.
procedure TForm1.Button2Click(Sender: TObject);
var
Port: word;
Data: Byte;
begin
Port:= StrToInt(Edit3.Text);
Data:= Inp32(Port);
MessageDlg('Value: '+ IntToStr(Data), mtInformation, [mbOK], 0);
end;
Компилируем, запускаем (можно одной кнопкой в виде зеленой стрелки на верхней панели). Протестируем приложение. Попробуем записать в регистр DATA LPT порта число 0. Для этого в качестве адреса указываем 888 (или $378, что одно и тоже), в качестве данных - 0. Нажимаем на соответствующую кнопку. Должно быть все Ok (наблюдаем это на LPT-тестере - заранее подготовленная схема, о которой рассказывалось в предыдущих уроках, см. рис ниже). Аналогично проводим чтение.

Готовая тестовая программка. Если вы еще не скачали архив, качайте. В папке Demo, лежит тренировочная программа, написанная мною, для более глубокого понимания, возможностей вышеописанного метода программирования, LPT порта.

Вывод: - мы научились использовать некоторые приемы и методы программирования LPT порта. В каждой статье я приводил ссылки на обучающие исходники программ, которые в итоге, являются заготовками к вашим будующим программам. Советую подробно разобраться в этих исходниках и использовать их в своих проектах.
Вверх | Главная