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

           ШАБЛОН ДЛЯ БЫСТРОГО ИЗГОТОВЛЕНИЯ ПРОГРАММ
     УПРАВЛЕНИЯ ВНЕШНИМИ УСТРОЙСТВАМИ ПОСРЕДСТВОМ LPT ПОРТОВ
       ВАШЕГО КОМПЬЮТЕРА В СРЕДЕ ОС WINDOWS 9x/NT/2000/XP


                  ОБНОВЛЕНО  23.08.04 !

Добавлен переключатель ВХОД / ВЫХОД регистра данных в режиме ЕРР .

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

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

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


 
                      ПРИМЕРЫ


{------------- Работа с режимом EPP ------------------------}


procedure TForm1.Button1Click(Sender: TObject);
begin
InOut;  //-- Переключает регистр данных в режим входов / выходов
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
CheckBox1.Checked := InMode; //-- если регистр данных в режиме входов - тогда галочка
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if InMode = false then InOut; //-- Переключает регистр данных в режим входов
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if InMode = true then InOut; //-- Переключает регистр данных в режим выходов
end;


//__________________________________________________________________________



    {------------- Работа с битами (Pin) ---------------}     


Если нужно одной кнопкой установить / снять напряжение пять вольт лог.1 
к примеру на второй ножке LPT разъёма - Pin2 используем следующую команду: 

procedureButton1Click(Sender: TObject); 
begin 
ButtonPin2; 
end; 


Если нужно установить только логическую 1 = 5в Pin2 , тогда используйте: 
procedureButton1Click(Sender: TObject); 

begin 
if Pin2 = false then ButtonPin2; 
end; 


Если нужно установить только логический ноль (снять 5в) Pin2 , тогда используйте: 

procedureButton1Click(Sender: TObject); 
begin 
if Pin2 = true then ButtonPin2; 
end; 



                       Пишем Pin клавиатуру 


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


procedure TForm1.Button1Click(Sender: TObject);
 begin
 ButtonPin2;  //--  ( Pin2) -- Устанавливает / снимает 5вольт на 2 ножке LPT разъёма
 end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 ButtonPin3; //--  ( Pin3) -- Устанавливае / снимает 5вольт на 3 ножке LPT разъёма
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;

//________________________________________________________________________





                    ПРИМЕРЫ ЗАПИСИ В ПОРТ 



procedure TForm1.Button1Click(Sender: TObject);

begin

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

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

end;

 



procedure TForm1.Button2Click(Sender: TObject);

begin

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

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

end;

 



procedure TForm1.Button3Click(Sender: TObject);

begin

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

Lpt.WritePort (GetCurrentPort,0,32);

end;

//_________________________________________________________


  
                      ЧИТАЕМ ПОРТ

Для этого расположите на форме 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);

 
                 ********


 Информация с сайта  http://valery-us4leh.narod.ru



