Der parallele Port wird als paralleler Port bezeichnet.
1. Lesen und schreiben Sie parallel
In der Versammlung kann der parallele Port mit den Ein- und Ausgängen in Delphi nicht entsprechende Funktionen und Methoden zum Lesen und Schreiben des parallelen Anschlusses betrieben werden. Montage -Anweisungen ein- und außen können problemlos parallele Ports lesen und schreiben. Wir können auch auf den parallelen Port zugreifen, indem wir Windows -API -Funktionen oder DLLs und VXDs, die von Dritten bereitgestellt werden, aufrufen. Es ist jedoch bequemer und schneller das Lesen und Schreiben des parallelen Ports mithilfe eingebetteter Montagemethoden.
Verwenden Sie die folgende Readport -Funktion und die Writeport -Prozedur, um parallele Ports zu lesen und zu schreiben. Der Parameterport ist die Portadresse für den Betrieb.
Funktion Readport (Port: Wort): Byte;
var
B: Byte;
Beginnen
Asm
MOV DX, Port;
In Al, DX;
Mov b, al;
ENDE;
Ergebnisse: = B;
Ende;
PROCEDURE Writeport (Port: Word; Conbyte: Byte);
Beginnen
Asm
MOV DX, Port;
Mov al, conbyte;
Out dx, al;
ENDE;
Ende;
Um den parallelen Port bitgewiehen zu steuern, können Sie zuerst die Daten des parallelen Ports lesen und Bitoperationen ausführen und dann erneut an den parallelen Port schreiben, damit die Bitkontrolle des parallelen Ports erreicht werden kann.
Der logische Operator und führt bitweise Logik und Betrieb auf zwei zu bedienenden Zahlen aus: Das Ergebnis von 1 und 1 beträgt 1 und die anderen 0 und 1, 1 und 0 und 0. Die Ergebnisse von 0 sind alle 0 .
Der logische Operator oder bitweise logische oder operation auf zwei Zahlen ausführt, um zu bedienen: Das Ergebnis ist das Ergebnis, sofern die beiden Bits von "oder" eins sind. Andernfalls ist das Ergebnis von "oder" 0.
Verwenden Sie den und den Operator, um die Position 0 anzugeben. Zum Beispiel beträgt die Binärdatei von Hexadezimal 84H: 10000100 und sein drittes Bit beträgt 1. Um die dritte Position auf 0 zu setzen, und andere Bits bleiben unverändert. = 80 $, der Binärwert von 80h beträgt 10000000.
Verwenden Sie den ODER -Operator, um eine Position 1 anzugeben, zum Beispiel: Das zweite Bit von Hexadezimal 84H beträgt 0. Um das zweite Bit auf 1 und andere Bits unverändert zu setzen 10000110.
Beispiel:
1. Setzen Sie das Potenzial von D2 -Bits des Datenports 378H auf niedrig, dh gesetzt 0:
B: = Readport ($ 378);
B: = B und $ fb;
Writeport ($ 378, b);
2. Setzen Sie das Potenzial von D2 -Bits des Datenports 378H auf Hoch, dh gesetzt 1:
B: = Readport ($ 378);
B: = B oder $ 04;
Writeport ($ 378, b);
3. Bestimmen Sie das Potenzial von D2 -Bits des Datenports 378H:
B: = Readport ($ 378);
if ((b und $ 04) = $ 04) dann
// Code, wenn das Potenzial hoch ist
anders
// Code, wenn das Potential niedrig ist
oder:
B: = Readport ($ 378);
if ((b oder $ fb) = $ ff) dann
// Code, wenn das Potenzial hoch ist
anders
// Code, wenn das Potential niedrig ist
A. Spezifische Implementierung
Das folgende Beispiel ist die potenzielle Höhe jedes Bits des Datenports 378H, der den parallelen Anschluss steuert. Die 8 -Bits des Datenports: D0 ~ D7 entsprechen den Anweisungen auf anderen Stiften der parallelen Schnittstelle.
Führen Sie zuerst Delphi aus, erstellen Sie ein neues Projekt und klicken Sie auf F12, um den Code von Lese- und Schreiben von Ports zu Unit1 von Form1 hinzuzufügen:
Funktion Readport (Port: Wort): Byte;
PROCEDURE Writeport (Port: Word; Conbyte: Byte);
Funktion Readport (Port: Wort): Byte;
var
B: Byte;
Beginnen
Asm
MOV DX, Port;
In Al, DX;
Mov b, al;
ENDE;
Ergebnisse: = B;
Ende;
PROCEDURE Writeport (Port: Word; Conbyte: Byte);
Beginnen
Asm
MOV DX, Port;
Mov al, conbyte;
Out dx, al;
ENDE;
Ende;
Fügen Sie 8 Kontrollkästchen -Komponenten hinzu, ändern Sie ihre Bildunterschrifteneigenschaften auf D0 auf D7 und ordnen Sie sie von rechts nach links an.
Doppelklicken Sie auf das Kontrollkästchen 1 und fügen Sie den folgenden Programmcode zum Onclick-Ereignis der CheckBox1-Komponente hinzu:
procedure tform1.checkbox1click (Absender: tobject);
var
B: Byte;
Beginnen
B: = 0;
Wenn Checkbox1.Conted dann
B: = B oder $ 01;
Wenn pookbox2.Conted dann
B: = B oder $ 02;
Wenn Checkbox3.Conted dann
B: = B oder $ 04;
Wenn pookBox4.Conted dann
B: = B oder $ 08;
Wenn poybox5.Conted dann
B: = B oder $ 10;
Wenn CheckBox6.Conted dann
B: = B oder $ 20;
Wenn CheckBox7.Conted dann
B: = B oder $ 40;
Wenn CheckBox8.Conted dann
B: = B oder $ 80;
WritePort ($ 378, b);
Ende;
Setzen Sie nach Abschluss der Eingabe das Onclick -Ereignis von CheckBox2 auf das CheckBox8, die 7 Kontrollkästchen -Komponenten, auf das Onclick -Ereignis von CheckBox1: CheckBox1Click.
Zu diesem Zeitpunkt können Sie das Programm kompilieren und ausführen. Klicken Sie auf diese 8 Kontrollkästchen, um das Potenzial jedes Bits des LPT1 -Datenports zu steuern.
Als nächstes wird die Funktion zur Überwachung des Datenportstatus des parallelen Ports hinzugefügt.
Fügen Sie eine Timer -Komponente in Form1: Timer1 hinzu und ändern Sie seine aktivierte Eigenschaft in False und Intervalleigenschaft auf 1.
Hinzugefügt zum Ontimer -Ereignis in Timer1:
procedure tform1.timer1timer (Absender: tobject);
var
B: Byte;
Beginnen
B: = ReadPort ($ 378);
CheckBox1.Conted: = ((b oder $ fe) = $ ff);
CheckBox2.Checked: = ((b oder $ fd) = $ ff);
CheckBox3.Conted: = ((b oder $ fb) = $ ff);
CheckBox4.Conted: = ((b oder $ f7) = $ ff);
CheckBox5.Conted: = ((b oder $ EF) = $ ff);
CheckBox6.Conted: = ((b oder $ df) = $ ff);
CheckBox7.Conted: = ((b oder $ bf) = $ ff);
CheckBox8.Conted: = ((b oder $ 7f) = $ ff);
Ende;
Fügen Sie eine Checkbox -Komponente hinzu, und die modifizierte Bildunterschrifteneigenschaft ist "Parallelport überwachen" und fügen Sie sie zu seinem Onclick -Ereignis hinzu:
procedure tForm1.CheckBox9Click (Absender: Tobject);
Beginnen
Timer1.Enabled: = CheckBox9.Checked;
Ende;
Kompilieren Sie das Programm und führen Sie das Programm aus, klicken Sie auf "Überwachen Sie den parallelen Port überwachen", und Sie können den Status des parallelen Port LPT1 -Datenports 378H überwachen und seinen Status in Echtzeit ändern.
Um den Status des Datenanschlusses 378H zu erleichtern, habe ich einen kleinen Parallelanschluss -Testkreis erstellt, der eine Druckgrenzfläche, 8 LEDs (leichte Dioden) und 8 1K -Widerstände verwendet. :
Nach Abschluss des Schaltendiagramms installieren Sie es am parallelen Port des Computers und führen Sie das schriftliche Programm aus, um das Potenzial jedes Bits des Datenports 378H einfach anzuzeigen.
Lassen Sie uns schließlich ein weiteres revolvierendes Laternenexperiment durchführen.
Deklarieren Sie zuerst eine globale Variable TB: Hinzufügen von "TB: BYTE" unten "Form1: tform1":
var
Form1: tform1;
TB: Byte;
Fügen Sie dann ein Timer und ein Kontrollkästchen in Form1 hinzu, ändern Sie die aktivierte Eigenschaft von Timer2 in False, ändern Sie die Intervalleigenschaft auf 300, doppelklicken Sie mit Timer2 und fügen Sie es zu seinem Ontimer-Ereignis hinzu:
procedure tform1.timer2Timer (Absender: tobject);
var
B: Byte;
Beginnen
Wenn tb = 0 dann
TB: = 1
anders
TB: = TB * 2;
Writeport ($ 378, TB);
B: = Readport ($ 378);
CheckBox1.Conted: = ((b oder $ fe) = $ ff);
CheckBox2.Checked: = ((b oder $ fd) = $ ff);
CheckBox3.Conted: = ((b oder $ fb) = $ ff);
CheckBox4.Conted: = ((b oder $ f7) = $ ff);
CheckBox5.Conted: = ((b oder $ EF) = $ ff);
CheckBox6.Conted: = ((b oder $ df) = $ ff);
CheckBox7.Conted: = ((b oder $ bf) = $ ff);
CheckBox8.Conted: = ((b oder $ 7f) = $ ff);
Ende;
Ändern Sie die Bildunterschrifteneigenschaft von CheckBox10 in "revolving light Demo", doppelklicken Sie dann auf CheckBox10 und fügen Sie sie zu seinem Onclick-Ereignis hinzu:
procedure tform1.checkbox10click (Absender: tobject);
Beginnen
Timer2.Enabled: = CheckBox10.Conted;
Ende;
Kompilieren und führen Sie das Programm aus.
Klicken Sie auf "Drehende Laternendemonstration", haben Sie die Wirkung von "revolvierender Laterne" gesehen? Durch das Ändern des Intervalls von Timer2 können Sie die Geschwindigkeit anpassen.
Hinweis: Die obige Methode zum Einbetten der Assemblierung zu parallelen Ports kann nur unter Win9x verwendet werden.
Das obige Programm wurde getestet und unter Win98+DelPhi6.0 bestanden