Interfaccia grafica per controllo porta parallela in Visual Basic

Stampa
( 0 Votes ) 
Valutazione attuale:  / 0
ScarsoOttimo 
Categoria: Elettronica
Data pubblicazione
Scritto da Primok Visite: 8740

Interfaccia grafica per controllo porta parallela in Visual Basic

La seguente interfaccia permette di inviare o leggere un byte attraverso la porta parallela. L'applicazione è stata scritta in Visual Basic utilizzando Microsoft Visual studio 2005.




Le istruzioni fondamentali per comunicare con la porta parallela sono le seguenti

Out(&H378S,&HFFS) per inviare un byte alla porta parallela e

value=inp(&H378S) per leggere il byte

Queste funzioni fanno parte della libreria dinamica inpout32.dll che dovrà essere copiata in C:\\Windows\System32 ma questo lo vedremo in seguito.

Una volta creata l'applicazione di windows con Visual Studio 2005 o superiore e scelto il linguaggio Visual Basic passerete alla stesura del vostro codice.

Ovviamente la grafica la potrete modificare a vostro piacimento conoscendo l'ambiente di sviluppo.

Ecco l'intero codice

Option Strict Off

Option Explicit On

Module InpOut32_Declarations

'Inp and Out declarations for port I/O using inpout32.dll.

Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Short) As Short
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Short, ByVal Value As Short)

End Module


'**************************************************************************************************************************************************************

Public Class Form1

Private val1 As Integer = 0
Private val2 As Integer = 0
Dim bit_LPT As String = 0
Dim bit_Read As String = 0
Dim Value2 As Byte 'String named Value2
Private ok5, ok1, ok2, ok3, ok4, ok6, ok7, ok8 As Boolean


'**************************************************************************************************************************************************************


Private Sub CheckBox5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox5.CheckedChanged
ok5 = Not ok5

If (ok5) Then
val1 = val1 Or 16
Out(&H378S, val1)
TextBox1.Text = val1

Else
val1 = val1 And 239
Out(&H378S, val1)
TextBox1.Text = val1

End If
End Sub


'**************************************************************************************************************************************************************


Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

End Sub

'**************************************************************************************************************************************************************

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


If IsNumeric(TextBox1.Text) = True Then
Integer.TryParse(TextBox1.Text, val1)

If (val1 < 256) Then
If (val1 And 1) Then

CheckBox1.Checked = True
Else
CheckBox1.Checked = False

End If

If (val1 And 2) Then

CheckBox2.Checked = True
Else
CheckBox2.Checked = False

End If

If (val1 And 4) Then

CheckBox3.Checked = True
Else
CheckBox3.Checked = False

End If

If (val1 And Then

CheckBox4.Checked = True

Else
CheckBox4.Checked = False
End If

If (val1 And 16) Then

CheckBox5.Checked = True
Else
CheckBox5.Checked = False
End If

If (val1 And 32) Then

CheckBox6.Checked = True
Else
CheckBox6.Checked = False
End If

If (val1 And 64) Then

CheckBox7.Checked = True
Else
CheckBox7.Checked = False
End If

If (val1 And 12 Then

CheckBox8.Checked = True
Else
CheckBox8.Checked = False
End If

Out(&H378S, val1)
Else

MsgBox("Digitare un numero intero compreso tra 0 e 255 TextBox")
TextBox1.Text = 0
TextBox1.Focus()
End If
Else


MsgBox("Digitare un numero intero compreso tra 0 e 255 nel TextBox")
TextBox1.Text = 0
TextBox1.Focus()
End If



End Sub


'**************************************************************************************************************************************************************


Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

Out(&H378S, &H0S)

End Sub


'**************************************************************************************************************************************************************


Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

TextBox1.MaxLength = 3
TextBox2.MaxLength = 1
Out(&H378S, &H0S)
TextBox1.Text = val1
TextBox2.Text = 0
ok1 = False
ok2 = False
ok3 = False
ok4 = False
ok5 = False
ok6 = False
ok7 = False
ok8 = False

End Sub


'**************************************************************************************************************************************************************


Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
ok1 = Not ok1
If (ok1) Then
val1 = val1 Or 1
Out(&H378S, val1)
TextBox1.Text = val1
Else
val1 = val1 And 254
Out(&H378S, val1)
TextBox1.Text = val1
End If
End Sub


'**************************************************************************************************************************************************************


Private Sub CheckBox8_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox8.CheckedChanged
ok8 = Not ok8
If (ok Then
val1 = val1 Or 128
Out(&H378S, val1)
TextBox1.Text = val1
Else
val1 = val1 And 127
Out(&H378S, val1)
TextBox1.Text = val1
End If
End Sub


'**************************************************************************************************************************************************************


Private Sub CheckBox7_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox7.CheckedChanged
ok7 = Not ok7
If (ok7) Then
val1 = val1 Or 64
Out(&H378S, val1)
TextBox1.Text = val1
Else
val1 = val1 And 191
Out(&H378S, val1)
TextBox1.Text = val1
End If
End Sub


'**************************************************************************************************************************************************************


Private Sub CheckBox6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox6.CheckedChanged
ok6 = Not ok6
If (ok6) Then
val1 = val1 Or 32
Out(&H378S, val1)
TextBox1.Text = val1
Else
val1 = val1 And 223
Out(&H378S, val1)
TextBox1.Text = val1
End If
End Sub


'**************************************************************************************************************************************************************


Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged
ok4 = Not ok4
If (ok4) Then
val1 = val1 Or 8
Out(&H378S, val1)
TextBox1.Text = val1
Else
val1 = val1 And 247
Out(&H378S, val1)
TextBox1.Text = val1
End If
End Sub


'**************************************************************************************************************************************************************


Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged
ok3 = Not ok3
If (ok3) Then
val1 = val1 Or 4
Out(&H378S, val1)
TextBox1.Text = val1
Else
val1 = val1 And 251
Out(&H378S, val1)
TextBox1.Text = val1
End If
End Sub


'**************************************************************************************************************************************************************


Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
ok2 = Not ok2
If (ok2) Then
val1 = val1 Or 2
Out(&H378S, val1)
TextBox1.Text = val1
Else
val1 = val1 And 253
Out(&H378S, val1)
TextBox1.Text = val1
End If
End Sub


'**************************************************************************************************************************************************************


Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged

End Sub


'**************************************************************************************************************************************************************


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

If IsNumeric(TextBox2.Text) = True Then

Integer.TryParse(TextBox2.Text, val2)

If (val2) < 8 Then

bit_LPT = TextBox2.Text

Select Case bit_LPT

Case "0"
bit_Read = "B0="
Value2 = Inp(&H378S)
Value2 = Value2 And 1
TextBox2.Text = bit_Read + Value2.ToString

Case "1"
bit_Read = "B1="
Value2 = Inp(&H378S)
Value2 = Value2 And 2
Value2 = Value2 >> 1
TextBox2.Text = bit_Read + Value2.ToString
Case "2"
bit_Read = "B2="
Value2 = Inp(&H378S)
Value2 = Value2 And 4
Value2 = Value2 >> 2
TextBox2.Text = bit_Read + Value2.ToString
Case "3"
bit_Read = "B3="
Value2 = Inp(&H378S)
Value2 = Value2 And 8
Value2 = Value2 >> 3
TextBox2.Text = bit_Read + Value2.ToString
Case "4"
bit_Read = "B4="
Value2 = Inp(&H378S)
Value2 = Value2 And 16
Value2 = Value2 >> 4
TextBox2.Text = bit_Read + Value2.ToString

Case "5"
bit_Read = "B5="
Value2 = Inp(&H378S)
Value2 = Value2 And 32
Value2 = Value2 >> 5
TextBox2.Text = bit_Read + Value2.ToString
Case "6"
bit_Read = "B6="
Value2 = Inp(&H378S)
Value2 = Value2 And 64
Value2 = Value2 >> 6
TextBox2.Text = bit_Read + Value2.ToString
Case "7"
bit_Read = "B7="
Value2 = Inp(&H378S)
Value2 = Value2 And 128
Value2 = Value2 >> 7
TextBox2.Text = bit_Read + Value2.ToString
End Select
Else
MsgBox("Digitare un numero intero compreso tra 0 e 7 TextBox")
TextBox2.Text = 0
TextBox2.Focus()
End If
Else
MsgBox("Digitare un numero intero compreso tra 0 e 7 TextBox")
TextBox2.Text = 0
TextBox2.Focus()
End If
End Sub


'**************************************************************************************************************************************************************


Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
val1 = 0
Out(&H378S, val1)
TextBox1.Text = val1
CheckBox1.Checked = False
CheckBox2.Checked = False
CheckBox3.Checked = False
CheckBox4.Checked = False
CheckBox5.Checked = False
CheckBox6.Checked = False
CheckBox7.Checked = False
CheckBox8.Checked = False
TextBox2.Text = 0

End Sub
End Class


'**************************************************************************************************************************************************************



Bene,ora non dovete fare altro che copiare il contenuto e modifcare a vostro piacimento, oppure mantenere così com'è ed usare l'eseguibile.



L'seguibile lo potete scaricare da qui:



parallela.zip mentre



la libreria dinamica (inpout32.dll ) la scaricherete da qui:



inpout32.dll.zip







Una volta che avete decompresso il file parallela.zip per lanciare l'applicazione dovete solo cliccarci sopra. Prima di passare alla descrizione dell'interfaccia diamo uno sguardo allo schema elettrico dell'interfaccia hardware.



SCHEMA ELETTRICO

L'immagine è stata ridimensionata. Clicca qui per vedere l'immagine ingrandita. Le dimensioni originali sono 1200x882 e 133KB

+





Come potete vedere dallo schema elettrico , l'interfaccia è molto semplice; infatti è formata da un connettore per porta parallela,un buffer 74HC244 dei led

e un relè a 5V.

Una volta collegato il cavo allaporta parallela, alimenterete il circuito con 5V stabilizzati. Poi dovete cliccare parallela.exe e vedrete apparire la seguente finestra:



+





I quadratini bianchi (CheckBox) rappresentano i bit B0-B7 della parallela; Cliccando dentro porteremo alto il bit corrispondente.

Dopo questo evento verrà aggiornato anche il contenuto del TextBox Byte(0-225).Se ad esempio cliccheremo su B0 e B2 , nel TextBox comparirà

il numero decimale 3.Se successivamente cliccheremo su B0, togliendo il segno di spunta, verrà visualizzato il nuovo stato della parallela cioè 2.

Per inviare un dato alla porta parallela si può anche inserire un numero decimale compreso tra 0-255 nel TextBox e poi cliccare su Send_Byte.

Se per sbaglio inserirete un numero superiore a 255 oppure inserirete delle lettere e/o numeri sarete invitati a digitare correttamente un mumero

compreso tra 0-255.L'immagine che comparirà sarà la seguente:

L'immagine è stata ridimensionata. Clicca qui per vedere l'immagine ingrandita. Le dimensioni originali sono 1200x1002 e 526KB

+


Digitando correttamente un numero invece si abiliteranno i bit corrispondenti




+



Nel TextBox Bit (0 -7 ) invece verra letto il bit inserito; ad esempio se si inserisce 0 e poi si preme sul pulsante Read_bit verrà visualizzato lo stato del bit

cioè o 0 oppure 1.Per una nuova lettura di un altro bit oppure dello stesso bit occorre prima cancellare il contenuto ( ad esempio B0=1) e poi ripremere il

pulsante Read_bit.In caso contrario sarete invitati a digitare correttamente un numero compreso tra 0-7 dalla seguente schermata



+



Il pulsante LPT_clear serve per azzerare tutti i bit della porta parallela. Per testare l'interfaccia ho utilizzato un circuito hardware già in mio possesso

avendo già realizzato un circuito simile ma in Visual C++ leggermente diverso ma non cambia la sostanza.



Il CIRCUITO HARDWARE

L'immagine è stata ridimensionata. Clicca qui per vedere l'immagine ingrandita. Le dimensioni originali sono 1200x1200 e 1997KB

+



Infine l'interfaccia azzera i bit della porta parallela sia dopo l'apertura che dopo la chiusura dell'applicazione.



N.B.

Pubblicherò in tempi brevi un video dimostrativo sul funzionamento dell'interfaccia





VIDEO



SALUTI

PRIMOK_V

Joomla 1.7 Templates designed by College Jacke