Uzyskanie takiego efektu w BASCOM jest nieskomplikowane i każdy może to zrobić.
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().
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)
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.
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"