NEW !23.08. 04 - Добавлен переключатель ВХОД / ВЫХОД регистра данных в режиме ЕРР .
Это полностью готовый шаблон - заготовка для Вашей будущей программы работы с LPT портами в ОС Windows 9x/2000/XP работающий с драйвером ввода - вывода LPTWDMIO.
На основе этого шаблона была создана демонстрационная программа
XP LPT , которую удобно использовать в качестве отладчика создаваемых Вами программ. Кроме того, Вы имеете возможность использовать код XP LPT и все реализованные в ней технические приёмы в своих разработках используя данный шаблон со встоенными функциями Pin. Шаблон содержит 17 функций, каждая из которых отслеживает логическое состояние своего Pin (Бита). Например, функция Pin2 возращает значение true если на второй ножке LPT разьёма (это pin N2)присутствует логическая единица = 5 вольт или
false если логический 0. Это позволяет очень быстро и просто создавать полнофункциональные программы не вникая в тонкости битовых операций и программирования вообще.
Все инверсные биты автоматически инвертируются функциями, поэтому Вы не можете допустить ошибки на этапе проектирования.
Допустим требуется отслеживать состояние датчика подключенного
к входному биту LPT порта. Окей, нет ничего проще:
Выбираем 11 pin - это один из пяти входных битов. По умолчанию, согласно стандарту, все входные биты имеют высокий уровень, поэтому датчик, срабатывая, переводит pin N11 в низкий
(логический ноль).
Запустите файл проекта Project1.dpr и увидите форму шаблона где установлен
только один элемент управления - ComboBox1 служащий переключателем установленных портов.
На форме расположена панель Panel1 на которой он и установлен.
Устанавливаем на форму (прямо на Panel1) еще одну панельPanel2 в качестве индикатора и таймер.
Для удобства проверки воспользуемся Pin N2 и программой XP LPT, для управления его логическим состоянием. Для датчика (это может быть резистор 300 - 600 Ом поключенный к 11 ножке и подключающийся на массу для перевода в 0) вставте в код, Pin11 .
Опрашивать датчик будем по таймеру:
procedure TForm1.Timer1Timer(Sender: TObject);
begin if Pin2 = false then Panel2.Color := clred else Panel2.Color := clgreen;
end;
Теперь когда датчик срабатывает - панель 2 красная, иначе - зеленая.
Если нужно одной кнопкой установить / снять напряжение пять вольт лог.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;
------------------------ Работа с режимом 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;
В принципе, Вы можете перевести любой двунаправленный (ЕРР) порт в режим входов (чтения)
записав в регистр контроля (бит 5) число 32 ($20)и перевести обратно в режим выходов (записи) сбросив всё, записав ноль ($0).
Например:
{записуем число 32 ($20) в базовый порт, регистры контроля - 2, в результате на 5 бите повится лог. единица – порт перейдет в режим чтения (на всех восьми битах Pin 2-9 регистра данных будут лог. единицицы = 5в - смотрите в XP LPT; перевести их в низкий уровень = лог. 0 можно присоединив на корпус и соотв. Pin (любой из 2-9)резистор 240 - 330 Ом )
procedure TForm1.Button2Click(Sender: TObject);
begin Lpt.WritePort (GetCurrentPort,2,$20);
end;