Ten przykład możesz uruchomić w symulatorze i zobaczysz wszystkie cyfry w ruchu.
Wyświetlane teksty zajmują dużo cennej pamięci Flash. Można je przenieść do Eeproma. To samo można zrobić z definicjami dla wyświetlania dużych czcionek, jak i deklaracjami znaków specjalnych dla LCD.
Instrukcja Deflcdchar przyjmuje tylko stałe zapisane we flash. Konieczne jest więc użycie instrukcji zaszytej w bibliotece LCD. Za jej pomocą możesz załadować z Eeproma również kolejny zestaw znaków. Poniższy listing "ogarnia" wszystkie dane i słowa potrzebne w sterowniku C.O.
Należy wiedzieć, że zmienna typu String zajmuje w pamięci o jeden bajt więcej niż ma liter. W ostatnim bajcie zapisane są informacje np. o jej końcu. Dlatego potem procesor kończy odczyt (napotyka zero).
'************************************************************* '* Duże czcionki i Text Strings z EEproma * '* BARTek EDC niveasoft tlen pl * '************************************************************* $sim ' For the Bascom simulator only $regfile = "m8def.dat" $crystal = 8000000 $hwstack = 128 $swstack = 256 $framesize = 256 Cursor Off Noblink Dim Pierwsza As Byte , Druga As Byte Dim Linia_g(10) As String * 3 , Linia_d(10) As String * 3 Dim Hword(2) As Word , T(2) As Word Dim N As Byte , L(3) As Byte , My_temp As Byte , Address As Word Dim Temp_text As String * 7 T(1) = 100 T(2) = 100 'overlay config Dim Spare_array(80) As Eram Byte 'zarezerwowanie 80 komórek w pamięci Dim Alarms_ee As Eram Byte At 6 Overlay 'nadpisywanie pod adresem Dim Hist As Eram Byte At 7 Overlay Dim Przerwa As Eram Word At 10 Overlay Dim Dmuch As Eram Word At 12 Overlay Dim Sezon As Eram Byte At 14 Overlay Dim T_over As Eram Word At 8 Overlay Dim T_alarm As Eram Word At 4 Overlay Dim T_min As Eram Word At 2 Overlay Dim Character_set1(64) As Eram Byte At 80 ' ee address Const Piec = 204 'adres pierwszej litery czytany do końca stringa Const Bojler = 209 'adres następnego = adres poprzedniego + długość poprzedniego + 1 Const Pompa = 216 Const Alarm = 222 Const Wyjsc = 228 Const Tryb = 233 Const Lato = 238 Const Zima = 244 Const Nadmuch = 251 Const Przer = 259 Const Alrms = 267 Const Tak = 274 Const Nie = 278 Const His = 282 Const Czuj = 292 Const Wen = 301 Const Back = 312 Const Over = 317 Const Rozpal = 324 Gosub Set_characters Gosub Get_big Gosub Draw_main Wait 1 '***************** DEMO START ************************** Do T(1) = T(1) + 10 T(2) = T(2) + 10 If T(1) > 990 Then T(1) = 100 If T(2) > 990 Then T(2) = 100 Gosub Update_main 'cyfry sie stale zmieniają Waitms 400 Loop End '********************* END ***************************** Draw_main: 'rysuje glówną planszę Cls Readeeprom Temp_text , Piec 'wczytaj string do tymczasowego Lcd Temp_text ; ":" 'wyswietl tymczasowy Lowerline Readeeprom Temp_text , Bojler 'wczytaj nastepny do tymczasowego Lcd Chr(0) ; " " ; Temp_text ; Chr(126) Return Update_main: 'uaktualnia wartosci na bieżąco Locate 1 , 6 'linia 1, pozycja szosta Hword(1) = T(1) / 10 Lcd Hword(1) ; Chr(223) 'pokaz temp. pieca Hword(2) = T(2) / 10 Pierwsza = Hword(2) / 10 If Pierwsza = 0 Then Pierwsza = 10 Druga = Hword(2) Mod 10 If Druga = 0 Then Druga = 10 Locate 1 , 10 Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(219) 'pokaz temp bojlera Locate 2 , 10 Lcd Linia_d(pierwsza) ; Linia_d(druga) 'pokaz temp bojlera Return Set_characters: 'wrzuca do wyswietlacza znaki użytkownika My_temp = &H40 !LDS _temp1,{My_temp} !Rcall _Lcd_control For Address = 80 To 143 Readeeprom My_temp , Address !LDS _temp1, {My_temp} !Rcall _Write_lcd Next Address Return Get_big: 'ładuje wartości kolejnych znaków Address = 144 'potrzebnych do dużych czcionek For My_temp = 1 To 20 For N = 1 To 3 Readeeprom L(n) , Address Incr Address Next N If My_temp <= 10 Then Linia_g(my_temp) = Chr(l(1)) + Chr(l(2)) + Chr(l(3)) Else N = My_temp - 10 Linia_d(n) = Chr(l(1)) + Chr(l(2)) + Chr(l(3)) End If Next My_temp Cls Return $eeprom Data 0 , 0 , 200 , 0 , 34 , 3 , 1 , 60 'różne ustawienia Data 38 , 2 , 60 , 0 , 10 , 0 , 1 , 0 Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H28 'adres pierwszego dallasa Data &HCB , &H4B , &H5D , &H05 , &H00 , &H00 , &H90 , &H00 , &H00 Data &H28 , &H0F , &H1E , &H5D , &H05 , &H00 , &H00 , &H94 'adres drugiego DS18B20 Data 0 , 0 , 0 , 0 , 0 , 0 , 0 Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 Data 32 , 14 , 4 , 20 , 30 , 17 , 16 , 32 ' kranik Data 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28 ' prawy naroznik Data 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32 ' gorna kreseczka Data 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31 ' dolna kreseczka Data 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31 ' dwie kreseczki Data 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28 ' prawa belka Data 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7 ' lewa belka Data 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7 ' lewy naroznik Data 254 , 254 , 5 , 7 , 4 , 5 , 254 , 4 , 5 , 6 , 3 , 5 , 6 , 4 , 1 Data 6 , 4 , 1 , 6 , 2 , 5 , 6 , 4 , 5 , 6 , 4 , 5 , 6 , 2 , 5 'linia_g(1-10) Data 254 , 254 , 5 , 6 , 3 , 3 , 254 , 3 , 5 , 254 , 254 , 5 , 3 , 3 , 5 Data 6 , 3 , 5 , 254 , 254 , 5 , 6 , 3 , 5 , 3 , 3 , 5 , 6 , 3 , 5 'linia_d(1-10) Data "Piec" Data "Bojler" Data "Pompa" Data "Alarm" Data "Exit" Data "Tryb" Data "letni" Data "zimowy" Data "Nadmuch" Data "Przerwa" Data "Alarmy" Data "Tak" Data "Nie" Data "Histereza" Data "Czujniki" Data "Wentylator" Data "Back" Data "T.over" Data "Rozpalanie" $data