Le port parallèle est appelé port parallèle.
1. Lire et écrire parallèle
Dans le langage d'assemblage, le port parallèle peut être utilisé avec les instructions INT et Out, mais il n'y a pas de fonctions et de méthodes correspondantes dans Delphi pour lire et écrire le port parallèle. Instructions d'assemblage dans et hors Il peut facilement lire et écrire des ports parallèles. Nous pouvons également accéder au port parallèle en appelant les fonctions API Windows ou les DLL et les VXDS fournis par des tiers, mais il est plus pratique et rapide à lire et à écrire le port parallèle en utilisant des méthodes d'assemblage intégrées.
Utilisez la fonction ReadPort suivante et la procédure d'écriture pour lire et écrire des ports parallèles, et le port de paramètre est l'adresse du port à utiliser.
Fonction ReadPort (port: mot): octet;
var
B: octet;
Commencer
ASM
MOV DX, port;
Dans Al, dx;
MOV B, AL;
FIN;
Résultats: = b;
fin;
Procédure écriteport (port: mot; conbyte: octet);
Commencer
ASM
MOV DX, port;
Mov al, Conbyte;
OUT DX, AL;
FIN;
fin;
Pour contrôler le port parallèle en termes de bit, vous pouvez d'abord lire les données du port parallèle, puis effectuer des opérations de bits, puis écrire à nouveau sur le port parallèle, afin que le contrôle de bit du port parallèle puisse être obtenu.
L'opérateur logique et effectue une logique et un fonctionnement bit .
L'opérateur logique ou effectue un fonctionnement à la bit
Utilisez l'opérateur et pour spécifier la position 0. Par exemple, le binaire de l'hexadécimal 84H est: 10000100, et son troisième bit est 1 pour définir la troisième position sur 0 et d'autres bits restent inchangés, vous pouvez utiliser: 84 $ et $ fb = 80 $, la valeur binaire de 80h est de 10000000.
Utilisez l'opérateur OR pour spécifier une position 1, par exemple: le deuxième bit d'hexadécimal 84H est 0. Pour définir le deuxième bit sur 1 et d'autres bits restent inchangés, vous pouvez utiliser: 84 $ ou 02 $ = 86 $, 86h La valeur binaire est 10000110.
exemple:
1. Définissez le potentiel des bits D2 du port de données 378H à bas, c'est-à-dire l'ensemble 0:
B: = readPort (378 $);
B: = b et $ fb;
WritePort (378 $, b);
2. Définissez le potentiel de D2 Bits de Port de données 378H, c'est-à-dire l'ensemble 1:
B: = readPort (378 $);
B: = b ou 04 $;
WritePort (378 $, b);
3. Déterminez le potentiel des bits D2 du port de données 378H:
B: = readPort (378 $);
si ((b et 04 $) = 04 $) alors
// code lorsque le potentiel est élevé
autre
// code lorsque le potentiel est faible
ou:
B: = readPort (378 $);
si ((b ou $ fb) = $ ff) alors
// code lorsque le potentiel est élevé
autre
// code lorsque le potentiel est faible
3. Implémentation spécifique
L'exemple suivant est la hauteur potentielle de chaque bit du port de données 378H qui contrôle le port parallèle. Les 8 bits du port de données: D0 ~ D7 correspondent aux broches 2 ~ 9 de l'interface parallèle.
Exécutez d'abord Delphi, créez un nouveau projet et cliquez sur F12 pour ajouter le code de lecture et d'écrire des ports à Unit1 de Form1:
Fonction ReadPort (port: mot): octet;
Procédure écriteport (port: mot; conbyte: octet);
Fonction ReadPort (port: mot): octet;
var
B: octet;
Commencer
ASM
MOV DX, port;
Dans Al, dx;
MOV B, AL;
FIN;
Résultats: = b;
fin;
Procédure écriteport (port: mot; conbyte: octet);
Commencer
ASM
MOV DX, port;
Mov al, Conbyte;
OUT DX, AL;
FIN;
fin;
Ajoutez 8 composants à cocher, modifiez respectivement leurs propriétés de légende à D0 à D7 et organisez-les à droite à gauche.
Double-cliquez sur Checkbox1 et ajoutez le code de programme suivant à l'événement OnClick du composant Checkbox1:
Procédure TForm1.CheckBox1Click (expéditeur: tobject);
var
B: octet;
Commencer
b: = 0;
Si Checkbox1. est venu alors
b: = b ou 01 $;
Si Checkbox2.Cherad a alors
b: = b ou 02 $;
Si Checkbox3.Ched a alors
b: = b ou 04 $;
Si Checkbox4. a coché alors
b: = b ou 08 $;
Si Checkbox5. a coché alors
b: = b ou 10 $;
Si Checkbox6. a coché alors
b: = b ou 20 $;
Si Checkbox7. a coché alors
b: = b ou 40 $;
Si Checkbox8. a coché alors
b: = b ou 80 $;
WritePort (378 $, b);
fin;
Une fois l'entrée terminée, définissez l'événement OnClick de CheckBox2 sur CheckBox8, les composants de la boîte à cocher 7, vers l'événement onClick de Checkbox1: CheckBox1Click.
À l'heure actuelle, compiler et exécuter le programme, vous pouvez cliquer sur ces 8 cases à cocher pour contrôler le potentiel de chaque bit du port de données LPT1.
Ensuite, la fonction de surveillance de l'état du port de données du port parallèle est ajoutée.
Ajoutez un composant temporaire dans Form1: TIMER1, modifiez sa propriété activée à la propriété False et Interval à 1.
Ajouté à l'événement Ontimer dans TIMER1:
Procédure TForm1.Timer1Timer (expéditeur: TOBject);
var
B: octet;
Commencer
B: = ReadPort (378 $);
Checkbox1.Checked: = ((b ou $ fe) = $ ff);
Checkbox2.checked: = ((b ou $ fd) = $ ff);
Checkbox3.checked: = ((b ou $ fb) = $ ff);
Checkbox4.Checked: = ((b ou $ f7) = $ ff);
Checkbox5.Checked: = ((b ou $ ef) = $ ff);
Checkbox6.Checked: = ((b ou $ df) = $ ff);
Checkbox7.Checked: = ((b ou $ bf) = $ ff);
Checkbox8.Checked: = ((b ou 7f) = $ ff);
fin;
Ajoutez un composant à cocher et la propriété de légende modifiée est "Monitor Parallel Port" et ajoutez-le à son événement OnClick:
Procédure TForm1.CheckBox9Click (expéditeur: tobject);
Commencer
TIMER1.Enabled: = CheckBox9.Checked;
fin;
Compilez et exécutez le programme, cliquez sur "Monitor Parallel Port" et vous pouvez surveiller l'état du port de données LPT1 parallèle 378H et modifier son statut en temps réel.
Afin de faciliter la visualisation et la vérification de l'état du port de données 378h, j'ai fait un petit circuit de test de port parallèle, qui utilise une interface d'impression, 8 LED (diodes d'émission de lumière) et 8 résistances 1K. :
Une fois le schéma de circuit terminé, installez-le sur le port parallèle de l'ordinateur et exécutez le programme écrit pour afficher facilement le potentiel de chaque bit du port de données 378H.
Enfin, faisons une autre expérience de lanterne tournante.
Déclarez d'abord une variable globale TB: Ajouter "TB: Byte" ci-dessous "Form1: TFORM1":
var
FORM1: TFORM1;
TB: octet;
Ensuite, ajoutez une minuterie et une case à cocher dans Form1, modifiez la propriété activée de TIMER2 à FAUX, modifiez la propriété d'intervalle à 300, double-cliquez sur TIMER2 et ajoutez-le à son événement OnTimer:
Procédure TForm1.Timer2Timer (expéditeur: tobject);
var
B: octet;
Commencer
Si TB = 0 alors
TB: = 1
autre
TB: = TB * 2;
WritePort (378 $, TB);
B: = readPort (378 $);
Checkbox1.Checked: = ((b ou $ fe) = $ ff);
Checkbox2.checked: = ((b ou $ fd) = $ ff);
Checkbox3.checked: = ((b ou $ fb) = $ ff);
Checkbox4.Checked: = ((b ou $ f7) = $ ff);
Checkbox5.Checked: = ((b ou $ ef) = $ ff);
Checkbox6.Checked: = ((b ou $ df) = $ ff);
Checkbox7.Checked: = ((b ou $ bf) = $ ff);
Checkbox8.Checked: = ((b ou 7f) = $ ff);
fin;
Modifiez la propriété de légende de Checkbox10 sur "Demo léger tournant", puis double-cliquez sur Cochebox10, et ajoutez-le à son événement OnClick:
Procédure TForm1.CheckBox10Click (expéditeur: tobject);
Commencer
TIMER2.Enabled: = CheckBox10.Checked;
fin;
Compiler et exécuter le programme.
Cliquez sur "Démonstration de lanternes tournante", avez-vous vu l'effet de "Roupolving Lantern"? En modifiant l'intervalle de Timer2, vous pouvez ajuster la vitesse.
Remarque: La méthode ci-dessus d'incorporer l'accès à l'assemblage aux ports parallèles ne peut être utilisée que sous Win9x.
Le programme ci-dessus a été testé et passé sous Win98 + Delphi6.0