Параллельный порт называется параллельным портом.
1. Читать и писать параллельно
В языке сборки параллельный порт может работать с инструкциями в области входа и выхода, но в Delphi нет соответствующих функций и методов для чтения и написания параллельного порта. Инструкции по сборке в и выходе это может легко читать и писать параллельные порты. Мы также можем получить доступ к параллельному порту, вызывая функции API Windows или DLL и VXD, предоставляемые третьими лицами, но он более удобен и быстро читать и записать параллельный порт с использованием встроенных методов сборки.
Используйте следующую функцию Readport и процедуру writeport для чтения и записи параллельных портов, а порт параметров является адресом порта для работы.
Функция Readport (порт: Word): Byte;
вар
Б: Байт;
Начинать
Асм
MOV DX, порт;
В AL, DX;
MOV B, AL;
КОНЕЦ;
Результаты: = B;
конец;
Процедура writeport (порт: слово; conbyte: byte);
Начинать
Асм
MOV DX, порт;
Mov Al, Conbyte;
Out DX, AL;
КОНЕЦ;
конец;
Чтобы контролировать параллельный порт в бить, вы можете сначала прочитать данные параллельного порта, а затем снова выполнить операции битов, а затем снова написать в параллельный порт, чтобы можно было достичь управления битом параллельного порта.
Логический оператор и выполняет бить логику и операцию на двух числах, которые будут выполнены: то есть результат 1 и 1 составляет 1, а остальные 0 и 1, 1 и 0 и 0. Результаты 0 - все 0 Полем
Логический оператор или выполняет битовую логическую или операцию на двух числах, которые должны быть управляемые: то есть, если два бита «или» являются единицей, результат составляет 1;
Используйте и оператор, чтобы указать позицию 0. Например, двоичный файл шестнадцатеричного 84H: 10000100, а его третий бит - 1. Чтобы установить третью позицию на 0, а другие биты остаются неизменными, вы можете использовать: 84 и $ fb = 80 долларов, двоичная стоимость 80H составляет 10000000.
Используйте оператор OR, чтобы указать позицию 1, например: второй бит шестнадцатеричного 84H составляет 0. Чтобы установить второй бит на 1, а другие биты остаются неизменными, вы можете использовать: 84 долл. США или 02 долл. 10000110.
пример:
1. Установите потенциал D2 -бит порта данных 378H на низкий, то есть установлен 0:
B: = ReadPort ($ 378);
B: = B и $ fb;
Writeport ($ 378, б);
2. Установите потенциал D2 -бит порта данных 378H до высокого уровня, то есть установлен 1:
B: = ReadPort ($ 378);
B: = b или $ 04;
Writeport ($ 378, б);
3. Определите потенциал D2 -бит порта данных 378H:
B: = ReadPort ($ 378);
if ((b и $ 04) = 04 $), тогда
// код, когда потенциал высок
еще
// код, когда потенциал низкий
или:
B: = ReadPort ($ 378);
if (((b или $ fb) = $ ff) тогда
// код, когда потенциал высок
еще
// код, когда потенциал низкий
3. Конкретная реализация
Следующим примером является потенциальная высота каждого бита порта данных 378H, который управляет параллельным портом. 8 битов порта данных: D0 ~ D7 соответствует контактам 2 ~ 9 параллельного интерфейса.
Сначала запустите Delphi, создайте новый проект и нажмите F12, чтобы добавить код портов чтения и записи в единицу 1 Form1:
Функция Readport (порт: Word): Byte;
Процедура writeport (порт: слово; conbyte: byte);
Функция Readport (порт: Word): Byte;
вар
Б: Байт;
Начинать
Асм
MOV DX, порт;
В AL, DX;
MOV B, AL;
КОНЕЦ;
Результаты: = B;
конец;
Процедура writeport (порт: слово; conbyte: byte);
Начинать
Асм
MOV DX, порт;
Mov Al, Conbyte;
Out DX, AL;
КОНЕЦ;
конец;
Добавьте 8 компонентов флажки, измените их свойства заголовка на D0 на D7 соответственно и расположите их направо налево.
Дважды щелкните Checkbox1 и добавьте следующий программный код в событие OnClick компонента CheckBox1:
Процедура tform1.checkbox1click (отправитель: tobject);
вар
Б: Байт;
Начинать
b: = 0;
Если Fackbox1. Провернул, тогда
b: = b или $ 01;
Если Fackbox2. Провернул, тогда
b: = b или $ 02;
Если CHACKBOX3. Провернул, тогда
b: = b или $ 04;
Если Fackbox4. Провернул, тогда
b: = b или $ 08;
Если Fackbox5. Провернул, тогда
B: = B или 10 долларов США;
Если Fackbox6. Провернул, тогда
B: = B или 20 долларов;
Если Fackbox7. Провернул, тогда
B: = B или 40 долларов;
Если Fackbox8. Провернул, тогда
b: = b или 80 долларов;
Writeport ($ 378, b);
конец;
После того, как вход будет завершен, установите событие OnClick Checkbox2 на Checkbox8, 7 компонентов флажки, на событие CheckBox1 OnClick Checkbox1: Checkbox1Click.
В настоящее время, компиляция и запустить программу, вы можете нажать эти 8 флажок, чтобы управлять потенциалом каждого бита порта данных LPT1.
Затем добавляется функция мониторинга состояния порта данных параллельного порта.
Добавьте компонент таймера в Form1: Timer1, измените его включенное свойство, чтобы до 1 до 1.
Добавлено к событию Ontimer в Timer1:
Процедура tform1.timer1timer (отправитель: tobject);
вар
Б: Байт;
Начинать
B: = Readport ($ 378);
CHACEBOX1. Провернут: = ((B или $ fe) = $ ff);
Fackbox2.cecked: = ((B или $ fd) = $ ff);
Facebox3.CHECKED: = ((B или $ fb) = $ ff);
CHACEBOX4. Провернут: = ((B или $ f7) = $ ff);
Facebox5.Checked: = ((B или $ ef) = $ ff);
Facebox6. Провернут: = ((B или $ df) = $ ff);
Facebox7. Провернут: = ((B или $ bf) = $ ff);
Checkbox8. Провернут: = ((B или $ 7f) = $ ff);
конец;
Добавьте компонент флажона, а модифицированное свойство подписи - «Параллельный порт монитора», и добавьте его в свое событие OnClick:
Процедура tform1.checkbox9click (отправитель: tobject);
Начинать
Timer1.enabled: = fackbox9.checked;
конец;
Скомпилируйте и запустите программу, нажмите «Параллельный порт монитора», и вы можете отслеживать состояние порта данных Parallel Port LPT1 378H и изменить его статус в режиме реального времени.
Чтобы облегчить просмотр и проверку состояния порта данных 378H, я сделал небольшую тестовую схему параллельного порта, в которой используется интерфейс печати, 8 светодиодов (излучающие световые диоды) и 8 1K резисторов. :
После того, как схема будет завершена, установите его на параллельный порт компьютера и запустите письменную программу, чтобы легко просмотреть потенциал каждого бита порта данных 378H.
Наконец, давайте проведем еще один эксперимент с возобновляемым фонарем.
Сначала объявьте глобальную переменную TB: добавьте «TB: Byte» ниже "Form1: tform1":
вар
Форма1: tform1;
ТБ: байт;
Затем добавьте таймер и флажок в Form1, измените свой свойство Timer2 на false, измените свойство интервала на 300, дважды щелкните Timer2 и добавьте его в событие Ontimer:
Процедура tform1.timer2timer (отправитель: tobject);
вар
Б: Байт;
Начинать
Если tb = 0, то
TB: = 1
еще
TB: = TB * 2;
Writeport ($ 378, TB);
B: = ReadPort ($ 378);
CHACEBOX1. Провернут: = ((B или $ fe) = $ ff);
Fackbox2.cecked: = ((B или $ fd) = $ ff);
Facebox3.CHECKED: = ((B или $ fb) = $ ff);
CHACEBOX4. Провернут: = ((B или $ f7) = $ ff);
Facebox5.Checked: = ((B или $ ef) = $ ff);
Facebox6. Провернут: = ((B или $ df) = $ ff);
Facebox7. Провернут: = ((B или $ bf) = $ ff);
Checkbox8. Провернут: = ((B или $ 7f) = $ ff);
конец;
Измените свойство подписи Checkbox10 на «Возобновляющий демонстрацию света», затем дважды щелкните Checkbox10 и добавьте его в его событие OnClick:
Процедура tform1.checkbox10click (отправитель: tobject);
Начинать
Timer2.enabled: = facebox10.cecked;
конец;
Скомпилируйте и запустите программу.
Нажмите на «Возобновляемая демонстрация фонаря», видели ли вы эффект «вращающегося фонаря»? Изменив интервал Timer2, вы можете регулировать скорость.
Примечание. Приведенный выше метод встроенного сборочного доступа к параллельным портам может использоваться только под Win9x.
Вышеуказанная программа была проверена и передана в рамках Win98+Delphi6.0