Paso 6: Software de Il
Il software di controllo e' coescrito en linguaggio Visual Basic. Il codice e' da tener en un modulo nel vostro progetto visual basic. E' también está necessario tener anche la libreria inpout32.dll (potete reperirla cercando il nome del su google oppure scaricando il archivo PROGRAMMI. ZIP allegato sotto) nella cartella c:\windows\system32 del pc vostro.Potete trovare qualche cojinete (en inglés) sul Mr della porta parallela qui: http://logix4u.net/Legacy_Ports/Parallel_Port.html
En cada momento lo stato del cubo e' memorizzato nella matrice StatoCubo, chiken un temporizador si géneros un evento ogni pochi ms si preoccupa di accendere ogni llevó secondo lo stato memorizzato nella matrice.
NOTA BENE: este modulo si medicina di visualizzare sul cubo il contenuto della matrice StatoCubo. DOVETE ADMINISTRANDO DA SOLI I VARI CAMBIAMENTI DEI VALORI DELLA MATRICE!!!!!!
Se volete qualcosa gia' pronto nel archivo PROGRAMMI. Allegato ZIP qua trovate sotto i programmi praticamente fanno tuttto:'
Gestione led cubo 0.5.3--> gestione manuale e chiken timeline del cubo
medidor de nivel con contraste--> riproduttore MP3 freeware con control led cube (equalizzazione del segnale)
inpout32.dll--> libreria por la gestione della porta parallela (necesaria por il Mr dei programmi)
Matrice de la StatoCubo:
La matrice StatoCubo e' composta da 8 vettori ognuno di 64 elementi. Ogni vettore rappresenta lo stato di ONU intero livello, cada elemento del vettore rappresenta lo stato di 1 singolo led: 1 = acceso, 0 = temperatura regulada.
La función ScriviCubo:
Esta función viene richiamata ciclicamente chiken un temporizador e si medicina di trasmettere il contenuto della matrice StatoCubo al cubo vero e proprio.
La función ClokkaLed:
Di de medicina de la si "función ScriviCubo e dalla esta función viene richiamata" dare un colpo di reloj agli cambio registro delle colonne modificando SOLAMENTE il poco del reloj. En este modo il poco posto all'ingresso del primo cambio registro delle colonne viene acquisito.
La función ClokkaLivello:
Di de medicina de la si "función ScriviCubo e dalla esta función viene richiamata" dare un colpo di reloj allo cambio registro dei livelli modificando SOLAMENTE il poco del reloj. Se il livello da attivare e' il primo, viene posto un 1 all'ingresso dello registro de desplazamiento. Por successivi livelli il poco de ingresso sara' 0, verra' colpo di reloj de solamente dato ONU por far scorrere il pedacito del primo livello en avanti. Cosi' i livelli si accenderanno en sequenza, uno alla volta.
La función ClearAll:
Utilizzando esta función viene attivato il piedino su clara entrambi gli registro de desplazamiento. Tutti bit contenuti han cambio registro saranno posti un 0, di conseguenza il cubo risultera' temperatura regulada totalmente.
La función Aspetta:
Questa e' la función utilizzata por ritardare il ciclo di aggiornamento dei vari livelli. Senza questa lideré dei vari livelli si accenderebbero e si spegnerebbero troppo velocemente riuscendo no ad illuminarsi efectuado.
Passiamo al codice vero e proprio en grassetto comentarios:
'---RICHIAMO ALLA LIBRERIA POR LA GESTIONE DELLA PORTA LPT---
Público declara la función Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Público Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal valor As Integer)
'---COSTANTI POR GLI INDIRIZZI DELLA PORTA LPT1---
Pública Const IndirizzoData As String = "& H378" ' REGISTRO datos: 8 bits
'-------------------------------------------------------VARIABILI GLOBALI----------------------------------------------------
Público StatoCubo(1 To 8, 1 To 64) As Integer ' variabile contiene lo stato asociativo di TUTTO il cubo
'-------------------------------------------------------------FUNZIONI--------------------------------------------------------
ScriviCubo(NumeroCicli As Integer) función pública ' función por scrivere sul cubo lo stato memorizzato nella matrice StatoCubo
Dim ByteLpt como Byte
Dim ContaLivelli como entero
Dim ContaLed como entero
Dim ContaCicli como entero
Para ContaCicli = 1 To NumeroCicli ' ciclo por inalterato mantenere lo stato da rappresentare por X cicli
Para ContaLivelli = 1 a 8 ' scorro tutti i livelli impostandoli grapar uno alla volta
' tutti imposto yo poco dello cambio reg. delle colonne senza clokkare sullo cambio reg. dei livelli e disattivando SEMPRE entrambi claro (xx 01 x _1_)
Para ContaLed = 64 a 1 Step -1 ' para ContaLed = 1 a 64
' CAMBIO LIVELLI DE REG.:
' MSB (D5) = 0--> reloj disattivato
' CENTRALE (D4) = 1 (valore = 16)--> claro disattivato
' LSB (D3) = indifferente
' SHIFT REG. LED:
' MSB (D2) = 0--> reloj disattivato
' CENTRALE (D1) = 1 (valore = 2)--> claro disattivato
' LSB (D0) = StatoCubo (ContaLivelli, ContaLed)
ByteLpt = (0 + 16 + 0) + (0 + 2 + StatoCubo (ContaLivelli, ContaLed))
Llamar ClokkaLed(ByteLpt) 'passo il valore alla función da' ONU colpo di reloj allo cambio reg. delle colonne
Siguiente ContaLed
' CAMBIO LIVELLI DE REG.:
' MSB (D5) = 0--> reloj disattivato
' CENTRALE (D4) = 1 (valore = 16)--> claro disattivato
' LSB (D3) = (livello se = 1--> 1(valore=8); se livello <> 1--> 0)--> metto 1 solo la prima volta
' SHIFT REG. LED:
' MSB (D2) = 0--> reloj disattivato
' CENTRALE (D1) = 1 (valore = 2)--> claro disattivato
' LSB (D0) = indifferente
Si ContaLivelli = 1 Then 'se sto' impostando il primo livello entrar un 1 salida dello cambio reg. dei livelli, en consecuencia inviero' soltanto il segnale di reloj cosi' l 'scorrera 1' fino en fondo attivando un livello alla volta
ByteLpt = (0 + 16 + 8) + (0 + 2 + 0)
Otra cosa
ByteLpt = (0 + 16 + 0) + (0 + 2 + 0)
End If
Llamar ClokkaLivello(ByteLpt) 'passo il valore alla función da' ONU colpo di reloj allo cambio reg. dei livelli
Llamar Aspetta(60000) ' richiamo la función por generare un ritardo (il cubo smette di lampeggiare dai 60000 ai 70000 cicli)
Próximo ContaLivelli ' cancion il ciclo andando ad cómo il livello artículo
Llame a ClearAll ' richiamo la función por attivare registro de cambio gli il su clara entrambi (tutti spengo encabecé del cubo)
Siguiente ContaCicli
End Function
Público función ClokkaLed(Valore As Byte) 'da' ONU colpo di reloj agli cambio reg. delle colonne (reformas SOLAMENTE il bits del reloj)
A Val(IndirizzoData), Val(Valore) ' reloj DISATTIVATO
'aggiungo 4 perche' devo poner anuncio 1 il bits del reloj degli cambio reg. delle colonne x dare reloj de il colpo di
A Val(IndirizzoData), Val(Valore + 4) ' reloj ATTIVATO
End Function
Público función ClokkaLivello(Valore As Byte) 'da' ONU colpo di reloj allo cambio reg. dei livelli (reformas SOLAMENTE il bits del reloj)
A Val(IndirizzoData), Val(Valore) ' reloj DISATTIVATO
'aggiungo 32 perche' devo poner anuncio 1 il bits del reloj dello cambio reg. dei livelli x dare reloj de il colpo di
A Val(IndirizzoData), Val(Valore + 32) ' reloj ATTIVATO
End Function
ClearAll() de la función pública ' función por attivare registro de cambio gli il su clara entrambi (tutti spengo encabecé del cubo)
Dim ByteLpt como Byte
' attivo il su clara entrambi gli cambio de registro (valore = 0) cosi' li azzero (xx x0x x0x)
ByteLpt = 0 ' 00 000 000
A Val(IndirizzoData), Val(ByteLpt)
End Function
Aspetta(Ncicli As Long) función pública ' la función por ritardare il ciclo di aggiornamento dei livelli
Dim Contatore mientras
Dim tiempo Contato
Para Contatore = 0 para Ncicli
Contato = Contatore ' operazione di assegnamento ad una variabile (cosi' operación de las Naciones Unidas de fa de la CPU)
Contatore siguiente
End Function