Attiny 2313 diody LED + 3 przyciski (BASCOM)


Witam serdecznie
Mam mały problem z kodem poniżej, mianowicie są 3 przyciski i 10 diód.
Naciskam przycisk 1 włączają się kolejno diody od 1- 10 i tak samo gasna.
Naciskam przycisk 2 włączają sie kolejno diody od 10-1 i tak samo gasną.
Przycisk 3 raz naciśnięty włącza wszystkie diody od razu, drugi raz naciśnięty wyłącza wszystkie diody od razu.

Chciałbym zmodyfikować program tak żeby po naciśnięciu przycisku 3 i po zaświeceniu się wszystkich diód program żeby nie reagował na naciskanie przyciski 1 i 2 dopiero po naciśnięciu kolejny raz przycisku 3 i wyłączeniu wszystkich diód.

$regfile = "attiny2313.dat"
$crystal = 8000000
 
Ddrb = &B11111111 : Portb = &B00000000
Ddrd = &B11111000 : Portd = &B00000111
 
Dim X As Byte
Dim Y As Byte
 
 
Sw1 Alias Pind.0
Sw2 Alias Pind.1
Sw3 Alias Pind.2
 
 
Do
 
 
If Sw1 = 0 Then
Waitms 20
If Sw1 = 0 Then
 
 For X = 7 To 0 Step -1
 Portb.x = 1
 Waitms 300
 Next X
        For X = 6 To 5 Step -1
        Portd.x = 1
        Waitms 300
        Next X
 
 
 
                            For Y = 1 To 60
                            Waitms 200
                            Next X
 
 
 For X = 7 To 0 Step -1
 Portb.x = 0
 Waitms 300
 Next X
 
        For X = 6 To 5 Step -1
        Portd.x = 0
        Waitms 300
        Next X
 
 
 
  End If
     End If
 
If Sw2 = 0 Then
Waitms 20
If Sw2 = 0 Then
 
    For X = 5 To 6
    Portd.x = 1
    Waitms 300
    Next X
 
                     For X = 0 To 7
                     Portb.x = 1
                     Waitms 300
                     Next X
 
 
 
 
 
                                    For Y = 1 To 60
                                    Waitms 200
                                    Next Y
 
 
    For X = 5 To 6
    Portd.x = 0
    Waitms 300
    Next X
 
 
 
                    For X = 0 To 7
                    Portb.x = 0
                    Waitms 300
                    Next X
 
 
 
  End If
     End If
 
 
 
 
 
Debounce Sw3 , 0 , Wlacz , Sub
Loop
 
 
Wlacz:
Toggle Portb
Toggle Portd.6
Toggle Portd.5
 
Return
 
 
 
End

próbowałem jeszcze wstawić w miejsce przycisku sw3 coś takiego:

If Sw3 = 0 Then   ' jesli jest wcisniety
Waitms 20
If Sw3 = 0 Then    ' jesli nadal jest wcisniety
         Do                ' poczekaj az zostanie puszczony
         Loop Until Sw3 = 0
         Portb = 255    'wlacz caly port
 
 
         Do   ' poczekaj az zostanie ponownie wcisniety
         Loop Until Sw3 = 1
         Portb = 0 ' wykasuj caly port
 
       Do
      Loop Until Sw3=0 ' poczekaj az zostanie puszczony
 
End If
End If

..ale jak naciskam sw3 to zapalają się diody i jak puszczam przycisk to gasną.




Portret użytkownika mirley

Re: TIny

Co za konstrukcja z tymi loop until....

Wystarczy że po kliknięciu przycisku SW3 w procedurze włącz, dodasz jedną zmienną typu bit. która tez zmienia wartość.

Toggle Ena

a w obsłudze S1 i S2 np:

If Sw2 = 0 and ena = 1 Then
....

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika demsy1

Działa!!!

Jesteś wielki Mirku. Dziękuję za pomoc