• Email
  • Forum

Przenieś napisy do EEPROM :)

Ten przykład możesz uruchomić w symulatorze i zobaczysz wszystkie cyfry w ruchu.

[Rozmiar: 21471 bajtów]

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
		
Email

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