Начало работы с драйвером при помощи шаблона.
Обновлено 23.05.04 !
____________________________________

Минимум теории - максимум практики:
пишем в порт, читаем с портов, пишем логический индикатор и Pin клавиатуру.

Если Вы уже не новичок в программировании, Вам не составит труда разобраться как работать с драйвером LPTWDMIO прочитав соответствующее “Драйвер FAQ.html” в каталоге шаблона. Однако готовый шаблон является самым быстрым и оптимальным средством разработки приложений на основе драйвера LPTWDMIO с дополнительным набором функций Pin , существенно облегчающих и ускоряющих работу с этим прекрасным компонентом. Но, всё же, для начала заглянем в и FAQ самого драйвера, определив тот минимум, который необходимо знать, чтобы начать плодотворно (я надеюсь на это) работать. И так, смотрим FAQ:

***************************************************************************

В модуле LPTIO.pas определены следующие константы:

{ Номера портов LPT }

LPT1 : byte = $10; // база $3BC

LPT2 : byte = $20; // $378

LPT3 : byte = $30; // $278

{ Смещения регистров порта }

LPT_DATA_REG : byte = 0; // Регистр данных

LPT_STATE_REG : byte = 1; // Регистр состояния

LPT_CONTROL_REG : byte = 2; // Регистр управления

LPT_EPP_ADDRESS : byte = 3; // Регистр адреса EPP

LPT_EPP_DATA : byte = 4; // Регистр данных EPP

Например, логический номер регистра управления порта LPT2:

(LPT2 or LPT_CONTOL_REG)

при этом обращение будет выполняться по адресу $378+2 = $37A.

 

Нумерация отдельных бит регистров

Побитная раскладка регистров порта LPT определена в виде двух наборов констант -- для регистров управления и для регистров состояния:

{ Битовые расклады регистров / разъём 25 pin / разъём Centronic }

{ Битовый расклад регистра УПРАВЛЕНИЯ }

STROBE : byte = $01; { Строб, 1 /1 }

AUTOFEED : byte = $02; { Автопротяжка, 14/14 }

INIT : byte = $04; { Инициализация, 16/31 }

SELECTIN : byte = $08; { Выбор принтера, 17/36 }

IRQE : byte = $10; { Прерывание, ------ }

DIRECTION : byte = $20; { Направление ШД, ------ }

 

{ Битовый расклад регистра СОСТОЯНИЯ }

IRQS : byte = $04; { Флаг прерывания,------ }

ERROR : byte = $08; { Признак ошибки, 15/32 }

SELECT : byte = $10; { Признак выбора, 13/13 }

PAPEREND : byte = $20; { Конец бумаги, 12/12 }

ACK : byte = $40; { Готовность к приёму данных, 10/10}

BUSY : byte = $80; { Занятость, 11/11 }

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

Например, вот так можно установить бит INIT в регистре управления порта LPT1:

 Lpt.WritePort(LPT1,LPT_CONTROL_REG, (INIT or Lpt.ReadPort(LPT1,LPT_CONTROL_REG)) )

***************************************************************************

Если Вам всё понятно – это хорошо, если же нет – ничего страшного, как раз для этого и разработан проект “XpCoding” и программа XP LPT ,благодаря которому Вы сможете создавать работающие программы даже методом “ скопировал - вставил ”. По сути, от Вас требуется только понимать что именно и куда надо встраивать. Могу Вас уверить, что проще, быстрее и практичней Вы уже не найдёте. Так что не выключайте компьютер в панике дёргая за сетевой шнур после просмотра “Драйвер FAQ.html” испугавшись нагромаждения всяческих кодов, потому что глаза боятся, а руки делают (:-.

Начнём с самого популярного народного метода: метода научного встраивания. Для начала сделайте себе несколько запасных копий шаблонов (папок), чтобы не жалко было портить (:- . Далее открываем каталог шаблона и запускаем файл проекта - Project1.dpr. Что мы видим было показано в шаге1. Сейчас же, не размениваясь по мелочам, сразу нажимаем кнопку компиляции – F9 . После компиляции запускается программа и определяет LPT порт или несколько портов, заполнив ими список в ComboBox1 . И так, порты отловлены (внимание: сакраментальная фраза, потому что в конце курса всей этой обучалки Вам придётся гордо сказать – “И так, баги отловлены !” и по-американски положив ноги на компьютерный столик почивать на лаврах). Далее закройте EXEшник и вернитесь в Делфи. Теперь всё готово для написания Вашей Windows 9x/2000/XP программы, жаль только я не могу Вам порекомендовать откинуться на спинку стула как кампания “Майкрософт” при установки Windows.

Традиционно устанавливаем на форму кнопки и экспериментируем с записью в порт:

------------------------------------------------------------------------------------------------

 

Щёлкаем по кнопке Button1:

procedure TForm1.Button1Click(Sender: TObject);

begin

{записуем число 10 ($A) в базовый порт, регистр данных - 0 }

Lpt.WritePort (GetCurrentPort,0,$A);

end;

 

Щёлкаем по кнопке Button2:

procedure TForm1.Button2Click(Sender: TObject);

begin

{записуем число 8 ($8) в базовый порт, регистры контроля - 2, в результате на 0 и 1 бите повятся единицы – смотрите в XP LPT }

Lpt.WritePort (GetCurrentPort,2,$8);

end;

 

Щёлкаем по кнопке Button3:

procedure TForm1.Button3Click(Sender: TObject);

begin

{записуем число 32 в базовый порт, регистр данных - 0 }

Lpt.WritePort (GetCurrentPort,0,32);

end;

------------------------------------------------------------------------------------------------

Как видите, всё это не сложнее чем в проекте PortCoding, только называется по другому. А теперь читаем с портов:

Для этого расположите на форме Edit1 и Edit2, таймер. Вставляем следующий код:

 

procedure TForm1.Timer1Timer(Sender: TObject);

Var

dat : byte; //--переменная хранит прочитанное число

begin

dat:= Lpt.ReadPort (GetCurrentPort,0); //--читаем базовый порт: регистры данных - 0

Edit1.Text := '$'+IntToHex(integer(dat),2); //-- выводим в HEX

Edit2.Text := IntToStr(dat); //-- выводим в числах

end;

 

В итоге отметим следующее:

 

LPT_DATA_REG : byte = 0; // Регистр данных

LPT_STATE_REG : byte = 1; // Регистр состояния

LPT_CONTROL_REG : byte = 2; // Регистр управления

 

Следовательно код: Lpt.WritePort (GetCurrentPort,0,32);

Будет тоже самое что и: Lpt.WritePort (GetCurrentPort, LPT_DATA_REG,32);

 

pr01.jpg

Cкачайте этот пример - primer_xp01.zip(30 kb)

 

А теперь самостоятельно напишем простой логический индикатор и pin клавиатуру:

 

pr02.jpg

Для этого возьмём Timer, четыре ToolBar и семнадцать CheckBox:

С помощью функций Pin это крайне просто - значения чекбоксов (boolean) - Checked становится false или true в зависимости от аналогичного состояния значения Pin , т.е. если 5вольт - true иначе - false;

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

CheckBox1.Checked := Pin2; //--если Pin2 = true тогда будет галочка

CheckBox2.Checked := Pin3; //----аналогично----

CheckBox3.Checked := Pin4;

CheckBox4.Checked := Pin5;

CheckBox5.Checked := Pin6;

CheckBox6.Checked := Pin7;

CheckBox7.Checked := Pin8;

CheckBox8.Checked := Pin9;

 

CheckBox9.Checked := Pin1;

CheckBox10.Checked := Pin14;

CheckBox11.Checked := Pin16;

CheckBox12.Checked := Pin17;

CheckBox13.Checked := Pin11;

CheckBox14.Checked := Pin10;

CheckBox15.Checked := Pin12;

CheckBox16.Checked := Pin13;

CheckBox17.Checked := Pin15;

 

end;

 

Добавим на оставшейся тулбар семнадцать кнопок Pin клавиатуры:


Команды Pin клавиатуры встроены в шаблон!
Теперь без труда Вы можете установить/снять напряжение 5вольт
на соответствующей ножке (Pin) LPT разъёма очень простой командой!


Если у Вас старый шаблон, скачайте его снова - обновленный 23.05.04 !

{ ------------------- регистры данных ------------------------------ }

procedure TForm1.Button1Click(Sender: TObject);

begin

ButtonPin2; //-- ( Pin2)

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

ButtonPin3; //-- ( Pin3)

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

ButtonPin4; //-- (Аналогично)

end;

 

procedure TForm1.Button4Click(Sender: TObject);

begin

ButtonPin5;

end;

 

procedure TForm1.Button5Click(Sender: TObject);

begin

ButtonPin6;

end;

 

procedure TForm1.Button8Click(Sender: TObject);

begin

ButtonPin7;

end;

 

procedure TForm1.Button7Click(Sender: TObject);

begin

ButtonPin8;

end;

 

procedure TForm1.Button6Click(Sender: TObject);

begin

ButtonPin9;

end;

 

{ ------------------- регистры контроля ------------------------------ }

procedure TForm1.Button9Click(Sender: TObject);

begin

ButtonPin1;

end;

 

procedure TForm1.Button10Click(Sender: TObject);

begin

ButtonPin14;

end;

 

procedure TForm1.Button11Click(Sender: TObject);

begin

ButtonPin16;

end;

 

procedure TForm1.Button12Click(Sender: TObject);

begin

ButtonPin17;

end;

 

 


Cкачайте этот пример - primer_xp02.zip(30 kb)

Смотрите дальше: Шаг 3. Виртуальные приборы: программа LPT генератор 5 - 600 Гц



******




Валерий Ковтун US4LEH
http://valery-us4leh.narod.ru

О сайте

Вернуться на Шаг1. Шаблон для написания программ работы с LPT потами в Windows 9x/2000/XP

Вернуться на XP LPT

Вернуться на главную страницу
Программа PortControl V3+
Программа PinRegistrator D1+


Гостевая книга
Обратная связь

radionet
Hosted by uCoz