Mam sobie niżej pokazany programik w bascomie ale niestety nie wiem jak dopisać obsługę pilota
Programik jest na 89c4051
Kto by był dobry i dopisał pilota ?
Programik jest na 89c4051
$large
Config Lcd = 16 * 2
Config Timer1 = Timer , Gate = Internal , Mode = 1
Config Sda = P3.1
Config Scl = P3.0
Dim Licz As Byte
Dim I As Byte
Dim Nast(5) As Byte
Dim St As String * 7
Dim W_reg As Integer
Dim Wielk1 As Byte
Dim Wielk2 As Byte
Dim X As Byte
Dim Value As Byte
Dim Adres As Byte
Dim S As Byte
Dim We As Bit
Dim A As Byte
Dim C As Byte
Dim Flaga1 As Bit
Dim Kod As Byte
Dim Vp As Byte
Dim Vl As Byte
Dim Xxx As Byte
Deflcdchar 0 , 1 , 2 , 2 , 4 , 4 , 2 , 2 , 1
Deflcdchar 1 , 5 , 10 , 18 , 20 , 20 , 18 , 10 , 5
Deflcdchar 2 , 16 , 8 , 8 , 4 , 4 , 8 , 8 , 16
Deflcdchar 3 , 20 , 10 , 9 , 5 , 5 , 9 , 10 , 20
S1 Alias P3.7
S2 Alias P3.5
S3 Alias P3.4
Declare Sub Zmien()
Declare Sub Regul
Declare Sub Wys(st As String * 8)
Declare Sub Przedz
Declare Sub Wyslij(kod As Byte , Adres As Byte , Value As Byte)
Declare Sub Warunk(a As Byte , C As Byte)
Declare Sub Read_i(adres As Byte , Value As Byte)
Declare Sub Up
Declare Sub Down
Declare Sub Wejscie
On Timer1 Timer1_int
On Int1 Mute
Enable Int1
Enable Timer1
Enable Interrupts
'Poczatek programu
Cursor Off Noblink
Counter1 = 4150
Licz = 0
Cls
Lcd "** Ver. 1.00 **"
Wait 2
Cls
Set S1
Set S2
Set S3
Set P3.2
Set P3.3
Call Read_i 15 , Value ' odczyt danych z eeprom
If Value = 60 Then
Call Read_i 2 , Value
Nast(1) = Value
Call Read_i 3 , Value
Nast(2) = Value
Call Read_i 5 , Value
Nast(3) = Value
Call Read_i 6 , Value
Nast(5) = Value
Call Read_i 8 , Value
S = Value
Else 'jezeli brak pamieci to ponizsze parametry zmiennych
Nast(1) = 6 'bass
Nast(2) = 6 'treble
Nast(3) = 10 'baland
Nast(4) = 1 'efekty
Nast(5) = 40 'volume
S = &B11001110
End If
Nast(4) = S And &B00011000 ' odpowiednie ustawienie rodzaju efektu
Rotate Nast(4) , Right , 3
Vl = 0 ' odpowiednie ustawienia balansu
Vp = 0
If Nast(3) >= 10 Then
Vp = Nast(3) - 10
Else
Vl = 10 - Nast(3)
End If
I = 5
Call Zmien ' wywolanie procedury wpisujacej dane do eeprom i procesora dzwieku
Counter1 = 4150
Do 'petla glowna programu
While S.5 = 1 ' jezeli s.5=1 to wyswietl mute
Lcd "MUTE"
Wend
Waitms 220
If S1 = 0 Then ' przycisk mode
Incr I
If I = 6 Then
I = 1
End If
Call Zmien
Bitwait S1 , Set
End If
If S3 = 0 Then 'przycisk down
Decr Nast(i)
Call Zmien
End If
If S2 = 0 Then ' przycisk up
Incr Nast(i)
Call Zmien
End If
If P3.2 = 0 Then ' przycisk wejscie
Call Wejscie
Bitwait P3.2 , Set
End If
Loop
End
Sub Zmien
If I <> 5 Then
Licz = 0
Start Timer1 ' uruchamia timer
End If
Cls
We = S.0
Wielk2 = 1
If I = 1 Then ' bass
Wielk1 = 12
Call Przedz
Call Wys( "Bass:")
Call Przelicz
Call Regul
Elseif I = 2 Then ' treble
Wielk1 = 11
Call Przedz
Call Wys( "Treble:")
Call Przelicz
Call Regul
Elseif I = 3 Then ' balans
Vl = 0
Vp = 0
Wielk1 = 20
Wielk2 = 0
Call Przedz
Call Wys( "Balans:")
If Nast(3) >= 10 Then
Vp = Nast(3) - 10
Else
Vl = 10 - Nast(3)
End If
Lowerline
Lcd " " : Lcd Vl : Lcd "-" : Lcd Vp
Elseif I = 4 Then ' effect
Wielk1 = 4
Wielk2 = 255
Call Przedz
Call Wys( "Effect:")
Waitms 50
Lowerline
If Nast(4) = 0 Then
Lcd "Mono"
Reset S.3
Reset S.4
Elseif Nast(4) = 1 Then
Lcd "Liniowe St"
Reset S.4
Set S.3
Elseif Nast(4) = 2 Then
Lcd "Pseud St"
Set S.4
Reset S.3
Elseif Nast(4) = 3 Then
Lcd "Przest St"
Set S.3
Set S.4
End If
Elseif I = 5 Then ' volume
Wielk1 = 64
Stop Timer1 ' zatrzymanie timera
Counter1 = 4150
Call Warunk(21 , 28)
Call Warunk(27 , 20)
Call Warunk(19 , 20)
Call Przedz
Call Wys( "Volume:")
Call Przelicz
W_reg = Nast(5) - 60 ' przelicza wartosci binarne na odpowiadajace im wartosci dB
W_reg = W_reg * 2
Locate 2 , 1 : Lcd "Input: " : Lcd We : Lcd " "
If Nast(4) = 0 Then
Lcd Chr(0) : Lcd Chr(2)
Elseif Nast(4) = 1 Then
Lcd Chr(1) : Lcd Chr(3)
Elseif Nast(4) = 2 Then
Lcd "-" : Lcd Chr(1) : Lcd Chr(3) : Lcd "-"
Elseif Nast(4) = 3 Then
Lcd "+" : Lcd Chr(1) : Lcd Chr(3) : Lcd "+"
End If
Call Regul
End If
W_reg = Nast(5) - 27 ' obliczanie odpowiednio balansu
If Vl = 9 Then
A = 0
Else
A = 10 - Vl
End If
W_reg = W_reg * A
Xxx = W_reg / 10
A = Xxx + 27
W_reg = Nast(5) - 27
If Vp = 9 Then
C = 0
Else
C = 10 - Vp
End If
W_reg = W_reg * C
Xxx = W_reg / 10
C = Xxx + 27
For Kod = 130 To 160 Step 30 ' zapis danych do pamieci i procesora dzwieku
Call Wyslij Kod , 2 , Nast(1)
Call Wyslij Kod , 3 , Nast(2)
Call Wyslij Kod , 0 , C
Call Wyslij Kod , 1 , A
Call Wyslij Kod , 8 , S
Next Kod
Call Wyslij 160 , 5 , Nast(3)
Call Wyslij 160 , 6 , Nast(5)
Call Wyslij 160 , 15 , 60
End Sub
Sub Wys (st As String * 8) ' wyswietla na wyswietlaczu zmienna st
Cls
Lcd St
End Sub
Sub Regul ' dba o odpowiednie wyswietlanie ujemnych i dodatnich liczb
If W_reg < -9 Then
X = 12
Elseif W_reg < 0 Then
X = 13
Elseif W_reg > 9 Then
X = 13
Elseif W_reg >= 0 Then
X = 14
End If
Locate 1 , X : Lcd W_reg : Lcd "dB"
End Sub
Sub Przelicz ' przelicza wartosci binarne bass i treble na odpow. im wart. w dB
W_reg = Makedec(w_reg)
If I = 1 Or I = 2 Then
W_reg = Nast(i) * 3
W_reg = W_reg - 18
End If
End Sub
Sub Przedz ' okresla zakresy wyswietlanych liczb
If Nast(i) = Wielk1 Then
Nast(i) = Nast(i) - 1
End If
If Nast(i) = Wielk2 Then
Nast(i) = Wielk2 + 1
End If
End Sub
Sub Warunk(a As Byte , C As Byte ) ' warunek dba o wyswietlanie odpowiednich wartosci glosnosci
If Nast(i) = A Then
Nast(i) = C
End If
End Sub
Sub Wejscie ' przelacza wejscia 0 na 1 i odwrotnie
If S.0 = 1 Then
Reset S.0
Else
Set S.0
End If
Call Zmien
End Sub
Mute: ' przerwanie funkcji mute
If S.5 = 0 Then
Set S.5
Else
Reset S.5
End If
Call Zmien
Bitwait P3.3 , Set
Waitms 250
Return
Sub Wyslij (kod As Byte , Adres As Byte , Value As Byte) ' wysyla dane przez i2c
I2cstart
I2cwbyte Kod
I2cwbyte Adres
I2cwbyte Value
I2cstop
Waitms 10
End Sub
Sub Read_i(adres As Byte , Value As Byte) ' odbiera dane i2c
I2cstart
I2cwbyte 160
I2cwbyte Adres
I2cstart
I2cwbyte 161
I2crbyte Value , 9
I2cstop
End Sub
Timer1_int: ' dba o odpowiednie odliczenie czasu po ostatnim nacisnieciu przycisku
Counter1 = 4150
If Licz = 75 Then
I = 5
Call Zmien
End If
Incr Licz
Start Timer1
Return
Kto by był dobry i dopisał pilota ?