• Email
  • Forum

Duże fonty na alfanumerycznym LCD

Uzyskanie takiego efektu w BASCOM jest nieskomplikowane i każdy może to zrobić.

Chciałbym na wstępie wyjaśnić, że w Bascom przyjęło się definiować znaki użytkownika na początku programu. Jest to pewnie spowodowane tym, że żeby ich użyć trzeba najpierw zainicjalizować je komendą Cls. Nie jest to jednak koniec możliwości definiowania tych znaków. Możemy ich mieć więcej i swobodnie podmieniać je na nowe podczas pracy programu.

[Rozmiar: 11922 bajtów]

Wyświetlacze alfanumeryczne maja wbudowany generator znaków. Dostępne najczęściej znaki widać w tabelce poniżej.

[Rozmiar: 154918 bajtów]

Każdy z tych znaków jest dostępny bezpośrednio z klawiatury lub przez wpisanie jego Adresu w pamięci. Adres można odczytać w postaci binarnej po lewej stronie tabeli i na jej górze. Ciąg jedynek i zer możemy wpisać do najzwyklejszego kalkulatora Windows jeśli przełączymy go na widok programisty. Zaznaczamy "kropkę" Bin, wpisujemy ciąg i zmieniamy z powrotem na Dec. Otrzymujemy wartośc którą możemy wpisać do wywołującej jej komendy Chr().

[Rozmiar: 13672 bajtów]

I tak poniżej widać kilka gotowych już znaków które ludzie często niepotrzebnie definiują w swoich programach poleceniem Deflcdchar marnotrawiąc miejsce w pamięci mikrokontrolera.W tabelce widac nawiasy i strzałki..

- stopien to Chr(223)
- caly kursor to Chr(255)
- duzy stopien to Chr(219)
- duza kropka to Chr(161)
- up to Chr(162)
- down to Chr(163)
- strzalka w prawo to Chr(126)
- strzalka w lewo to Chr(127)

Producent przewidział tez możliwość zdefiniowania własnych znaków np. dla narodowych "ogonków i daszków". Na raz w pamięci wyświetlacza może tych znaków być osiem. Co nie znaczy, że nie możemy ich mieć w programie więcej. Poniżej, dla ułatwienia, przedstawiam kilka polskich znaków.

		
      Deflcdchar x , 32 , 32 , 14 , 1 , 15 , 17 , 15 , 1          ' ą 
      Deflcdchar x , 2 , 4 , 14 , 16 , 16 , 17 , 14 , 32          ' ć 
      Deflcdchar x , 12 , 4 , 4 , 6 , 12 , 4 , 14 , 32            ' ł 
      Deflcdchar x , 2 , 4 , 22 , 25 , 17 , 17 , 17 , 32          ' ń 
      Deflcdchar x , 2 , 4 , 14 , 17 , 17 , 17 , 14 , 32          ' ó 
      Deflcdchar x , 2 , 4 , 14 , 16 , 14 , 1 , 30 , 32           ' ś 
      Deflcdchar x , 2 , 4 , 31 , 2 , 4 , 8 , 31 , 32             ' ź 
      Deflcdchar x , 32 , 32 , 14 , 17 , 31 , 16 , 14 , 1         ' ę
      Deflcdchar x , 4 , 32 , 31 , 2 , 4 , 8 , 31 , 32            ' ż
		

Budowa dużych cyfr

Żeby zobrazować sposób powstawania dużych czcionek posłużę się najprostsza czcionką wymagającą zadeklarowania tylko trzech znaków. Czwarty znak, całego bloku, możemy wybrać wpisując Chr(255)

[Rozmiar: 44259 bajtów]

Budujemy takie w LCD designerze, jeśli jeszcze nie mamy i deklarujemy:

		Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
		Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
		Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
		

Jak widać, budowa potem sprowadza się do wyświetlenia tych znaków w sekwencji która da nam dużą cyfrę. Czcionka ta jest jednak mało efektywna, bo potrzebuje jeszcze jednego bloku na odstęp. Dalej pokażę ładniejszą.

Ładniejsza czcionka. Duże i małe razem.

Tak, nic nie stoi na przeszkodzie by wyświetlać je razem. Ta czcionka wymaga zdefiniowania większej ilości znaków, ale jest węższa. Nie potrzebuje więc odstępów. Najpierw przykład programu, potem wyjaśnienie.

[Rozmiar: 12075 bajtów]
Config Lcd = 16 * 2
Cursor Off Noblink
Cls

Deflcdchar 0 , 32 , 14 , 4 , 20 , 30 , 17 , 16 , 32         ' kranik
Deflcdchar 1 , 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28        ' prawy naroznik
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
Deflcdchar 5 , 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28        ' prawa belka
Deflcdchar 6 , 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7          ' lewa belka
Deflcdchar 7 , 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7            ' lewy naroznik
'stopien to Chr(223)
'strzalka w prawo to Chr(126)
Dim Pierwsza As Byte , Druga As Byte , Flaga_menu As Byte
Dim Test As Byte , Linia_g(10) As String * 3 , Linia_d(10) As String * 3

Test = 28                                                   'przykład do wyswietlenia
Flaga_menu = 1                                              'by wyswietlic tylko raz
'=========TABLICA na DUŻE CYFRY===========
'Cyfra 0
Linia_g(10) = "{006}{002}{005}"                             'chr(6) + Chr(2) + Chr(5)
Linia_d(10) = "{006}{003}{005}"                             'Chr(6) + Chr(3) + Chr(5)

'Cyfra 1
Linia_g(1) = "{032}{032}{005}"                              ' "  " + Chr(5)
Linia_d(1) = "{032}{032}{005}"                              '"  " + Chr(5)

'Cyfra 2
Linia_g(2) = "{007}{004}{005}"                              'Chr(7) + Chr(4) + Chr(5)
Linia_d(2) = "{006}{003}{003}"                              'Chr(6) + Chr(3) + Chr(3)

'Cyfra 3
Linia_g(3) = "{032}{004}{005}"                              '" " + Chr(4) + Chr(5)
Linia_d(3) = "{032}{003}{005}"                              '" " + Chr(3) + Chr(5)

'Cyfra 4
Linia_g(4) = "{006}{003}{005}"                              'Chr(6) + Chr(3) + Chr(5)
Linia_d(4) = "{032}{032}{005}"                              '"  " + Chr(5)

'Cyfra 5
Linia_g(5) = "{006}{004}{001}"                              'Chr(6) + Chr(4) + Chr(1)
Linia_d(5) = "{003}{003}{005}"                              'Chr(3) + Chr(3) + Chr(5)

'Cyfra 6
Linia_g(6) = "{006}{004}{001}"                              'Chr(6) + Chr(4) + Chr(1)
Linia_d(6) = "{006}{003}{005}"                              'Chr(6) + Chr(3) + Chr(5)

'Cyfra 7
Linia_g(7) = "{006}{002}{005}"                              'Chr(6) + Chr(2) + Chr(5)
Linia_d(7) = "{032}{032}{005}"                              '"  " + Chr(5)

'Cyfra 8
Linia_g(8) = "{006}{004}{005}"                              'Chr(6) + Chr(4) + Chr(5)
Linia_d(8) = "{006}{003}{005}"                              'Chr(6) + Chr(3) + Chr(5)

'Cyfra 9
Linia_g(9) = "{006}{004}{005}"                              'Chr(6) + Chr(4) + Chr(5)
Linia_d(9) = "{003}{003}{005}"                              'Chr(3) + Chr(3) + Chr(5)

' ZAPIS W POSTACI{002}{032} ZMNIEJSZA KOD O 676 BAJTÓW '
Do

If Flaga_menu = 1 Then
     Cls
        Pierwsza = Test / 10
         If Pierwsza = 0 Then Pierwsza = 10
        Druga = Test Mod 10
         If Druga = 0 Then Druga = 10
        Lcd "PIEC:" ; "55" ; Chr(223)
			
             Locate 1 , 10
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(219)
             Lowerline
             Lcd Chr(0) ; " BOJLER" ; Chr(126)
             Locate 2 , 10
             Lcd Linia_d(pierwsza) ; Linia_d(druga)
				 
    Flaga_menu = 0
End If

Loop
End
		

Żeby wyświetlić dużą cyfrę potrzebujemy trzy pola w bok na każdej linii. Sekwencję znaków wyświetla się jako String zdefiniowany wcześniej w tablicy w której Index stringa odpowiada wartości Cyfry(dwie tablice, dla górnej i dolnej linii). W tablicach wartości zaczynają się od 1,(nie może więc zaczynać się od zera) dlatego Zero zdefiniowane jest pod 10. Na Stringach nie wykonuje się działań matematycznych więc jeśli je do siebie dodamy to wyświetlą się obok siebie, a nie dodadzą. To jak je sobie uformujemy to już indywidualna sprawa. Możemy więc wyświetlić cokolwiek, nie tylko cyfry. Tu, na potrzeby przykładu, najpierw obliczane są potrzebne cyfry (liczba rozbijana jest na cyfry),potem wyświetlane są górne części cyfry po czym dolne. Żeby nie było odświeżania i program wykonał się tylko raz, ustawiony jest warunek "If flaga menu"

Email

Jeśli mogę w czymś pomóc, napisz.