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 16F877A
Xtal 4

TRISB=%00000011
TRISD=%00000000
TRISE=%00000000
PORTD=%11110011

Dim buton As PORTB.0
Dim say As Byte
say=0

ADCON1=%00000010

Declare LCD_DTPin PORTD.4
Declare LCD_ENPin PORTE.1
Declare LCD_RSPin PORTE.0
Declare LCD_RWPin PORTB.2
Declare LCD_Interface 4
Declare LCD_Lines 2



Print At 1,1,"  HOSGELDINIZ"
PORTD.2=1

BASLA:

If buton=0 Then
BUTONTEST:
If buton=0 Then GoTo BUTONTEST
say=say+1

EndIf

Select say

Case 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

EndSelect

GoTo BASLA

End
  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 50
EndIf

Print At 2,1,"ARAC SAYISI=",DEC1 SAY
IF SAY=6 THEN
Print At 1,1," OTOPARK DOLU"
PORTD.2=0
PORTD.3=1
else
Print At 1,1,"               "
ENDIF
GOTO 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 16F877A
Xtal 4

TRISB=%00000011
TRISD=%00000000
TRISE=%00000000
PORTD=%11110011

Dim buton As PORTB.0
Dim buton2 As PORTB.1
Dim say As Byte
say=0
say=PORTB.0
say=PORTB.1
OPTION_REG.7=0
CMCON=7
ADCON1 = 7


Declare LCD_DTPin PORTD.4
Declare LCD_ENPin PORTE.1
Declare LCD_RSPin PORTE.0
Declare LCD_RWPin PORTB.2
Declare LCD_Interface 4
Declare LCD_Lines 2



Print At 1,1,"  HOSGELDINIZ"
PORTD.2=1

GIRIS:

If buton=0 Then
  say=say+1
  If say=7 Then say=6
  While buton=0:Wend
  DelayMS 50
EndIf

Print At 2,1,"ARAC SAYISI=",Dec1 say
If say=6 Then
Print At 1,1," OTOPARK DOLU"
PORTD.2=0
PORTD.3=1

GoTo GIRIS

CIKIS:

If buton2=0 Then
say=say-1
While buton2=0:Wend
DelayMS 50
EndIf

Print At 2,1,"ARAC SAYISI=",Dec1 say
PORTD.2=1
PORTD.3=0
Else
EndIf

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 50
EndIf


Ete

Powered by EzPortal