'TDA7439 - 15 listopad 20018 kulamario@yahoo.ie
'dodany pilot
'volume up/down
'ON/OFF z pilota i guzika
'Mute
'Funkcje dodane caly pilot zrobiony 20/11/2018
'--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$regfile = "m16def.dat"
$crystal = 8000000 '11059200
$swstack = 64
$hwstack = 64
$framesize = 200
$include "Config_PCF8583.bas"
Config Portc.5 = Output : Relay Alias Portc.5 : Set Relay
Config Submode = New
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.1 , Db6 = Portd.7 , Db7 = Portd.0 , E = Portd.5 , Rs = Portd.6 'PCB
Config Lcd = 16x2
'Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0 'ZL3AVR
'Config Lcd = 20x4
Initlcd
Cursor Off
'Waitms 1000
'Variable for Data to TDA7439
'----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' konfiguracja RC5
Config Rc5 = Pinc.3 , Timer = 2 , Wait = 250
'Config Rc5 = Pinc.3 , Timer = 2
Dim Address As Byte , Command As Byte
'------------------------------------------------------------------
Dim Second As Byte
Dim Minute As Byte
Dim Hour As Byte
Dim Day As Byte
Dim Month As Byte
Dim Year As Word
Dim Weekday As Byte
Dim Blad As Byte
Dim Ilosc_dni As Byte
Dim Rok_przestepny As Byte
' pocz¹tkowe wartoœci
Second = 0 ' 00:00:00
Minute = 0
Hour = 0
Day = 1 ' 01.01.2000
Month = 1
Year = 2000
Weekday = 6 ' sobota
'---------------------------------------------------------------------------------------------------------------------------------------------
Declare Sub Memory_on_off()
Declare Sub Pwr_on()
Declare Sub Pwr_off()
Dim Pwr As Bit
Pwr = 1
dim Mute_func as byte
'Mute_func =0
Dim Input_value_ee As Eram Byte
Dim Input_gain_value_ee As Eram Byte
Dim Volume_value_ee As Eram Byte
Dim Bass_tone_value_ee As Eram Byte
Dim Middle_tone_value_ee As Eram Byte
Dim Heigh_tone_value_ee As Eram Byte
Dim Balance_r_ee As Eram Byte
Dim Balance_l_ee As Eram Byte
Dim Myval As Byte , Ee_default As Eram Byte
Myval = Ee_default
If Myval <> 0 Then
Ee_default = 0
Input_value_ee = 0
Input_gain_value_ee = 2
Volume_value_ee = 45
Bass_tone_value_ee = 9
Middle_tone_value_ee = 7
Heigh_tone_value_ee = 9
Balance_r_ee = 0
Balance_r_ee = 0
End If
'----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Dim Input_value As Byte 'Zmienna dla multipleksera wejsciowego
Dim Input_gain_value As Byte 'Zmienna dla poziom wejscia
Dim Volume_value As Byte 'Zmienna dla Volume
Dim Bass_tone_value As Byte 'Zmienna dla Bas
Dim Middle_tone_value As Byte 'Zmienna dla tony srodek
Dim Heigh_tone_value As Byte 'Zmienna dla tony wysokie
Dim Limit_value_max As Byte 'Zmienna wartosci graniczna w gore
Dim Limit_value_min As Byte 'Zmienna wartosci graniczna w dól
Dim Balance_r As Byte 'Zmienna dla Balans R
Dim Balance_l As Byte 'Zmienna dla Balans L
Dim Value As Byte 'Wartosc zapisana w rejestrze
Dim Adres_tda7439 As Byte 'Adres i2c TDA
Dim Register As Byte 'Zdefiniuj rejestr, w którym zapisano wartosc
Dim Press_button As Byte 'Zmienna do okreslenia nacisniecia klawisza, a tym samym mozliwosc wprowadzenia róznych ustawien
Dim Functional_value As Byte 'Zmienna jest zdefiniowana dla wszystkich zmiennych poszczególnych ustawien
Dim Held_var As Bit 'Zmienna wyswietla sie po nacisnieciu przycisku
Dim Encoder_a As Bit 'Zmienna wskazuje, czy przycisk zostal nacisniety
Dim Encoder_b As Bit 'Zmienna pokazuje, czy przycisk zostal nacisniety
Dim Button As Bit 'Zmienna do okreslenia, czy nacisnieto przycisk wyboru
Dim Tmpin As Byte
Dim Count As Word
Dim Tmp_1 As Byte , Tmp_2 As Byte , Db As String * 5 , Tone As String * 6 , Vol_out As String * 7
Dim Tone1 As Byte
Dim Tone11 As Byte 'Tone11 to jest napis z bufora right,left
Deflcdchar 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 32
Deflcdchar 2 , 32 , 14 , 14 , 14 , 14 , 14 , 32 , 32
Deflcdchar 3 , 4 , 14 , 14 , 14 , 14 , 14 , 4 , 32
Deflcdchar 4 , 32 , 32 , 32 , 21 , 32 , 32 , 32 , 32
Deflcdchar 5 , 6 , 14 , 30 , 30 , 30 , 14 , 6 , 32
Declare Sub Bar_vol(byval Vol_out As String , Byval Vol_val As Byte , Byval Sel As Byte) 'bargraf od volume
Declare Sub Bar_balans(byval Tone11 As String , Byval Tmp_11 As Byte) 'bargraf od balansu
Declare Sub Bargraph_settings(byval Tone As String , Byval Tmp_1 As Byte) 'bargraf od ustawien tonow
Declare Sub Settings_tda7439()
Declare Sub Mute()
Declare Sub Selection()
Declare Sub Balance_left()
Declare Sub Balance_right()
Declare Sub Select_input()
Declare Sub Change_settings()
Declare Sub Setting_function()
Declare Sub High_tones()
Declare Sub Inputgain()
Declare Sub Volume()
Declare Sub Bass()
Declare Sub Middle_tones()
Declare Sub Button_test()
Declare Sub Transfer()
Declare Sub Main()
Declare Sub Lcd_init()
Declare Sub Tin(byval Tin_val As Byte)
declare sub Displaytime()
'Ports I2C ATMEGA
'4K7 pullup SCL & SDA
Config Scl = Portc.0
Config Sda = Portc.1
Config I2cdelay = 20
'Zdefiniuj dla przycisków sterujacych i zdefiniuj je jako wejscia
Dim Sw_cnt As Byte , Lock As Byte
Config Pind.2 = Input : Portd.2 = 1 'Encoder A
Config Pind.3 = Input : Portd.3 = 1 'Encoder B
Config Pinc.2 = Input : Portc.2 = 1 : Switch Alias Pinc.2 'switch
Config Pinb.0 = Input : Portb.0 = 1 : on_off Alias Pinb.0 'switch on/off
Config Debounce = 50
'---------------------------------------------------------------------------------
On Int0 Int0_isr
Enable Int0
Config Int0 = Falling
Enable Interrupts
'Standart Register
Call Settings_tda7439()
Press_button = 1 'Ustaw przycisk, aby ustawic domyslny
Cls
Locate 1 , 1
Lcd " System TDA7439 "
Locate 2 , 1
Lcd "Wait a moment..."
Waitms 1500
Cls
Display Off
'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja aby sprawdzic stan przycisków
Call Select_input
'Call Volume
Display On
Blad = Pcf8583_storetime(second , Minute , Hour , Day , Month , Year) ' zapis do Pcf8583
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja do sprawdzania, czy zostal nacisniety przycisk
Sub Button_test()
Encoder_a = 0
Encoder_b = 0
Button = 0
If Tifr.ocf2 = 1 Then 'minê³o 10ms, flagê ustawia Timer
Tifr.ocf2 = 1 'flagi kasuje siê wpisuj¹c jeden, nie zero
If Switch = 0 Then 'jeœli wciœniêto przycisk
If Lock = 0 Then 'a jeszcze nie ma blokady
If Sw_cnt < 50 Then 'tu jesteœmy co 10ms i jeœli jeszcze nie osi¹gneliœmy granicy
Incr Sw_cnt 'to dodajemy do licznika Sw_cnt
Else 'jeœ³i granica osi¹gniêta
Lock = 1 'zablokuj dodawanie a¿ do puszczenia przycisku
Call Memory_on_off()
'->tu dajemy to co ma sie dziac po dlugim nacisnieciu
End If
End If
Else 'kiedy zwalniamy przycisk
If Lock = 0 Then 'a nie by³o to d³ugie wciœniêcie
If Sw_cnt > 3 Or Command = 82 Then Call Selection 'sprawdŸ czy to nie drganie styków 3x10ms = 30ms
End If '->zmieñ stan pierwszej diody
Lock = 0 : Sw_cnt = 0 'wy³¹cz blokadê i zeruj licznik
End If
End If
End Sub
'---------------------------------------------------------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------------------------------------------------------
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja do zmiany ustawien Bass Treble Middle itp.
Sub Change_settings()
If Button = 1 Then
Count = 0
If Press_button > 8 Then
Press_button = 1 'Po dotarciu na koniec, nacisnij klawisz resetowania
End If
End If
Select Case Press_button 'Przy pewnym stanie opcji wywolywania klawiatury
Case 1 : Call Volume
Case 2 : Call Select_input
Case 3 : Call Inputgain
Case 4 : Call Bass
Case 5 : Call Middle_tones
Case 6 : Call High_tones
Case 7 : Call Balance_right
Case 8 : Call Balance_left
End Select
Button = 0 'Zresetuj przycisk wyboru
Waitms 80
End Sub
'///////////////////////////////////////////////////////////////////////////////
'Funkcja wspólna dla wszystkich ustawien
Sub Setting_function()
If Encoder_a = 1 Or Command = 17 or command = 86 Then 'Sprawdz enkoder
If Functional_value < Limit_value_max Then 'Zapobiegaj przepelnieniu
Functional_value = Functional_value + 1 'Zwieksz wartosc funkcji o 1
Call Transfer 'Funkcja do transferu
End If
End If
If Encoder_b = 1 Or Command = 16 or command = 85 Then
If Functional_value > Limit_value_min Then
Functional_value = Functional_value - 1
Call Transfer
End If
End If
Select Case Press_button 'Przy pewnym stanie opcji wywolywania klawiatury
Case 1 : Volume_value_ee = Functional_value
Case 2 : Input_value_ee = Functional_value
Case 3 : Input_gain_value_ee = Functional_value
Case 4 : Bass_tone_value_ee = Functional_value
Case 5 : Middle_tone_value_ee = Functional_value
Case 6 : Heigh_tone_value_ee = Functional_value
Case 7 : Balance_r_ee = Functional_value
Case 8 : Balance_l_ee = Functional_value
End Select
End Sub
'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja dla multipleksera wejsciowego
Sub Select_input()
'Set In_shift
If Held_var = 0 Then 'Zapobiec po prostu zmianie wejsc poprzez przytrzymanie klawiszy
Limit_value_max = 3 'Zapobiegaj przepelnieniu
Limit_value_min = 0
Register = &B00000000 'Wybierz rejestry dla multipleksera wejsciowego
Functional_value = Input_value ' Wartosc funkcji jest przypisana do ustawien wejsc
Call Setting_function
Input_value = Functional_value
Tmpin = Input_value + 1 'Stara zmienna zostanie zastapiona nowa wartoscia
Cls
Locate 1 , 6
Lcd "INPUT"
Locate 2 , 1
Select Case Input_value
Case 3 : Lcd " CD"
Case 2 : Lcd " FM"
Case 1 : Lcd " USB DAC"
Case 0 : Lcd " PHONE"
End Select
Waitms 300
End If
End Sub
'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja do ustawiania czulosci wejsciowej
Sub Inputgain()
Local Tmpa As Byte
Limit_value_max = 15 'Ogranicz wzmocnienie wejsciowe do 30 db
Limit_value_min = 0
Register = &B00000001 'Wybierz rejestr dla regulacji czulosci
Functional_value = Input_gain_value 'Wartosci funkcji przypisuje sie wejsciowa wartosc wzmocnienia
Call Setting_function
Input_gain_value = Functional_value
Tmpa = Input_gain_value * 2
Call Tin(input_gain_value)
End Sub
'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja do zmiany glosnosci
Sub Volume()
Local S_1 As String * 7
Local Vol_value As Byte
Limit_value_max = 49 'volume jest ograniczony do góry
Limit_value_min = 0
Register = &B00000010 'Wybierz rejestr dla glosnosci
Functional_value = Volume_value
Call Setting_function
Volume_value = Functional_value
Select Case Input_value
Case 3 : S_1 = "CD"
Case 2 : S_1 = "FM"
Case 1 : S_1 = "USB DAC"
Case 0 : S_1 = "PHONE"
End Select
Vol_value = Volume_value - 50
Vol_value = Not Vol_value
Call Bar_vol(s_1 , Vol_value , 1)
'writeeeprom Volume_value , 2
'-------------------------------------------------------------------------------------------------------------------------------------
'blad= Pcf8583_gettime() ' odczytaj godzinê i date z uk³adu PCF8583 , funkcja zwraca kod b³êdu
' If Blad = 2 Then ' je¿eli uszkodzona data
' Locate 1 , 1 : Lcd " USTAW ZEGAR! " ' wyœwietl komunikat
' Locate 2 , 1 : Lcd Spc(16)
' sprawdzanie PCF8583
' Elseif Blad = 1 Then ' je¿eli b³¹d magistrali I2C
' Locate 1 , 1 : Lcd "B{003}{001}d:" ' wyœwietl komunikat
' Lcd Spc(11)
' Locate 2 , 1 : Lcd "magistrala I2C "
' Elseif Blad = 0 Then ' je¿eli prawid³owo odczytane dane
' Call Displaytime() ' wyœwietl zegar
'end if
'-------------------------------------------------------------------------------------------------------------------------------------
End Sub
'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja basów
Sub Bass()
Local Tmpa As String * 6
Limit_value_max = 14
Limit_value_min = 0
Register = &B00000011 'Wybierz rejestr dla bass
Functional_value = Bass_tone_value
Tone1 = 1
Call Setting_function
Bass_tone_value = Functional_value
Call Bargraph_settings( "BASS" , Bass_tone_value)
End Sub
'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja srodkowych tonow
Sub Middle_tones()
Local Tmpa As String * 6
Limit_value_max = 14
Limit_value_min = 0
Register = &B00000100
Functional_value = Middle_tone_value 'Wybierz rejestr dla tonow srednich
Tone1 = 1
Call Setting_function
Middle_tone_value = Functional_value
Call Bargraph_settings( "MIDDLE" , Middle_tone_value )
End Sub
'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja wysokich tonow
Sub High_tones() 'NOP
Local Tmpa As String * 6
Limit_value_max = 14
Limit_value_min = 0
Register = &B00000101 'Wybierz rejestr dla tonow wysokich
Functional_value = Heigh_tone_value
Tone1 = 1
Call Setting_function
Heigh_tone_value = Functional_value
Call Bargraph_settings( "TREBLE" , Heigh_tone_value)
End Sub
'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja do regulacji balansu prawego kanalu
Sub Balance_right()
Local Tmpa As String * 7
Limit_value_max = 79 'ograniczyc do -79db
Limit_value_min = 0
Register = &B00000110
Functional_value = Balance_r
Tone11 = 1 'Tone11 to jest napis z bufora right,left
Call Setting_function
Balance_r = Functional_value
Call Bar_balans( "RIGHT " , Balance_r )
'Cls
' Locate 1 , 1
' Lcd "BALANCE R " '; Tmpin ; " "
' Locate 2 , 1
' Lcd Balance_R ; " "
End Sub
'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja do regulacji balansu lewego kanalu
Sub Balance_left()
Local Tmpa As String * 7
Limit_value_max = 79 'ograniczyc do -79db
Limit_value_min = 0
Register = &B00000111
Functional_value = Balance_l
Tone11 = 1 'Tone11 to jest napis z bufora right,left
Call Setting_function
Balance_l = Functional_value
Call Bar_balans( "LEFT " , Balance_l )
' Cls
' Locate 1 , 1
' Lcd "BALANCE L " ' ; Tmpin ; " "
' Locate 2 , 1
' Lcd Balance_L ; " "
End Sub
'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja rozpoznawana po nacisnieciu przycisku wyboru
Sub Selection()
Button = 1
Incr Press_button
Call Change_settings
Waitms 200
End Sub
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'Funkcja do przesylania danych do TDA
Sub Transfer()
Value = Functional_value 'Wartosc funkcji jest zapisywana do zmiennej wyjsciowej 'Led ein
If Tone1 = 1 Then
Tone1 = 0
Select Case Value
Case 0 : Value = 0
Case 1 : Value = 1
Case 2 : Value = 2
Case 3 : Value = 3
Case 4 : Value = 4
Case 5 : Value = 5
Case 6 : Value = 6
Case 7 : Value = 7
Case 8 : Value = 15
Case 9 : Value = 14
Case 10 : Value = 13
Case 11 : Value = 12
Case 12 : Value = 11
Case 13 : Value = 10
Case 14 : Value = 9
Case 15 : Value = 8
End Select
End If
I2cstart 'Rozpocznij wysylanie
If Err = 0 Then
I2cwbyte Adres_tda7439 'Wyslij na adres TDA
If Err = 0 Then
I2cwbyte Register 'Wybierz rejestr
I2cwbyte Value 'Zapisz wartosc w rejestrze
I2cstop ' Stop
End If
End If
Waitms 20
End Sub
'--------------------------------------------------------------------------------------------------------------------------------------------------------------------
'--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sub Pwr_on()
start watchdog
Waitms 100
stop watchdog
End Sub
'------------------------------------------------------------------------------------------------------------------------------------------
Sub Pwr_off()
Cls
Locate 1 , 1
Lcd " System OFF "
Waitms 1000
Display Off
Reset Relay
Ddrd = &B00000000
End Sub
'-------------------------------------------------------------------------------------------------------------------------------------------
Sub Memory_on_off()
Pwr = Not Pwr
If Pwr = 1 Then
Call Pwr_on()
Else
Call Pwr_off()
End If
End Sub
'------------------------------------------------------------------------------------------------------------------------------------------
Sub Settings_tda7439()
Adres_tda7439 = &H88 'adres chipa urzadzenia TDA7439
Register = &B00000000 'Wybierz rejestr wejsciowy
Input_value = Input_value_ee 'Wybierz wejscie 1
Functional_value = Input_value 'Wartosc poczatkowa rejestru multipleksera wejsciowego jest przypisana do wartosci funkcji
Call Transfer 'Funkcja wywolania dla transferu danych
Adres_tda7439 = &H88 'adres chipa urzadzenia TDA7439
Register = &B00000001 'Podadres rejestru kontroli wzmocnienia wejscia
Input_gain_value = Input_gain_value_ee
Functional_value = Input_gain_value 'Wybierz wzmocnienie wejscia (20db)
Call Transfer 'Funkcja wywolania dla transferu danych
Adres_tda7439 = &H88
Register = &B00000010
Volume_value = Volume_value_ee
'readeeprom Volume_value , 2
Functional_value = Volume_value 'Ustaw glosnosc na -10db
Call Transfer 'Funkcja wywolania dla transferu danych
Adres_tda7439 = &H88
Register = &B00000011 'Rejestr Bass
Bass_tone_value = Bass_tone_value_ee 'Wybierz Bass 0db
Functional_value = Bass_tone_value
Call Transfer 'Funkcja wywolania dla transferu danych
Adres_tda7439 = &H88
Register = &B00000100 'Rejestr srodek
Middle_tone_value = Middle_tone_value_ee 'srodek 0db
Functional_value = Middle_tone_value
Call Transfer 'Funkcja wywolania dla transferu danych
Adres_tda7439 = &H88
Register = &B00000101 'Rejestr wysokie tony
Heigh_tone_value = Heigh_tone_value_ee 'wysokie tony 0db
Functional_value = Heigh_tone_value
Call Transfer 'Funkcja wywolania dla transferu danych
Adres_tda7439 = &H88
Register = &B00000110 'Rejestr Balans prawy kanal RIGHT SPEAKER
Balance_r = Balance_r_ee '0db Balans_R
Functional_value = Balance_r
Call Transfer 'Funkcja wywolania dla transferu danych
Adres_tda7439 = &H88
Register = &B00000111 'Rejestr Balans lewy kanal LEFT SPEAKER
Balance_l = Balance_l_ee
Functional_value = Balance_l '0db Balans lewy
Call Transfer 'Funkcja wywolania dla transferu danych
End Sub
Do
'-----------------------------------------------------------------------------------------------------------------------------------------------------
if on_off = 0 then
call Memory_on_off() 'switch ON/OFF
end if
'-----------------------------------------------------------------------------------------------------------------------REMOTe CONTROLER--------------
Getrc5(address , Command) 'read if we have remote ir command
If Address = 0 Then
Command = Command And &B01111111
End If
Select Case Command
'---- 8codes for remote , change code to your suit ! ----------------
'Case 87 : Call Selection() 'remote command code for OK
Case 16 : Call Volume() 'remote command code for VOL +
Case 17 : Call Volume() 'remote command code for VOL -
Case 13 : Call Mute()
Case 12 : Call Memory_on_off()
case 85 : call Change_settings() 'lewo
case 86 : call Change_settings() 'prawo
End Select
If Count < 181 Then Incr Count 'menu exit time
If Count = 180 Then ' set to main volume
Press_button = 1
Call Volume
End If
Waitms 10
Call Button_test
Loop
End
Sub Tin(byval Tin_val As Byte)
Cls
Select Case Tin_val
Case 0 : Db = " +0db"
Case 1 : Db = " +2db"
Case 2 : Db = " +4db"
Case 3 : Db = " +6db"
Case 4 : Db = " +8db"
Case 5 : Db = "+10db"
Case 6 : Db = "+12db"
Case 7 : Db = "+14db"
Case 8 : Db = "+16db"
Case 9 : Db = "+18db"
Case 10 : Db = "+20db"
Case 11 : Db = "+22db"
Case 12 : Db = "+24db"
Case 13 : Db = "+26db"
Case 14 : Db = "+28db"
Case 15 : Db = "+30db"
End Select
Tin_val = Tin_val + 1
Locate 1 , 1
Lcd "GAIN IN "
Locate 1 , 12
Lcd Db
Locate 2 , 1
Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
Locate 2 , Tin_val
Lcd Chr(2)
End Sub
Sub Bargraph_settings(byval Tone As String , Byval Tmp_1 As Byte)
Cls
Select Case Tmp_1
Case 0 : Db = "-14db"
Case 1 : Db = "-12db"
Case 2 : Db = "-10db"
Case 3 : Db = " -8db"
Case 4 : Db = " -6db"
Case 5 : Db = " -4db"
Case 6 : Db = " -2db"
Case 7 : Db = " -0db"
Case 8 : Db = " +2db"
Case 9 : Db = " +4db"
Case 10 : Db = " +6db"
Case 11 : Db = " +8db"
Case 12 : Db = "+10db"
Case 13 : Db = "+12db"
Case 14 : Db = "+14db"
End Select
Tmp_2 = Tmp_1 + 1
Locate 1 , 1
Lcd Tone ; " "
Locate 1 , 11
Lcd Db
Locate 2 , 1
Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(1) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
Locate 2 , Tmp_2
If Tmp_2 = 8 Then
Lcd Chr(3)
Else
Lcd Chr(2)
End If
End Sub
Sub Bar_balans(byval Tone11 As String , Byval Tmp_11 As Byte)
Local Help1 As Single
Help1 = Tmp_11 / 5
Cls
Select Case Help1 'Tmp_11
Case 0 : Db = "-100%"
Case 1 : Db = "-94%"
Case 2 : Db = "-88%"
Case 3 : Db = "-82%"
Case 4 : Db = "-76%"
Case 5 : Db = "-64%"
Case 6 : Db = "-58%"
Case 7 : Db = "-50%"
Case 8 : Db = "-42%"
Case 9 : Db = "-38%"
Case 10 : Db = "-32%"
Case 11 : Db = "-26%"
Case 12 : Db = "-18%"
Case 13 : Db = "-10%"
Case 14 : Db = "-0%"
End Select
Tmp_2 = Help1 + 1
Locate 1 , 1
Lcd Tone11 ; " " 'Tone11 to jest napis z bufora right,left
Locate 1 , 12
Lcd Db
Locate 2 , 1
Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
Locate 2 , Tmp_2
Lcd Chr(2)
End Sub
Sub Bar_vol(byval Vol_out As String , Byval Vol_val As Single , Byval Sel As Byte)
Local Tt As Single
Cls
'--------------------------------------------------------------------------------------------------------------------------------------------------------------------
If Vol_val = 0 Then
Call Mute() 'moje mute
end if
'--------------------------------------------------------------------------------------------------------------------------------------------------------------------
If Sel = 1 Then
Tt = Vol_val / 3.0625
Tmp_2 = Tt
Locate 1 , 1
Lcd Vol_out ; " " '; Tmpin
Locate 1 , 11
If Vol_val < 10 Then Lcd " "
Lcd " -" ; Vol_val ; "db"
End If
If Sel = 2 Then
Tmp_2 = Vol_val + 1
Locate 1 , 1
Lcd Vol_out
Locate 1 , 11
If Vol_val < 10 Then Lcd " "
Lcd " " ; Vol_val ; "db"
End If
Locate 2 , 1
Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
Locate 2 , Tmp_2
Lcd Chr(2)
End Sub
End
Sub Mute()
If Mute_func = 0 Then
Mute_func = 1
'MUTE ON
Register = &B00010110 'Speaker attenuate R + bus increment
Value = &B01111000
I2cstart
If Err = 0 Then
I2cwbyte Adres_tda7439 'Wyslij na adres TDA
If Err = 0 Then
I2cwbyte Register 'Speaker attenuate R + bus increment
I2cwbyte Value 'Mute R ON
I2cwbyte Value 'Mute L ON
I2cstop
End If
End If
cls
locate 1,1
lcd " M U T E "
Else
Mute_func = 0
'MUTE OFF
Register = &B00010110 'Speaker attenuate R + bus increment
Value = &B00000000
I2cstart
If Err = 0 Then
I2cwbyte Adres_tda7439 'Wyslij na adres TDA
If Err = 0 Then
I2cwbyte Register 'Speaker attenuate R + bus increment
I2cwbyte Value 'Mute R OFF
I2cwbyte Value 'Mute L OFF
I2cstop
Call Volume()
End If
End If
End If
End Sub
'-------------------------------------------------------------------------------
Sub Displaytime()
Locate 1 , 1
If Hour < 10 Then Lcd "0" : Lcd Hour ; ":"
If Minute < 10 Then Lcd "0" : Lcd Minute ; ":"
If Second < 10 Then Lcd "0" : Lcd Second
Lcd Spc(16) ' 16 spacji
Locate 2 , 1
Lcd Lookupstr(weekday , Weekdays) ; " "
If Day < 10 Then Lcd "0" : Lcd Day ; "-"
If Month < 10 Then Lcd "0" : Lcd Month ; "-" ; Year
Lcd Spc(2) ' 2 spacji
End Sub
'-------------------------------------------------------------------
Weekdays:
Data "Nie" , "Pon" , "Wto" , "Sro" , "Czw" , "Pt " , "Sob"
'-------------------------------------------------------------------
Monthlengths:
Data 0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31
'-------------------------------------------------------------------
Int0_isr:
Disable Int0
If Pind.3 = 0 Then
Count = 0
If Press_button = 1 Or Press_button = 2 Then
Encoder_a = 1
Encoder_b = 0
Else
Encoder_a = 0
Encoder_b = 1
End If
Button = 0
Held_var = 0
Call Setting_function
Call Change_settings
Else
Count = 0
If Press_button = 1 Or Press_button = 2 Then
Encoder_a = 0
Encoder_b = 1
Else
Encoder_a = 1
Encoder_b = 0
End If
Button = 0
Held_var = 0
Call Setting_function
Call Change_settings
End If
Gifr = 64
Enable Int0
Return
$include "PCF8583.bas"