Робота з lpt портом з середовища delphi

Як управляти LPT портом з Delphi 7


Щоб працювати з LPT портом з середовища Delphi 7, нам знадобиться динамічна бібліотека inpout32.dll. яку потрібно буде скопіювати в папку з проектом.
Для того, щоб в проекті можна було працювати з даної бібліотекою, потрібно між Uses і Type оголосити 2 функції:

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';

type
TForm1 = class (TForm)

Примітка: дана бібліотека працює тільки в 32-розрядних версіях Windows.
Ось і все, тепер можна працювати з LPT, використовуючи динамічну бібліотеку.

На малюнку 1 зображена терморегулятори LPT порту.

Робота з lpt портом з середовища delphi

малюнок 2
Трохи теорії.
Програмно в ланцюгах (на пінах) LPT порту можна встановлювати логічний нуль (що сооттветствует відсутності напруги в ланцюзі) і логічну одиницю (що відповідає + 5 вольт) в потрібній нам ланцюга, т. Е. На потрібному нам піне (пінах)

Найпростіший (короткий) спосіб написання процедури, яка буде встановлювати наприклад 2-й пін (порту 888) в стан логічної одиниці виглядає ось так:

де 888 - це номер порту, а 1 - це дані розміром в 1 біт.

Процедура для кнопки буде виглядати так:

procedure TForm1.Button1Click (Sender: TObject);
begin
Out32 (888, 1);
end;

Встановити лог. одиницю відразу в декількох ланцюгах (на декількох пінах) одного порту, наприклад 888 можна наступним чином: замість 1 напишемо 3, в цьому випадку лог. одиниці будуть в ланцюзі (3 = 1 + 2) D0 і D1 (2-й і 3-й Піни). Щоб встановити лог. одиниці на всіх 8-й пінах, замість 1 потрібно підставити 255 т. к. 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255.

Найпростіше, на мою думку, реалізувати обробку даних в таймері, як я і зробив в своєму проекті, код якого ви бачите нижче.

8 змінних (d0-d7), оголошених глобально, забезпечують контроль над кожною ланцюгом порту. Далі в проекті просто змінюється значення змінних і сума цих змінних кожні 10мс відправляється в порт.

А ось і форма додатка

малюнок 3

Для управління портом 889 все так само, крім того, що потрібно замість 888 підставити 889 і врахувати той факт, що 3 з 4 ланцюгів інвертуються, т. Е. Коли встановимо логічний нуль, на виведенні буде все навпаки т. Е. Одиниця. І уважно дивимося на Малюнок 2, а саме в колонку розрядний.

Для зчитування стану (значення) використовується функція Inp32. У коді виглядає так: Inp32 (888);

Потрібна бібліотека Inpout32 - вона ТУТ (11Kb)

Вихідний код і проект програми на Delphi? Він ТУТ (219Kb)


Якщо потрібна схема пристрою для управління зовнішніми електроприладами через LPT порт, то її можна подивитися ТУТ

Схожі статті