Butona her basışta 1 adet lamba yakmak...

Başlatan solidus, 10 Temmuz 2008, 19:10:24

solidus

Merhaba Arkadaşlar,
ilişikteki devrede A,B,K,D anahtarları kapalı durumda iken butona her basışta sıra ileD1,D2,D3 ledlerinin yanmasını istiyorum Fakat kodun bu kısmına geldiğimde aklım karıştı. A,B,K,D anahtarlarının durumlarını gözleyebildiğim kod:
CMCON=7
TRISA=1
TRISB=0

'**********DEĞİŞKENLER*******
'**********BUTONLAR**********
DAIMI  VAR PORTA.0
KUYRUK VAR PORTA.1
BURUN  VAR PORTA.2
ARM    VAR PORTA.3
BUTON  VAR PORTA.4
'**********LAMBALAR**********
LED28  VAR PORTB.0
LEDARM VAR PORTB.1
LEDKUY VAR PORTB.2
LEDBRN VAR PORTB.3
TER3   VAR PORTB.4
TER2   VAR PORTB.5
TER1   VAR PORTB.6
i VAR BYTE
'****************************

BASLA:
IF DAIMI=1 THEN 
HIGH LED28
ELSE
LOW LED28
ENDIF

IF KUYRUK=1 THEN 
HIGH LEDKUY
ELSE
LOW LEDKUY 
ENDIF

IF BURUN=1 THEN 
HIGH LEDBRN
ELSE
LOW LEDBRN
ENDIF

IF ARM=1 THEN 
HIGH LEDARM
ELSE
LOW LEDARM
ENDIF

GOTO BASLA

END

Ve devre:
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

Maxim

ben birşeyler yaptım ama kontrol etmedim ,
hata olabilir ..

butona basma sırasında " while - wend " komutunu kullanmak lazım ,unutmadan ,yoksa butona bastıkça ledler sırayla yanacakdır .

SAY =0

LOOP :

If A=0 And B=0 And K=0 And D=0 Then
If BUTON = 1 Then
DelayMS 100
SAY = SAY +1
EndIf
EndIf

If SAY=1 Then
D1 =1
D2 =0
D3 =0
EndIf

If SAY=2 Then
D2 =1
D1 =0
D3 =0
EndIf

If SAY=3 Then
D3 =1
D1 =0
D2 =0
EndIf

If SAY>3 Then SAY=0
GoTo LOOP

Maxim

özetlemek gerekirse ,
eğer A,B,K ve D switchleri kapalıysa ve eğer bu sırada biri butona basarsa ,100ms bekle ve say değerini 1 arttır ,
eğer say değeri 1 ise D1 ledini ,
eğer say değeri 2 ise D2 ledini ,
eğer say değeri 3 ise D3 ledini yak ,

say değeri 3 ten büyükse onu 0 yap .

solidus

@maxiboost,
Kodların tamamını aşağıdaki gibi değiştirdim..
i=0
BASLA:
IF DAIMI=1 THEN 
HIGH LED28
ELSE
LOW LED28
ENDIF

IF KUYRUK=1 THEN 
HIGH LEDKUY
ELSE
LOW LEDKUY 
ENDIF

IF BURUN=1 THEN 
HIGH LEDBRN
ELSE
LOW LEDBRN
ENDIF

IF ARM=1 THEN 
HIGH LEDARM
ELSE
LOW LEDARM
ENDIF
 

BMB: 

If ARM=1 And (BURUN=1 OR KUYRUK=1) And DAIMI=1 Then 
IF BUTON = 1 THEN
PAUSE 100 
i = i +1
ENDIF 
EndIf 
WHILE BUTON=1 

If i=1 Then 
TER1 =1 
TER2 =0 
TER3 =0 
EndIf 

If i=2 Then 
TER1 =1
TER2 =1 
TER3 =0 
EndIf 

If i=3 Then 
TER1 =1 
TER2 =1
TER3 =1 
EndIf 

If i>3 Then i=0 
WEND
GOTO BASLA

END



*****Sorun Çözülmüştür ilgilerinize çok teşekkürler...
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..