![[Rozmiar: 10329 bajtów]](naglowek.gif)
Uzyskanie takiego efektu w BASCOM jest nieskomplikowane i każdy może to zrobić.
![[Rozmiar: 11922 bajtów]](maxresdefault.jpg)
Wyświetlacze alfanumeryczne maja wbudowany generator znaków. Dostępne najczęściej znaki widać w tabelce poniżej.
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]](calc bin.jpg)
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)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 ' ż
Ż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]](design.jpg)
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ą.
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]](lcd.jpg)
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"