Bildirim
delphi paralel port controlü
Daha Fazla
Bu Konudaki Kullanıcılar:
Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü, 1 Mobil
Giriş
Mesaj
-
-
Sorununu açık bir dille anlatırsan yardımcı olmaya çalışırım.Delphi ile paralel port a bilgi gönderme bilgi alma işlemleri yapmak istersen çok kolay bi şekilde yapabilceğin kodları gönderirm.Anca şu listbox olayını tam açık bir şekilde anlatırsan yardımcı olmaya çalışırım. -
şöyle anlatayım. müzik kutusu yapıyorum. listboxta sanatçı isimleri var. ben dışarıdan paralel porta bağladığım butonlarla bunlar arasında gezinmek yukarı aşağı gezinmek istiyorum. birde seçme butonu kullanacam. seçme butonu ise seçtiğim sanatçının şarkılarını başka bir listbox içine atacak. ayrıca kredi verme olayı içinde başka bi buton kullanmam gerekiyor. yani toplam 4 buton. biri yukarı diğeri aşağı biri kredi veriyor. diğeri ise seçme işine yarıyor. inşaAllah anlatabilmişimdir. ayrıca işime yarayabilecek kodları alabilirim. ilginize çok teşekkürler.
< Bu mesaj bu kişi tarafından değiştirildi desperado3333 -- 24 Mayıs 2007; 17:46:58 > -
Yapmak istediğiniz şeyi anladım.Şöyle anlatmak gerekirse,siz projenizde porttan dışarı herhangi bir bilgi göndermiceksiniz.
yanlızca dışardan bağladığınız butonlara basınca programınız bunu algılayacak ve gerekli işlemi yapıcak.
Paralel portun yapısını biraz anlatırsam;
Paralel portta 5 adet input pini bulunmaktadır.adreside genelde $379 dur.
D3: 15 numaralı pin (ERROR) terslenmiş ( inverted )
D4: 13 numaralı pin (SELECTED)
D5: 12 numaralı pin (PAPER OUT)
D6: 10 numaralı pin (ACK)
D7: 11 numaralı pin (BUSY) terslenmiş ( inverted )
Input Adresi 279 / 379 / 3BD
Bit : 7 6 5 4 3 2 1 0
Pin : ~11 10 12 13 ~15 - - -
Karşılık: 128 64 32 16 8 - - -
~(tilt) sembolü, tersi anlamında kullanılmıştır.
Paralel porttan bilgi okunması şu şekilde yapılır. Yukarda belirtilen 5 adet input pininden hangisine ya da hangilerine şase sinyali uygulanırsa bilgisayar bunlardan giriş yapıldı kabul eder ve bu pinlerin değerleri toplamı kaç ise programda bu değeri alır. Örneğin 11, 12 ve 15. pinler şase yapılırsa programda portun değeri 128+32+8= 168 olacaktır. Bu sayede programlarımızda portun aldığı değeri okutup hangi pinlerden ya da pinden bilgi geldiğini anlayabiliriz. Örneğin 5 tane butonumuz olsun ve giriş pinlerine bağlanmış olsunlar. Hangi pin şaselenirse hangi değerin okunacağını bildiğimizden dolayı kolayca hangi butona basıldığını anlayabiliriz.
Açıklama; Porttan gelecek bilgiyi bir değişkene atmamız gerekmektedir.
değişkenimiz örneğin "bilgi "olsun.
var
bilgi:integer;
begin
bilgi:=Inp32($379),2);
if bilgi=16 then //13. pin şase edilmiş demektir.
begin "yapılmasını istediğin işlem komutu" end;
if bilgi=32 then // 12 .pin şase edilmiştir.
begin "yapmasını istediğin işlem komutu" end;
if bilgi=64 then // 10 . pin şase edilmiştir.
begin "yapmasını istediğin işlem komutu" end;
burdaki bilginin değerine göre programı istediin gibi yönlendirebilrsin.
yanlız bu komutu kullanabilmek için programda "implementation" satırının hemen üstüne;
function Inp32(wAddr:word):integer; stdcall; external 'inpout32.dll'
yazmalısın.
(sonunda herhangi bir noktalama işareti yok)daha sonrada winxp lerde port koruması olduğu için port korumasını açman için sistem32 klasörüne google da aratarak "inpout32.dll" dosyasını kopyalarsın.
umarım açıklayıcı olmuşumdur.herhangi birşey kafana takılırsa buraya yazarsın.hadi kolay gelsin...
-
size ne kadar teşekkür etsem azdır. çok sağolun sorunum olursa yine rahatsız ederim sizi. tekrar teşekkürler. başarılar -
selamlar.
ben vermiş olduğunuz bilgileri kullandım. fakat butonları çalıştıramadım. çünkü bilgi:=Inp32($379),2); bölümünde 2 den önce virgülün oralarda hata veriyor. 3 parantez var orada ve ben ne yaptıysam olmadı. çalıştıramadım. hatanın sebebi ne olabilir. teşekkür ettim. başarılar. -
Sanırım hata veri tiplerinin uyuşmamasından kaynaklanıyor.Size birde şöyle yapmanızı tavsiye ederim;
Form üstüne bir label ekleyin.bu label1 olsun diyelim.formda görünmesini istemiyorsanız label1.visible ını false yaparsınız.çünkü bu label ı sadece kontrol amaçlı kullanıcaksınız.yani program porttaki bilgiyi kontrol edicek ve bu label ın içine hexedesimal olarak değerini yazıcak.sizde bu değeri kontrol etitip programı yöndelniriceksiniz.
label1.caption:=IntToHex(Inp32($379),2);
if (label1.Caption='6F') then // 6f hexedeciamal sayısı binary olarak 0110 1111 buna eşittir.
begin
yapılcak işlem
end;
not:önceden verdiğim tabloyu hatırlarsan;
Bit : 7 6 5 4 3 2 1 0
Pin : ~11 10 12 13 ~15 - - -
Karşılık: 128 64 32 16 8 - - -
bu tablo çok önemli.şimdi örnekle anlatıcam.bu tablo status portunun durumunu gösterir.status portundan bilgisayara veri girişi yaparız.
0. 1. ve 2 . bitler kullanılmaz.ancak bu pinler olmammasına rağmen değerleri bilgisayarda 1 olarak görünür.
bilgisayar portlarına hiçbişey bağlamadan programı çalıştırıp label deki değere bakarsan(tabi visible ı true durumdayken) 0111 1111 yani hexedecimal olarak 7F görürsün.pinlerden 13 . pin i toprağa bağlarsan yani paralel porttun dış metaline yada 18. pinden 25 . i pine kadr topra olması gerekiyor yanlış hatırlamıyorsam ama sen yinede dış metal kısmına değdirirsen portun yeni değeri 6f yani 0110 1111 olur.bunu da algılayınca programı buna göre yönlendirisin.diğer pinlerde aynı şekilde,diyelim 12 . pini şase yaparsan da eğer bu durumda 13.pin hala şase ise 0100 1111 olur yeni değer.
siz 4 buton gerekiyor yazmıştınız yanlış hatırlamıyorsam.11 pin terslenmiştir yani değeri 0 olarak görür.siz 11 pin i şase yaparsanız dışardan, bilgisayar bunu içerde 1 olarak görür. ve değer 1111 1111 olur.
label1.caption:=IntToHex(Inp32($379),2);
if (label1.Caption='6F') then // 6f hexedeciamal sayısı binary olarak 0110 1111 buna eşittir. buton 1
begin
yapılcak işlem
end;
label1.caption:=IntToHex(Inp32($379),2);
if (label1.Caption='FF') then // ff hexedeciamal sayısı binary olarak 1111 1111 buna eşittir. buton 2
begin
yapılcak işlem
end;
label1.caption:=IntToHex(Inp32($379),2);
if (label1.Caption='5F') then // 5f hexedeciamal sayısı binary olarak 0101 1111 buna eşittir.buton 3
begin
yapılcak işlem
end;
label1.caption:=IntToHex(Inp32($379),2);
if (label1.Caption='3F') then // 3f hexedeciamal sayısı binary olarak 0011 1111 buna eşittir. buton 4
begin
yapılcak işlem
end;
hadi kolay gelsin...
Sayfa:
1
Ip işlemleri
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X