Kiedyś ktoś pytał o program do linijki analogowej na LCD alfanumeryczny.
Wykombinowałem takie demo:
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.
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
ReturnNa 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.