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!
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