Strona 1 z 1

Napisz własny program.

: 29 gru 2006, 20:14
autor: Machina
Opiszę jak wysłać i odebrać sygnał z LPT (oraz innych portów) w Visual Basic używając biblioteki inpout32.dll ŚCIĄGNIJ ( od mego kumpla ).
Postaram się zrobić to w przystępny sposób, ale mimo tego jest wymagana chociaż niewielka umiejętność programowania w Visual Basic. (Jeśli chcesz umieć programować porty, to najpierw naucz się w ogóle programować...) Z własnego doświadczenia wiem, że początki są najtrudniejsze, więc nie będę opisywał tworzenia skomplikowanego programu, tylko pokażę jak po naciśnięciu przycisku zapalić lub zgasić diodę oraz jak odpowiednio łącząc styki na LPT wykonać procedurę przez program.

Na samym dole są kody źródłowe innych języków programowania.
Visual Basic

Oczywiście najpierw skopiuj plik inpout32.dll do katalogu systemowego.
Po otwarciu nowego projektu (Standard EXE) dodaj nowy moduł (Project => Add Module). Wpisz do nowootwartego okna poniższy kod, który umożliwi "komunikację" z inpout32.dll:

Kod: Zaznacz cały

Public Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
Możesz teraz w programie korzystać z funkcji Out do wysłania danych i Inp do odebrania danych z portu.

Teraz warto zdeklarować stałą, która będzie zawierała adres naszego portu, który będzie potrzebny podczas każdego wywołania procedury Inp lub Out. Przejdź do podglądu kodu Form1 (lub jak tam nazwałeś program). W General Declarations wpisz:

Kod: Zaznacz cały

Option Explicit
Const PORT = &H378 'NUMER TWOJEGO PORTU (przed numerem trzeba podać "&H")
Dalszy opis dotyczy tylko LPT, ale w przypadku innych portów robi się analogicznie. Wysłanie sygnału Teraz dodaj pole tekstowe (Text1) i przycisk (Command1). Będziesz wpisywać liczbę z przedziału 0-255 i po naciśnięciu przycisku zostanie wysłana do LPT. Procedura wygląda tak:

Kod: Zaznacz cały

Private Sub Command1_Click()
Out PORT, Text1.Text
End Sub
Możesz teraz pokombinować z liczbami 0-255 i sprawdzić, czy diody zapalają się i gasną.

Zakładam, że diody są podłączone do D0-D7 (czyli piny 2-9) - tak jest zdecydowanie łatwiej niż jakkolwiek inaczej. Jeśli nie wiesz, jaka liczba odpowiada jakiej kombinacji, jest prosty sposób, żeby to sprawdzić:
Kombinacja diód D0-D7 (system dwójkowy) odpowiada liczbie wpisanej do pola Text1. Już tłumaczę ... Załóżmy, że podłączyłeś diodę do pinu 4 (dioda na trzecim miejscu). Chcesz, żeby dioda na 3. miejscu zapaliła się, a pozostałe nie. Taka kombinacja odpowiada liczbie 00000100 w systemie binarnym (1-dioda świeci się, 0-nie świeci się), ale ...
UWAGA: Liczbę w systemie dwójkowym trzeba odwrócić. U nas jedynka ma być na 3. miejscu od lewej, więc kod binarny pownien mieć jedynką na pozycji trzeciej od końca (pamiętaj, że koniec jest na ósmej pozycji). Na przykład dla diody na 1. i 5. pozycji otrzymamy 10001000, a odwracając to: 00010001. Z pomocą przychodzi czasem niedoceniany Windowsowy Kalkulator. Wybierz Widok Zaawansowany (lub Naukowy - zależy od wersji), zaznacz pole Bin i wpisz liczbę 100 (zera na początku można pominąć). Potem zmień na Dec i odczytaną liczbę (tu 4) wpisz do programu. Zapali się trzecia dioda.
Odebranie sygnału Do tego samego formularza dodaj kolejne pole tekstowe (Text2) i przycisk (Command2). Procedura jest następująca:

Kod: Zaznacz cały

Private Sub Command2_Click()
Text2.Text = Inp(PORT + 1) 'PORT+1, bo dane odbieramy z adresu
                           'o 1 większego niż zdeklarowany na początku (to wynika z budowy LPT)
End Sub
Jeśli teraz klikniesz na Przycisk2 to w drugim polu tekstowym pojawi się liczba 120 (tak jest u mnie, ale wydaje mi się, że raczej inna nie będzie). Jeśli teraz połączysz metalową obudowę wtyczki LPT (minus), to pinem wejścia (plus), na przykład 10 (może być również 11, 12, 13, 32) i znowu wciśniesz przycisk, to liczba zmieni się na 88. Możesz teraz połączyć inny pin - pojawi się inna liczba. Można stosować rożne kombinacje - np. 12 i 13 - za każdym razem liczba jest inna. Teraz wystarczy napisać procedurę, która będzie wykonywała jakieś polecenie w przypadku pojawienia się danej liczby. Warto użyć do tego Timera - program cały czas będzie monitorował stan potru.

Jak widać kodu jest niewiele. Teraz wystarczy uruchomić swoją wyobraźnię i napisać dowolny program do obsługi dowolnego urządzenia sterowanego dowolnym portem.

Jeśli nie umiesz programować i nie rozumiesz tego tekstu, to odsyłam do stron temu poświęconych. Wystarczy w Google.pl wpisać "Visual Basic".

Kod źródłowy testowego programu (tego co opisałem) znajduje się tu: PROGRAM TESTOWY

Na koniec powiem jeszcze jaka jest różnica między opisanym programowaniem LPT, a innymi portami:
- Jest inny adres portu i cały czas jest taki sam (nie ma przesunięcia typu &H378 + 1)
- Wysyłamy na port inne liczby (jest ich mniej).
- Nie można obliczyć jaką liczbę trzeba wysłać, żeby zapalić daną diodę - po prostu trzeba pokombinować.