logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[at2313][bascom]Program sterownika rgb

szaryjelen 12 Mar 2010 17:58 1822 5
REKLAMA
  • #1 7819657
    szaryjelen
    Poziom 11  
    Witam!
    Niedawno zacząłem się uczyć bascoma. Jako pierwszą poprzeczkę postawiłem sobie napisać zupełnie sam sterownik do lampki rgb.
    Długo analizowałem kody innych sterowników (np. na stronie mirley.firley.org)
    W końcu udało mi się zrozumieć i napisałem program wykorzystujący metody kolegów, lecz został zaprojektowany "od podstaw".
    Gdyby ktoś mógł sprawdzić kod i go skomentować ( optymalizacja, błędy, uwagi) to byłbym wdzięczny.
    Program co prawda się kompiluje ale wiadomo, że w praktyce może być inaczej.
    Z góry dziękuję i pozdrawiam!
    
    $regfile "2313def.dat"
    $crystal = 1600000
    
    Config Portb = Output
    Config Portd = &B11110000
    
    Portb = &B11111111
    Portd = &B11111111
    
    Config Timer0 = Timer , Prescale = 8
    Enable Timer0
    On Timer0 Przerwanie
    Enable Interrupts
    
    Pr Alias Pinb.0
    Pb Alias Pinb.1
    Pg Alias Pinb.2
    Wlacz Alias Pind.0
    Guzik Alias Pind.1
    
    Dim B As Byte
    Dim G As Byte
    Dim R As Byte
    Dim N As Byte
    Dim Rr As Byte
    Dim Rg As Byte
    Dim Rb As Byte
    Dim Flaga As Bit
    Dim Ani As Bit
    Dim Licznik As Byte
    Dim Ls As Integer
    Dim Szybkosc As Integer
    
    B = 100
    G = 100
    R = 100
    Licznik = 0
    Szybkosc = 1000
    Ls = 0
    
    
    Do
    Do
    Loop Until Wlacz = 0
    Do
       If Flaga = 1 Then
          Flaga = 0
    
          If Ani = 1 Then
             Select Case N
                Case 1:
                   Decr R
                   Decr B
                   If B = 0 Then
                   N = 2
                   Wait 4
                   End If
                Case 2:
                   Incr B
                   If B = 100 Then
                   N = 3
                   Wait 4
                   End If
                Case 3
                   Decr G
                   If G = 0 Then
                   N = 4
                   Wait 4
                   End If
                Case 4:
                   Incr R
                   If R = 100 Then
                   N = 5
                   Wait 4
                   End If
                Case 5:
                   Decr B
                   If B = 0 Then
                   N = 6
                   Wait 4
                   End If
                Case 6:
                   Incr G
                   If G = 100 Then
                   N = 7
                   Wait 4
                   End If
                Case 7:
                   Decr R
                   Incr B
                   If B = 50 Then
                   N = 8
                   Wait 4
                   End If
                Case 8:
                   Decr G
                   Incr B
                   If B = 100 Then
                   N = 9
                   Wait 4
                   End If
                Case 9:
                   Decr B
                   Incr R
                   If B = 50 Then
                   N = 10
                   Wait 4
                   End If
                Case 10:
                   Incr B
                   If B = 100 Then
                   N = 11
                   Wait 4
                   End If
                Case 11:
                   Decr R
                   Incr G
                   If G = 75 Then
                   N = 12
                   Wait 4
                   End If
                Case 12:
                   Decr G
                   If G = 25 Then
                   N = 13
                   Wait 4
                   End If
                Case 13:
                   Incr R
                   Decr B
                   If R = 100 Then
                   N = 14
                   Wait 4
                   End If
                Case 14:
                   Incr G
                   Decr B
                   If B = 25 Then
                   N = 15
                   Wait 4
                   End If
                Case 15:
                   Decr R
                   Incr G
                   If G = 100 Then
                   N = 16
                   Wait 4
                   End If
                Case 16:
                   Decr R
                   Incr B
                   If B = 75 Then
                   N = 17
                   Wait 4
                   End If
                Case 17:
                   Incr R
                   If R = 75 Then
                   N = 18
                   Wait 4
                   End If
                Case 18:
                   Incr R
                   Incr B
                   If B = 100 Then
                   N = 1
                   Wait 4
                   End If
             End Select
    
          Elseif Ani = 0 Then
    
             Rr = Rnd(101)
    
    
             Rg = Rnd(101)
    
             Rb = Rnd(101)
    
             If R > Rr Then
                Do
                Decr R
                Loop Until R = Rr
             Elseif R < Rr Then
                Do
                Incr R
                Loop Until R = Rr
             End If
    
    
             If G > Rg Then
                Do
                Decr G
                Loop Until G = Rg
             Elseif G < Rg Then
                Do
                Incr G
                Loop Until G = Rg
             End If
    
    
             If B > Rb Then
                Do
                Decr B
                Loop Until B = Rb
             Elseif B < Rb Then
                Do
                Incr B
                Loop Until B = Rb
             End If
    
          End If
    
       End If
    
    Loop Until Wlacz = 0
    
    Loop
    
    
    Przerwanie:
    
    Incr Licznik
    
    If Licznik < R Then
    Set Pr
    Else
    Reset Pr
    End If
    
    If Licznik < G Then
    Set Pg
    Else
    Reset Pg
    End If
    
    If Licznik < B Then
    Set Pb
    Else
    Reset Pb
    End If
    
    If Licznik = 255 Then Licznik = 0
    
    Incr Ls
    If Ls > Szybkosc Then
    Flaga = 1
    Ls = 0
    End If
    
    If Guzik = 0 Then Toggle Ani
    
    If Pind.2 = 0 Then
    Szybkosc = Szybkosc - 100
       If Szybkosc < 100 Then Szybkosc = 100
    End If
    
    If Pind.3 = 0 Then
    Szybkosc = Szybkosc + 100
       If Szybkosc > 1600 Then Szybkosc = 1600
    End If
    
    Return
    
    
  • REKLAMA
  • #2 7822915
    Mr.Darooo
    Poziom 14  
    nie wczytywałem się w program więc go raczej jeszcze nie skomentuje...

    spróbuję to "ugryźć" z innej strony... :) dałeś do zrozumienia, że nie masz dostępu do programatora i procka (miał byś jak na dłoni czy działa czy nie :) ) ... mam racje?
  • REKLAMA
  • #3 7823295
    szaryjelen
    Poziom 11  
    No właśnie walczę z programatorem :/
  • REKLAMA
  • #4 7823768
    Mr.Darooo
    Poziom 14  
    żaden problem... myślałeś o jakimś symulatorze? :D

    np. Proteus 7.6

    montujesz procesor, diody, (i inne) wgrywasz programik i działasz ... :)
  • REKLAMA
  • #6 7824093
    szaryjelen
    Poziom 11  
    Whoa, dzięki landy13
REKLAMA