Otopark Devresi

Başlatan yiitsyl81, 28 Ekim 2015, 15:26:56

yiitsyl81

Merhaba arkadaşlar ben 6 araçlık bir otopark devresi yapmak istiyorum. LCD ekranın üstünde "Hoşgeldiniz" altında ise içerideki araç sayısının yazmasını, araç sayısı 6 ya ulaşınca "Hoşgeldiniz" yazısı yerine "Otopark" dolu yazısı yazmasını istiyorum. Birde otopark boşken "BOŞ" yazan led, dolunca da "DOLU" yazan led yansın istiyorum. Sensör yerine isis devresinde buton var. Benim kaldığım nokta da burası butona basınca araç sayını arttıramıyorum başka kaynaklardan bakarak birşeyler yaptım ama olmadı. Yazdığım program şöyledir. Yardımlarınızı bekliyorum. Sağolun.
Device 16F877AXtal 4TRISB=%00000011TRISD=%00000000TRISE=%00000000PORTD=%11110011Dim buton As PORTB.0Dim say As Bytesay=0ADCON1=%00000010Declare LCD_DTPin PORTD.4Declare LCD_ENPin PORTE.1Declare LCD_RSPin PORTE.0Declare LCD_RWPin PORTB.2Declare LCD_Interface 4Declare LCD_Lines 2Print At 1,1,"  HOSGELDINIZ"PORTD.2=1BASLA:If buton=0 ThenBUTONTEST:If buton=0 Then GoTo BUTONTESTsay=say+1EndIfSelect sayCase 1 Print At 2,1,"ARAC SAYISI= 1"Case 2 Print At 2,1,"ARAC SAYISI= 2"Case 3 Print At 2,1,"ARAC SAYISI= 3"Case 4 Print At 2,1,"ARAC SAYISI= 4"Case 5 Print At 2,1,"ARAC SAYISI= 5"Case 6 Print At 2,1,"ARAC SAYISI= 6" Print At 1,1," OTOPARK DOLU" PORTD.2=0 PORTD.3=1 EndSelectGoTo BASLAEnd
  Yardımcı olursanız çok memnun olurum. şimdiden Sağolun.

ete

#1
Buton kontrolünde mantık hatası yapmışsın. Butona basılınca yeniden başa gönderiyorsun programı. Bir takım lüzumsuz satırlarıda çıkartırsak programın BASLA satırından sonraki hali aşağıdaki şekilde olmalı. Düzeltip yeniden dene.

BASLA:If buton=0 Then  say=say+1  IF SAY=7 THEN SAY=6  while buton=0:wend  delayms 50EndIfPrint At 2,1,"ARAC SAYISI=",DEC1 SAYIF SAY=6 THEN Print At 1,1," OTOPARK DOLU" PORTD.2=0 PORTD.3=1else Print At 1,1,"               "ENDIFGOTO BASLA


Butonları pullup lı olarak çalıştırıyorsun. Pullup direncide bağlamamışsın. O halde dahili pullup ları kullanman gerekecek.
Bunun için programın baş taraflarına bir yere,
OPTION_REG.7=0 komutunuda eklemen gerekiyor.
Ayrıca analog pin kullanmadığına göre
CMCON=7
ADCON1 = 7
komut satırlarıda baş taraflara yazılmalı. Senin yazdığın ADCON1=%00000010 doğru değil. Onuda sil oradan.

ete

yiitsyl81

Hocam çok çok sağolun devre çalışıyor. OPTION_REG.7=0 , CMCON=7 , ADCON1 = 7 komutları ne anlama geliyor onlarıda açıklayabilirmisiniz. Ben şimdi araç çıktığı zaman bu sefer sayıyı azaltan programı yazmaya çalışacağım. Saygılar.

yiitsyl81

Hocam çıkış olarak böyle birşey yaptım ancak olmuyor. say=say-1 yapınca eksilmesi gerekmiyor mu? Yanlışım nerededir?
Device 16F877AXtal 4TRISB=%00000011TRISD=%00000000TRISE=%00000000PORTD=%11110011Dim buton As PORTB.0Dim buton2 As PORTB.1Dim say As Bytesay=0say=PORTB.0say=PORTB.1OPTION_REG.7=0CMCON=7ADCON1 = 7Declare LCD_DTPin PORTD.4Declare LCD_ENPin PORTE.1Declare LCD_RSPin PORTE.0Declare LCD_RWPin PORTB.2Declare LCD_Interface 4Declare LCD_Lines 2Print At 1,1,"  HOSGELDINIZ"PORTD.2=1GIRIS:If buton=0 Then  say=say+1  If say=7 Then say=6  While buton=0:Wend  DelayMS 50EndIfPrint At 2,1,"ARAC SAYISI=",Dec1 sayIf say=6 Then Print At 1,1," OTOPARK DOLU" PORTD.2=0 PORTD.3=1GoTo GIRISCIKIS:If buton2=0 Then say=say-1 While buton2=0:Wend DelayMS 50EndIfPrint At 2,1,"ARAC SAYISI=",Dec1 say PORTD.2=1 PORTD.3=0ElseEndIf GoTo CIKIS

ete

Program satır takip eder ve GOTO veya GOSUB komutlarını görüncede başka satırlara atlar.
Senin programına bir bak bakalım. GIRIS..... GOTO GIRIS arasında çalışıp duruyor. CIKIS isimli etikete nasıl gidecek de orası çalışacak?

Çıkış kısmına yazdıklarından aşağıdakileri alıp GIRIS altına koyarsan istediğin olacak. Diğerlerini koymaya gerek yok yok anlar var zaten orada.
If buton2=0 Then say=say-1 While buton2=0:Wend DelayMS 50EndIf


Ete

Powered by EzPortal