TRAVAUX PRATIQUES Le présent travail vise à développer une interface visuelle de programmation des entrées- sorties du port LPT d un PC à l aide du logiciel VISUAL BASIC. I- EDITION ET TEST DU PROGRAMME DE BASE I.1- Edition du programme de base I.1.1- code source Dim AdrDon, AdrCom, AdrEtat As Integer Private Declare Function Inp Lib "C:\prog\inpout32.DLL" Alias "Inp32" (ByVal PortAddress As Integer) As Integer Private Declare Sub Out Lib "C:\prog\inpout32.DLL" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer) Private Sub CmdEXE_Click() 'Procedure d'exécution AdrDon = &H378 '1)Adresse du registre de données du port LPT1 AdrCom = &H37A '2)Adresse du registre de commande AdrEtat = &H379 '3)dresse du registre d'état If OptDonnee.Value = True Then Out AdrDon, Val(txtDonnee.Text) '4)Ecriture de la donnée saisie IbIRESULTAT.Caption = Inp(AdrDon) '5)Lecture et affichage du registre de données ElseIf OptCommande.Value = True Then Out AdrCom, Val(txtCommande.Text) '6)Ecriture de la commande IbIRESULTAT.Caption = Inp(AdrCom) '7)Lecture et affichage du registre de commande ElseIf OptEtat.Value = True Then IbIRESULTAT.Caption = Inp(AdrEtat) '8)Lecture et affichage du registre d'état End If Private Sub CmdQUITTE_Click() End I.1.2- Ecran de l interface Visual Basic après l édition du code Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 1
I.2- Résultats d exécution Lorsque nous exécutons le programme ci-dessus, nous obtenons la page (Form) ci-dessous : Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 2
Quelques tests Test 1 : Transmission d une donnée LPT. Le test1 consiste à écrire transmettre la donnée 130 au registre de données du port Saisissons le nombre 130 dans la zone de texte ayant pour nom txtdonnee (c est la zone de texte la plus en haut), puis cliquons sur Transmettre une donnée (l OptionButton correspondant est optdonnee) et enfin, cliquons sur EXE. Ces différentes actions enclenchent l écriture du nombre saisi dans le registre de donnée du LPT, puis la lecture de ce registre et l affichage de la valeur lue dans la fenêtre résultat (c est le label IbIRESULTAT) comme illustré dans la capture ci-après : Test 2 : Lecture de l état Le test consiste à lire le registre d état du LPT. Pour cela cliquons lire l état puis sur EXE. Le contenu du registre d état s affiche dans la zone de texte Résultat. Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 3
La valeur du registre d état est donc 127. NB : il faut noter ici qu aucun périphérique n est connecté sur le port LPT ; On peut en faire de même pour la transmission d une commande. II- PROPOSITION DES AMELIORATIONS ET IMPLEMENTATION Dans le soucis de rendre ce logiciel plus professionnel, convivial et plus adapté, plusieurs améliorations ont été effectué à savoir : Le logiciel est bâti autour de plusieurs pages (Form), chacune de ces pages correspondant à une situation bien précise. Un convertisseur décimal-binaire et Binaire-décimal 8 bits ont été implémenté pour faciliter la tâche de l utilisateur et éviter les erreurs de commande qui peuvent s avérer fatales. une interface de visualisation à deux dimensions a été implémentée ; la première permet de visualiser les bits (binaires) de chacun des registres et la deuxième est une plate forme de type PROTEUS qui permet de voir l état des éléments (pour ce cas, nous avons choisis des leds) connectés sur le port LPT. Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 4
Un menu d aide a été implémenté. Ce menu contient la structure et le brochage du port LPT ainsi que les adresses des registres. Un nom a été donné au logiciel : LPT SOFTWARE Pour implémenter toutes ces améliorations, nous avons crée 11 Forms comme le montre la capture suivante a.1. capture a. Form 1 : Accueil C est la page d accueil de notre logiciel. Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 5
Comme vous le remarquez il ya un menu aide sur la page d accueil. Un clic droit sur ce menu affiche les rubriques du menu. Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 6
a.1. code source associé Private Sub Cmdentrer_Click() page1.show acceuil.hide Private Sub Cmdsortir_Click() End Private Sub menu_click(index As Integer) Select Case Index Case 1 aide1.show Case 2 aide2.show End Select b. Form 2: aide1 Un clic sur la rubrique structure et brochage du LPT du menu d aide affiche le Form (page) suivant : Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 7
c. Form3 : Aide2 Un click sur la rubrique registre du LPT affiche le Form (page) suivant : d. Form4 : Page1 d.1. capture Un clic sur le bouton entrer de la page d accueil affiche la page suivante (page1) : Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 8
En fonction de l opération à effectuer, on clic sur un des buttons présents sur cette page. d.2. code source associé Private Declare Function Inp Lib "C:\prog\inpout32.DLL" Alias "Inp32" (ByVal PortAddress As Integer) As Integer Dim AdrEtat As Integer Private Sub Cmdbindec_Click() bindec.show page1.hide Private Sub Cmdcom_Click() command.show page1.hide Private Sub Cmddecbin_Click() decbin.show page1.hide Private Sub Cmddon_Click() ecriture.show page1.hide Private Sub Cmdlire_Click() Dim montab(8) As Integer ' tableau qui contiendra les nbres binaires de l'état Dim i As Integer Dim a As Integer Dim etat As Integer Dim valeur As Integer AdrEtat = &H379 '2)Adresse du registre d'état etat = Inp(AdrEtat) 'lecture du registre d'état MsgBox " Lecture reussie ", 65600, " LPT SOFTWARE" valeur = etat a = 0 i = 3 Do While i < 8 'boucle de conversion decimal-binaire montab(i) = etat Mod 2 eta.bit(i).text = montab(i) 'affichage du bit calculé etat = etat \ 2 ' division entière i = i + 1 Loop eta.valeur.caption = valeur eta.show page1.hide Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 9
Private Sub Cmdretour_Click() acceuil.show page1.hide e.1. capture e. Form 5 : ecriture e.2. code source Private Declare Function Inp Lib "C:\prog\inpout32.DLL" Alias "Inp32" (ByVal PortAddress As Integer) As Integer Private Declare Sub Out Lib "C:\prog\inpout32.DLL" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer) Dim AdrDon As Integer Private Sub Cmdvalide_Click() Dim montab(8) As Integer ' tableau qui contiendra les nbres binaires du nombre à écrire Dim a As Integer Dim i As Integer Dim valeur As Integer AdrDon = &H378 '1)Adresse du registre de données du port LPT1 Out AdrDon, Val(txtnbre.Text) 'écriture sur dans le registre de données nbre = Inp(AdrDon) 'lecture du registre de donnée valeur = nbre a = 0 i = 0 Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 10
Do While i < 8 'boucle de conversion decimal-binaire montab(i) = nbre Mod 2 interface.bit(i).text = montab(i) 'affichage du bit calculé nbre = nbre \ 2 ' division entière i = i + 1 Loop For a = 0 To 7 ' boucle de commande des leds If montab(a) = 1 Then interface.led(a).fillcolor = vbred ' commande de la led Else interface.led(a).fillcolor = vbblack End If Next interface.valeur.caption = valeur MsgBox " transmission reussie", 65600, "LPT SOFTWARE" interface.show ecriture.hide f.1. capture f. Form 6 : interface Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 11
f.2. code source Option Explicit Public AdrDon, AdrCom, AdrEtat As Integer Public nbre As Integer Private Sub Cmdretour_Click() page1.show interface.hide g.1. Capture g. Form 7 : Command g.2. Code source Private Declare Function Inp Lib "C:\prog\inpout32.DLL" Alias "Inp32" (ByVal PortAddress As Integer) As Integer Private Declare Sub Out Lib "C:\prog\inpout32.DLL" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer) Dim AdrCom As Integer Private Sub Cmdvalide_Click() Dim montab(4) As Integer ' tableau qui contiendra les nbres binaires de la commande Dim i As Integer Dim commande As Integer Dim valeur As Integer Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 12
AdrCom = &H37A '2)Adresse du registre de commande Out AdrCom, val(txtnbre.text) 'écriture sur dans le registre de commande MsgBox " Transmission reussie ", 65600, " LPT SOFTWARE" commande = Inp(AdrCom) valeur = commande i = 0 Do While i < 4 'boucle de conversion decimal-binaire montab(i) = commande Mod 2 interfacecmd.bit(i).text = montab(i) 'affichage du bit calculé commande = commande \ 2 ' division entière i = i + 1 Loop interfacecmd.val.caption = valeur interfacecmd.show command.hide h.1. capture h. Form 8 : interfacecmd h.2. code source Private Sub Cmdretour_Click() page1.show interfacecmd.hide Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 13
i.1. capture i. Form 9 : eta (lecture de l état) i.2. code source Private Sub Cmdretour_Click() page1.show interfacecmd.hide j.1. capture j.form 10 : decbin (decimal-binaire) Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 14
j.2. code source Private Sub retour_click() page1.show decbin.hide Private Sub valid_click() Dim nbredec As Integer Dim montab(8) As Integer Dim i As Integer Dim valeur As Integer nbredec = txtnbredec.text valeur = nbredec i = 0 Do While i < 8 montab(i) = nbredec Mod 2 bit(i).text = montab(i) nbredec = nbredec \ 2 i = i + 1 Loop 'boucle de conversion decimal-binaire 'affichage du bit calculé ' division entière Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 15
k.1. capture k. Form 11 :bindec (binaire-decimal) k.2. code source Private Sub retour_click() page1.show bindec.hide Private Sub valid_click() Dim valeur As Integer Dim i As Integer i = 0 valeur = 0 Do While i < 8 valeur = (2 ^ i) * bit(i).text + valeur i = i + 1 Loop nbredec.caption = valeur Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 16
III. RESULTATS D EXECUTION III.1 Test1 : écriture du nombre 255 sur le port LPT et visualisation Sur la page d accueil du logiciel, cliquons sur transmettre une donnée. La page suivante s affiche, sur laquelle on inscrit la donnée à transmettre c'est-à-dire 255. Le box de message suivant apparaît. Cliquons sur Ok. La page de visualisation s affiche. Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 17
Cliquons sur retour pour rentrer à la page 1. III.2 Test 2 : Lecture de l état Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 18
III.3. Test 3 : conversion de 17 en binaire III.4. Test 4 : Conversion de 11001101 en décimal Rédigé par Fouejieu, Sop, Kamokoue, Djouatsa, Nzuyo, Essous, Kegang, Ngashu Page 19