![[Rozmiar: 10329 bajtów]](naglowek.gif)
Ten przykład możesz uruchomić w symulatorze i zobaczysz wszystkie cyfry w ruchu.
![[Rozmiar: 21471 bajtów]](symulator.png)
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