Вы сейчас на:  Главная страница - Управляем LPT из среды Delphi
Программирование
 Определение адреса LPT - Порта
 Управление LPT портом из Delphi 7
 Регистр данных LPT порта Delphi 7
 Интернет с 3g модема на роутер

Прошивки
 Прошивка Wi-Fi точки DWL 2100
 Программа для модема ZTE MF100
 Прошивка модема ZTE MF 626
 Программа для прошивки китайских телефонов
 Драйверы на Acer Aspire

ОC и утилиты
 Установка Windows XP c флешки
 Загрузка с флешки XP Live USB
 Загрузка Windows PE Mini CD
 Создание флешки с MS DOS

Онлайн самоучители
 Самоучитель по Visual Basic 6 0
 Самоучитель по php
 Самоучитель по JavaScript
 Kylix 3 - Delphi 7 для Linux

Игры
 Сервер World of WarCraft 2.4.3
 Cкачать World of WarCraft 2.4.3
 Анлокер для Warhammer 40K
 Counter Strike 1.6 install

Программы для Windows
 Антивирусы
 Архиваторы
 Графика
 Для Мобильного
 Интернет и сеть
 Мультимедиа
 Переводчики
 Система

Радиотехника
 Усилитель на микросхеме PAL007
 Цветовая маркировка резисторов
 Устройство для управление электроприборами с ПК
 Программа для черчения электрических схем
 Программа для создания печатных плат

Графика
 Визитки для парикмахеров
   Визитки для парикмахеров [2]
   Визитки для парикмахеров [3]
   Визитки для парикмахеров [4]
 Визитки для маникюра
   Визитки для маникюра [2]
   Визитки для маникюра [3]

LPT порт в Delphi 7

Добро пожаловать!

Как управлять 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_PIN
Рисунок 1


  • LPT порт имеет 8 двунаправленных цепей (с 2-го по 9-й пин), с адресом $378(888 - в десятиричной системе счисления)
  • 5 однонаправленных цепей предназначиных только для ввода (с 10-го по 13-й и 15 пины). Адрес порта $379(889 - в десятиричной с. с.)
  • 4 однонаправленных цепи предназначенных только для вывода(1, 14, 16 и 17-й пины) с адресом 37А(890), все, кроме 16-го из которых инверсные см. Рисунок 2.

    port
    Рисунок 2

    Немного теории.
    Программно в цепях (на пинах) LPT порта можно устанавливать логический ноль (что сооттветствует отсутствию напряжения в цепи) и логическую единицу (что соответствует + 5 вольтам) в нужной нам цепи, т. е. на нужном нам пине(пинах)

    Самый простой (короткий) способ написания процедуры, которая будет устанавливать к примеру 2-й пин (порта 888) в состояние логической единицы выглядит вот так:

    Out32(888, 1);

    где 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мс отправляется в порт.



    А вот и форма приложения

    lpt rider

    Рисунок 3

    Для управления портом 889 всё так же, кроме того, что нужно вместо 888 подставить 889 и учесть тот факт, что 3 из 4 цепей инвертируются, т. е. когда установим логический ноль, на выводе будет всё наоборот т. е. единица. И внимательно смотрим на Рисунок 2, а именно в колонку РАЗРЯДНОСТЬ.

    Для считывания состояния (значения) используется функция Inp32. В коде выглядит так: Inp32(888);

    Нужна библиотека Inpout32 - она ТУТ (11Kb)

    Исходный код и проект программы на Delphi? Он ТУТ (219Kb)


    Если нужна схема устройства для управления внешними электроприборами через LPT порт, то её можно посмотреть ТУТ


  • Другие сайты
     Серебряный пес
     Delphi World
     RepitoriX
     Изготовление наружной рекламы в г. Буденновске

    Изготовление наружной рекламы в г. Буденновске

    Обмен Webmoney




    Получить WMR-бонус Balans.kz на свой кошелек!


    Copyright LexCorp © 2010-2013