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 stworzyć linijkę analogową na LCD alfanumerycznym w Bascom?

M. S. 19 Gru 2006 20:29 4068 2
REKLAMA
  • #1 3349725
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Kiedyś ktoś pytał o program do linijki analogowej na LCD alfanumeryczny.
    Wykombinowałem takie demo:

    $regfile = "m8def.dat"
    $crystal = 1000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0
    Cursor Off
    
    Deflcdchar 1 , 32 , 32 , 32 , 32 , 16 , 16 , 16 , 32
    Deflcdchar 2 , 32 , 32 , 32 , 32 , 20 , 20 , 20 , 32
    Deflcdchar 3 , 32 , 32 , 32 , 32 , 21 , 21 , 21 , 32
    
    Dim Pozycja As Byte
    Dim Licznik As Byte
    Dim Wartosc As Byte
    Dim Calosc As Byte
    Dim Ulamek As Byte
    Dim Spacja As Byte
    Cls
    
    Do
    
    For Wartosc = 0 To 240
    Gosub Linijka
    Waitms 25
    Next Wartosc
    
    For Wartosc = 240 To 0 Step - 1
    Gosub Linijka
    Waitms 25
    Next Wartosc
    
    Loop
    End
    
    Linijka:
    
    Locate 1 , 1 : Lcd Wartosc ; " " ; Calosc ; " " ; Ulamek ; "     "
    Pozycja = Wartosc / 5         'przeliczenie max zakresu zm wartość na ilość
    'dostępnych pozycji wyświetlacza - 48 (16*3)
    Calosc = Pozycja / 3          'Jedna pozycja wyświetlacza może wyswietlać 3 wartości
    Ulamek = Pozycja Mod 3        'O rodzaju znaku zakończenia linijki informuje zmienna Ulamek
    
    For Licznik = 0 To Calosc
    Locate 2 , Licznik
    Lcd Chr(3)
    Next Licznik                  'Wyśwetlamy ilość całości
    
    If Ulamek = 1 Then
    Locate 2 , Licznik
    Lcd Chr(1);
    Incr Licznik
    End If
                                'Dopisujemy niepełną pozycję  1/3 lub 2/3
    If Ulamek = 2 Then
    Locate 2 , Licznik
    Lcd Chr(2);
    Incr Licznik
    End If
    
    For Spacja = Licznik To 16    'Resztę wypełniamy spacjami
    Locate 2 , Spacja
    Lcd " ";
    Next Spacja
    
    Return


    Na każdą pozycje wyświetlacza przypadają 3 wartości (jedna, dwie, lub trzy pionowe kreski). Dzięki temu przerwy pomiędzy pozycjami wyswietlacza nie wpływają na ciągłość linijki.
  • REKLAMA
  • #2 9293251
    DariuszEE
    Poziom 17  
    Posty: 347
    Pomógł: 5
    Ocena: 33
    Witaj
    Wykorzystałem Twój kod do wizualizacji
    Nieco go zmodyfikowałem dodając kilka działań matematycznych

    Dodałem wyświetlanie w procentach i rozszerzyłem BARGRAF do 255 ponieważ Twój kończył się na 240
    "Ustaliłem" wyświetlania zmiennej w % tat by była nieruchoma

    poniżej zamieszczam kod

    
    $regfile = "m8def.dat"
    $crystal = 1000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0
    Cursor Off
    
    '**********************************************************************************************************************
    ' LCD , DEFINICJA MOICH ZNAKÓW
    '**********************************************************************************************************************
    Deflcdchar 0 , 2 , 4 , 14 , 16 , 14 , 1 , 30 , 32           ' polska litera mała ś
    Deflcdchar 1 , 2 , 4 , 14 , 16 , 16 , 17 , 14 , 32          ' polska litera mała ć
    Deflcdchar 4 , 32 , 16 , 16 , 16 , 16 , 16 , 16 , 32        ' wyświetlanie znaku |
    Deflcdchar 5 , 32 , 20 , 20 , 20 , 20 , 20 , 20 , 32        ' wyświetlanie znaku ||
    Deflcdchar 6 , 32 , 21 , 21 , 21 , 21 , 21 , 21 , 32        ' wyświetlanie znaku |||
    
    '**********************************************************************************************************************
    
    Dim Wartosc As Byte                                         'Zmienna 0-255
    Dim Mnozenie As Word                                        'Zmienna * 100
    Dim Procent As Integer                                      'Zmienna /255 , już w procentach 0-100%
    Dim Pozycja As Word
    Dim Pozycja1 As Word
    Dim Licznik As Byte
    Dim Calosc As Byte
    Dim Ulamek As Byte
    Dim Spacja As Byte
    Cls
    
    Do
    
    For Wartosc = 0 To 255
    Gosub Linijka
    Waitms 100
    Next Wartosc
    
    For Wartosc = 255 To 0 Step - 1
    Gosub Linijka
    Waitms 100
    Next Wartosc
    
    Loop
    
    End
    '**********************************************************************************************************************
    ' LDC PODPROGRAM WYŚWIETLANIE WARTOŚĆI + BARGRAF
    '**********************************************************************************************************************
    Linijka:
    
    Mnozenie = Wartosc * 100                                    'Mnożenie Wartości PWM * 100
    Procent = Mnozenie / 255                                    'Podzielenie przez / 255
    
    Locate 1 , 1 : Lcd "Jasno" ; Chr(0) ; Chr(1) ;              'wyświetlanie od 1 pozycji "jasność"
    Select Case Procent                                         'instrukcja wyboru CASE , początek uwarunkowań
    Case Is < 10:                                               'jeżeli zmienna jest < od 10
    Locate 1 , 12 : Lcd "  "                                    'Czyszczenie Pozycji 12 , 13 Lcd
    Locate 1 , 14 : Lcd Procent ; " %"                          'wyświetlanie zmiennej od pozycji 14 + spacja + znaku %
    Case 10 To 99:                                              'jeżeli zmienna jest w przedziale od 10 do 99
    Locate 1 , 12 : Lcd " "                                     'Czyszczenie Pozycji 12 Lcd
    Locate 1 , 13 : Lcd Procent ; " %"                          'wyświetlanie zmiennej od pozycji 13 + spacja + znak %
    Case 100:                                                    'jeżeli zmienna jest = 100
    Locate 1 , 12 : Lcd Procent ; " %"                          'wyświetlanie zmiennej od pozycji 12 + spacja + zanak%
    End Select                                                  'koniec uwarunkowań
    
                                                                'dostępnych pozycji wyświetlacza - 48 (16*3)
    Pozycja1 = Wartosc * 48                                     'Mnożenie Wartości * 48
    Pozycja = Pozycja1 / 255                                    'podział Pozycja1 / 255 by uzyskać "48 pozycji"
    Calosc = Pozycja / 3                                        'Jedna pozycja wyświetlacza może wyswietlać 3 wartości
    Ulamek = Pozycja Mod 3                                      'O rodzaju znaku zakończenia linijki informuje zmienna Ulamek
    
    For Licznik = 0 To Calosc
    Locate 2 , Licznik
    Lcd Chr(6)
    Next Licznik                                                'Wyśwetlamy ilość całości
    
    If Ulamek = 1 Then
    Locate 2 , Licznik
    Lcd Chr(4)
    Incr Licznik
    End If
                                                                 'Dopisujemy niepełną pozycję  1/3 lub 2/3
    If Ulamek = 2 Then
    Locate 2 , Licznik
    Lcd Chr(5)
    Incr Licznik
    End If
    
    For Spacja = Licznik To 16                                  'Resztę wypełniamy spacjami
    Locate 2 , Spacja
    Lcd " ";
    Next Spacja
    Return
    
    '*******************************************************************************************************************

    Tak wygląda efekt

    Jak stworzyć linijkę analogową na LCD alfanumerycznym w Bascom?
    Jak stworzyć linijkę analogową na LCD alfanumerycznym w Bascom?

    Pozdrawiam :-)
  • #3 9483685
    pier
    Poziom 24  
    Posty: 2446
    Pomógł: 40
    Ocena: 1893
    Świetny program.
    Wykorzystałem go do swojego LCD 1*40 który posiada dodatkową linijkę o wysokości trzech pikseli która idealnie nadaje się na bargraf.
    Tutaj go opisałem
REKLAMA