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

Jak wyświetlić napis MUTE tylko raz na środku w Bascom?

morswin89 09 Kwi 2007 10:06 1413 5
REKLAMA
  • #1 3768408
    morswin89
    Poziom 23  
    Posty: 834
    Pomógł: 23
    Ocena: 190
    Po wlaczeniu funkcji MUTE na calym wyswietlaczu zostaje wyswietlony tan napis kilkakrotnie. Czy mozna zmienic jakos kod programu aby ten napis byl wyswietlony tylko raz i na srodku??

    Kod:

    $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

    Jak wyświetlić napis MUTE tylko raz na środku w Bascom?
  • REKLAMA
  • #2 3769145
    hefid
    Spoczywaj w Pokoju
    Posty: 15878
    Pomógł: 546
    Ocena: 6163
    Post był raportowany.
    Przeniosłem z: Programowanie ogólne
  • REKLAMA
  • REKLAMA
  • REKLAMA
  • #5 3770953
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Skasuj instrukcje wyświetlające numer wejścia i zastąp:

    If Wejscie = 0 Then 
    Locate 1 , 1
    Lcd "DVD  "
    End if
    
    If Wejście = 1 Then
    Locate 1 , 1
    Lcd "Tuner"
    End if


    Przy tej metodzie wyświetlania trzeba zadbać aby następny napis zakrył cały poprzedni - stąd DVD i 2 spacje (Tuner ma 5 znaków)
  • #6 3771345
    gufiak
    Poziom 21  
    Posty: 444
    Pomógł: 15
    Ocena: 2
    I jeszcze taka drobna uwaga, nie związana z samym programem, ale z tym co wyświetla. Zamień
    Call Wys( "bas:")
    na
    Call Wys( "Bass:")
    także
    Call Wys( "Balans:")
    na
    Call Wys( "Balance:")
    I inne tego typu kwiatki, bo aktualnie masz "poliszinglisz" na wyświetlaczu.

    (Nie wiem czemu, ale źle wyświetla drugi fragment kodu, najwidoczniej włączone jest jakieś filtrowanie... Tam oczywiście powinno być "B a s s :" w nawiasie (bez tych dodatkowych spacji), ale powtórzyło błędny napis)
REKLAMA