wyświetlacz N3310/5110


witam.wpadł mi w ręce wyświetlacz od noki5510 i chciałbym przećwiczyć na nim parę programów aby móc go zastosować do innych projektów.
Znalazłem sporo w sieci jednak większość jest pisana w C.
Mam program na którym dizła i można z niego coś pokombinować, dołożyłem nawet wyświetlanie temperatury z ds-a oraz logo startowe, ma zdefiniowaną tablicę znaków także z wyświetlaniem napisów też nie ma problemu.
Chodzi mi o zrobienie linijki (bargrafu) np.na wysokość 4 pikseli i szrokość np.84 piksele (wyświetlacz jest 84x48) oraz jak przeliczyć temp. na wyświetlaną linię (np.1*C na 1 kreskę bargrafu).

'***********************test z termometrem  dziala*****************************
'******************nokia 5110 szer.84x wys.48 piks. ***************************
 
$regfile = "m168def.dat"
$crystal = 8000000
 
$hwstack = 128
$swstack = 128
$framesize = 128
 
 
'***********************************LCD****************************************
 
Dim Lcd_data As Byte
Dim Updatelcd As Bit                                        '1 = aktualizacja programu
Dim Lcd_cache(504) As Byte                                  'wyslanie danych do LCD RAM
Dim Lcdcacheidx As Word                                     'wskaznik
Dim Ch As Byte
'********************************termometr*************************************
Config 1wire = Portd.5                                      ' konfiguracja portu PD.5 jako wejścia magistrali 1-wire
 
Dim Odczyt(2) As Byte , A As Byte , Licznik As Byte , T As Integer , T1 As Single , Napis As String * 5
'Deklaracja wszystkich zmiennych potrzebnych do pracy programu
 
'**********************************aliasy**************************************
Zasilanie Alias Portb.6 : Config Pinb.6 = 1 : Portb.6 = 0
Sclk Alias Portb.5 : Config Pinb.5 = 1 : Portb.5 = 0
Sdin Alias Portb.3 : Config Pinb.3 = 1 : Portb.3 = 0
Dc Alias Portb.0 : Config Pinb.0 = 1 : Portb.0 = 0
Sce Alias Portb.2 : Config Pinb.2 = 1 : Portb.2 = 0
Res Alias Portb.4 : Config Pinb.4 = 1 : Portb.4 = 0
 
'********************************stale LCD constants***************************
Const Lcd_inver = &H0D                                      'odwrocony ekran (po normalnym trybie polecen)
Const Lcd_normal = &H0C                                     'normalny ekran (po normalnym trybie polecen)
Const Test = &H09                                           'wszystkie piksele wlaczone (po normalnym trybie poleceń)
Const Normal_command = &H20                                 'normalny tryb polecen
 
 
'***************************deklaracje Sub LCD*********************************
Declare Sub Lcdcmd_(byval Command As Byte )
Declare Sub Lcdinit
Declare Sub Lcdclear
Declare Sub Lcdupdate
Declare Sub Lcdgoxy(byval X As Byte , Byval Y As Byte)
Declare Sub Lcdchr(byval Ch As Byte , Byval Lcdfontsize As Byte , Byval Ch_inv As Byte)
Declare Sub Lcdstr(byval Lcdstring As String , Byval Lcdfontsize As Byte , Byval Ch_inv As Byte)
Declare Sub Lcdpixel(byval X As Byte , Byval Y As Byte , Byval Pixelmode As Byte )
Declare Sub Show(byval Xx As Byte , Byval Yy As Byte)
Declare Sub Clearshow(byval Xx As Byte , Byval Yy As Byte)
 
   Reset Res                                                'RESET LCD
   Waitms 10
   Set Res
'********************************** LCD Init **********************************
Call Lcdinit                                                'musi być najpierw w programie!!!
 
Declare Sub Loading                                         'animacja wyswietlaczy LED w trakcie startu
Loading
 
Dim Ii As Byte
Dim Wsk As Byte
Wsk = 0
 
Do
 'Lcdclear
 'Lcdgoxy 1 , 6      -  x=szerokosc(co 6 piks.), y=wysokosc(6 poz./lini)
 'Lcdstr "MrekSzymanski" , 1 , 0
 'Lcdupdate
 'Wait 2
'Lcdgoxy 1  ,6 -pozycja na wyswietlaczu
'Lcdstr "TEKST" , 1 , 0 - pierwsa cyfra 1(tabela z mala czcionka),2(tabela z duza czcionka
'druga cyfra oznacza napis ciemny (0)/negatyw (1)
  1wreset                                                   'reset
  1wwrite &HCC                                              'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM
  1wwrite &H44                                              'dokonaj konwersji
  Waitms 750                                                'przeczekaj czas konwersji
  1wreset                                                   'reset
  1wwrite &HCC                                              'rozkaz adresowy SKIP ROM
  1wwrite &HBE                                              'rozkaz funkcyjny - polecenie odczytu DS18x20
  Odczyt(1) = 1wread(2)                                     'odczytaj dwa pierwsze bajty
  T = Odczyt(2)                                             'przepisz starszy bajt do zmiennej typu Integer
  Shift T , Left , 8                                        'przesuń ten bajt w lewo na wyższe pozycje
  T = T + Odczyt(1)                                         'przepisz - dodaj młodszy bajt
 
  T1 = T * 0.0625                                           'wyraź w stopniach Celsjusza, wynik wpisz do zmiennej Single
  Napis = Fusing(t1 , "#.#")
 
  Lcdclear
  Lcdgoxy 2 , 1
  Lcdstr "temperatura" , 1 , 1
  Lcdgoxy 10 , 4
  Lcdstr "'C" , 2 , 0
  Lcdgoxy 2 , 4                                             'wysw.temperatury
  Lcdstr , Napis , 2 , 0
 
  Lcdgoxy 5 , 6
  Lcdstr "TEST" , 1 , 0
 
  Lcdupdate
 
  For Ii = 1 To 84
      If Wsk = 0 Then
         Wsk = 1
      Else
         Wsk = 0
      End If
      Lcdpixel Ii , 10 , Wsk                                '10 linia piks.
      Lcdupdate
   Next Ii
 
 
 Loop
 
 
'****************************podprogramy LCD***********************************
 
'****************************Lcdcmd (Command)**********************************
Sub Lcdcmd_(byval Command As Byte )
Local Licznik As Byte
Sce = 0                                                     'wlaczenie(SCE)
Dc = 0
For Licznik = 7 To 0 Step -1
Sclk = 0
Sdin = Command.licznik
Sclk = 1
Next Licznik
Sclk = 0
Sce = 1
End Sub
 
'----------------------- Lcdinit ------------------------------
Sub Lcdinit
   Waitms 50
   Set Zasilanie
   Waitms 5
   Reset Res                                                'RESET LCD
   Waitms 5
   Set Res                                                  'end of reset
   Set Sce                                                  'in Lcdcmd() will be "L"!
   Call Lcdcmd_(&H21)                                       'extended command mode
   Call Lcdcmd_(&Hc1)                                       'Hb/Hc do 9 LCD contrast (nalezy dobrac)
   Call Lcdcmd_(&H06)                                       'temperature compensation
   Call Lcdcmd_(&H13)                                       'bias 1:48
   Call Lcdcmd_(&H20)                                       'normal command mode
   Call Lcdcmd_(&H0c)                                       'normal display
   Call Lcdcmd_(&H40)                                       'Y=0
   Call Lcdcmd_(&H80)                                       'X=0
   Call Lcdclear
   Call Lcdupdate
End Sub
 
'---------------------- Lcdclear ------------------------------
Sub Lcdclear
   Call Lcdcmd_(&H40)                                       'Y=0
   Call Lcdcmd_(&H80)                                       'X=0
   Local I As Word
   For I = 1 To 504
       Lcd_cache(i) = 0
   Next I
End Sub
'--------------------- Lcdupdate -------------------------------
Sub Lcdupdate
   Local I As Word
   Local Licznik As Byte
   Call Lcdcmd_(&H80)                                       'sets 0 X-addr of RAM
   Call Lcdcmd_(&H40)                                       'sets 0 Y-addr of RAM
   For I = 1 To 504
     Lcd_data = Lcd_cache(i)
     Sce = 0                                                'enable (SCE)
     Dc = 1
     For Licznik = 7 To 0 Step -1
     Sclk = 0
     Sdin = Lcd_data.licznik
     Sclk = 1
     Next Licznik
     Sclk = 0
     Sce = 1
   Next I
   Updatelcd = 0
End Sub
 
'--------------------- Lcdgoxy--------------------------------
Sub Lcdgoxy(byval X As Byte , Byval Y As Byte)              'from 1,1 to 14,6
   Local I As Word
   Local J As Word
   X = X - 1
   I = X
   I = I * 6
   Y = Y - 1
   J = Y
   J = Y * 84
   Lcdcacheidx = I + J
   Incr Lcdcacheidx                                         'Lcdchacheidx 1-504!
End Sub
 
'------------------ Lcdchr-------------------------------------
Sub Lcdchr(byval Ch As Byte , Byval Lcdfontsize As Byte , Byval Ch_inv As Byte)       '1 character on LCD
   Local I As Byte
   Local J As Word
   Local K As Byte
   Local Ba As Byte
   Local Bb As Byte
   Local Tmpidx As Word
   Local Tmpidx1 As Word
   If Ch < &H20 Then Ch = 92
   If Ch > &H7B Then Ch = 92
   J = Ch - 32
   J = J * 5
   If Lcdfontsize = 1 Then
      For I = 1 To 6
         K = Lookup(j , Fontlookup)
         If Ch_inv = 1 Then                                 'negative
            If I = 6 Then                                   'black for 6 row
               K = 255
            Else
               K = K Xor &HFF
            End If
         Else
            If I = 6 Then                                   'white for 6 row
               K = 0
            End If
         End If
 
         Lcd_cache(lcdcacheidx) = K
         Incr Lcdcacheidx
         Incr J
      Next I
   Else                                                     'high 2
      Tmpidx = Lcdcacheidx - 84                             'signs go up and can't be at 1,x
      For I = 1 To 6
         If I = 6 Then
            If Ch_inv = 1 Then
               K = 255
            Else
               K = 0
            End If
         Else
            K = Lookup(j , Fontlookup)
            If Ch_inv = 1 Then
               K = K Xor &HFF
            End If
         End If
         Ba.0 = K.0
         Ba.1 = K.0
         Ba.2 = K.1
         Ba.3 = K.1
         Ba.4 = K.2
         Ba.5 = K.2
         Ba.6 = K.3
         Ba.7 = K.3
 
         Bb.0 = K.4
         Bb.1 = K.4
         Bb.2 = K.5
         Bb.3 = K.5
         Bb.4 = K.6
         Bb.5 = K.6
         Bb.6 = K.7
         Bb.7 = K.7
 
         Lcd_cache(tmpidx) = Ba                             'up of character
         Incr Tmpidx
         Lcd_cache(tmpidx) = Ba                             'double wide
         Incr Tmpidx
         Tmpidx1 = Tmpidx + 82
         Lcd_cache(tmpidx1) = Bb                            'down of character
         Incr Tmpidx1
         Lcd_cache(tmpidx1) = Bb                            'double wide
         Incr J
      Next I
      Lcdcacheidx = Lcdcacheidx + 12                        '6+6
  End If
  Kon_lcdchr:
End Sub
'-------------------- Lcdstr----------------------------------------
Sub Lcdstr(lcdstring As String , Lcdfontsize As Byte , Ch_inv As Byte)
   Local M As Byte
   Local N As String * 1
   For M = 1 To Len(lcdstring)
      N = Mid(lcdstring , M , 1)
      Ch = Asc(n)
      Call Lcdchr(ch , Lcdfontsize , Ch_inv )
   Next M
End Sub
'------------------- Lcdpixel --------------------------------------
Sub Lcdpixel(x As Byte , Y As Byte , Pixelmode As Byte )
   Local Index As Word
   Local Offset As Byte
   Local I As Byte
   If X > 84 Then Goto End_lcdpixel
   If Y > 48 Then Goto End_lcdpixel
   Y = Y - 1
   Index = Y / 8
   Index = Index * 84
   Index = Index + X
   Offset = Y / 8
   Offset = Offset * 8
   Offset = Y - Offset
   Lcd_data = Lcd_cache(index)
   I = 1
   Shift I , Left , Offset
   Select Case Pixelmode
   Case 0:                                                  'pixel off
      I = I Xor &HFF
      Lcd_data = Lcd_data And I
   Case 1:                                                  'pixel on
      Lcd_data = Lcd_data Or I
   Case 2:                                                  'pixel xor
      Lcd_data = Lcd_data Xor I
   End Select
   Lcd_cache(index) = Lcd_data
End_lcdpixel:
End Sub
 
'--------------------- Show ----------------------
 'XX 1 to (84-_width), YY 1 to 6 (n*8)
 'must be RESTORE "data to show" before CALL it subrotine
Sub Show(xx As Byte , Yy As Byte)
   Local Swidth As Byte
   Local Shigh As Byte
   Local Cacheidx As Word
   Local I As Byte
   Local J As Byte
   Local K As Byte
   Local L As Byte
   Read Swidth
   Read Shigh
   K = Yy + Shigh
   K = K - 1
   L = Xx + Swidth
   L = L - 1
   If K > 6 Then Goto End_show
   If L > 84 Then Goto End_show
 
   For I = Yy To K
   Cacheidx = I - 1
      Cacheidx = Cacheidx * 84
      Cacheidx = Cacheidx + Xx
      For J = Xx To L
         Read Ch
         Lcd_cache(cacheidx) = Ch
         Incr Cacheidx
      Next J
   Next I
   Updatelcd = 1
   End_show:
End Sub
 
'--------------------- ClearShow ----------------------
'XX 1 to (84-_width), YY 1 to 6 (n*8)
'must be RESTORE "data to show" before CALL it subrotine
Sub Clearshow(xx As Byte , Yy As Byte)
   Local Swidth As Byte
   Local Shigh As Byte
   Local Cacheidx As Word
   Local I As Byte
   Local J As Byte
   Local K As Byte
   Local L As Byte
   Read Swidth
   Read Shigh
   K = Yy + Shigh
   K = K - 1
   L = Xx + Swidth
   L = L - 1
   For I = Yy To K
   Cacheidx = I - 1
      Cacheidx = Cacheidx * 84
      Cacheidx = Cacheidx + Xx
      For J = Xx To L
         Lcd_cache(cacheidx) = 0
         Incr Cacheidx
      Next J
   Next I
   Updatelcd = 1
End Sub
 
 
End
'**************************end program******************************************
'*************************animacja startowa*************************************
 
 Sub Loading:                                               'animacja przy starcie
  Waitms 500
   Lcdclear
   Restore Logo
   Show 1 , 1
   Lcdupdate
  Wait 3
 Return
End Sub
'***************************koniec animacji start.******************************
'                              Character generator
 
'     This table defines the standard ASCII characters in a 5x7 dot format.
'------------------------------------------------------------------------------/
'wys.znzku 7piks/szer.5piks
$data
Fontlookup:
Data &H00 , &H00 , &H00 , &H00 , &H00 ,                     ' sp
Data &H00 , &H00 , &H2F , &H00 , &H00 ,                     ' !
Data &H00 , &H07 , &H00 , &H07 , &H00 , ' "
Data &H14 , &H7F , &H14 , &H7F , &H14 ,                     ' #
Data &H24 , &H2A , &H7F , &H2A , &H12 ,                     ' $
Data &HC4 , &HC8 , &H10 , &H26 , &H46 ,                     ' %
Data &H36 , &H49 , &H55 , &H22 , &H50 ,                     ' &
'Data &H00 , &H05 , &H03 , &H00 , &H00 ,                      '
Data &H06 , &H09 , &H09 , &H06 , &H00                       ''(stopien)
Data &H00 , &H1C , &H22 , &H41 , &H00 ,                     ' (
Data &H00 , &H41 , &H22 , &H1C , &H00 ,                     ' )
Data &H14 , &H08 , &H3E , &H08 , &H14 ,                     ' -
Data &H08 , &H08 , &H3E , &H08 , &H08 ,                     ' +
Data &H00 , &H00 , &H50 , &H30 , &H00 ,                     ' ,
Data &H10 , &H10 , &H10 , &H10 , &H10 ,                     ' -
Data &H00 , &H60 , &H60 , &H00 , &H00 ,                     ' .
Data &H20 , &H10 , &H08 , &H04 , &H02 ,                     ' /
Data &H3E , &H51 , &H49 , &H45 , &H3E ,                     ' 0
Data &H00 , &H42 , &H7F , &H40 , &H00 ,                     ' 1
Data &H42 , &H61 , &H51 , &H49 , &H46 ,                     ' 2
Data &H21 , &H41 , &H45 , &H4B , &H31 ,                     ' 3
Data &H18 , &H14 , &H12 , &H7F , &H10 ,                     ' 4
Data &H27 , &H45 , &H45 , &H45 , &H39 ,                     ' 5
Data &H3C , &H4A , &H49 , &H49 , &H30 ,                     ' 6
Data &H01 , &H71 , &H09 , &H05 , &H03 ,                     ' 7
Data &H36 , &H49 , &H49 , &H49 , &H36 ,                     ' 8
Data &H06 , &H49 , &H49 , &H29 , &H1E ,                     ' 9
Data &H00 , &H36 , &H36 , &H00 , &H00 ,                     ' :
Data &H00 , &H56 , &H36 , &H00 , &H00 ,                     ' ;
Data &H08 , &H14 , &H22 , &H41 , &H00 ,                     ' <
Data &H14 , &H14 , &H14 , &H14 , &H14 ,                     ' =
Data &H00 , &H41 , &H22 , &H14 , &H08 ,                     ' >
Data &H02 , &H01 , &H51 , &H09 , &H06 ,                     ' ?
Data &H32 , &H49 , &H59 , &H51 , &H3E ,                     ' @
Data &H7E , &H11 , &H11 , &H11 , &H7E ,                     ' A
Data &H7F , &H49 , &H49 , &H49 , &H36 ,                     ' B
Data &H3E , &H41 , &H41 , &H41 , &H22 ,                     ' C
Data &H7F , &H41 , &H41 , &H22 , &H1C ,                     ' D
Data &H7F , &H49 , &H49 , &H49 , &H41 ,                     ' E
Data &H7F , &H09 , &H09 , &H09 , &H01 ,                     ' F
Data &H3E , &H41 , &H49 , &H49 , &H7A ,                     ' G
Data &H7F , &H08 , &H08 , &H08 , &H7F ,                     ' H
Data &H00 , &H41 , &H7F , &H41 , &H00 ,                     ' I
Data &H20 , &H40 , &H41 , &H3F , &H01 ,                     ' J
Data &H7F , &H08 , &H14 , &H22 , &H41 ,                     ' K
Data &H7F , &H40 , &H40 , &H40 , &H40 ,                     ' L
Data &H7F , &H02 , &H0C , &H02 , &H7F ,                     ' M
Data &H7F , &H04 , &H08 , &H10 , &H7F ,                     ' N
Data &H3E , &H41 , &H41 , &H41 , &H3E ,                     ' O
Data &H7F , &H09 , &H09 , &H09 , &H06 ,                     ' P
Data &H3E , &H41 , &H51 , &H21 , &H5E ,                     ' Q
Data &H7F , &H09 , &H19 , &H29 , &H46 ,                     ' R
Data &H46 , &H49 , &H49 , &H49 , &H31 ,                     ' S
Data &H01 , &H01 , &H7F , &H01 , &H01 ,                     ' T
Data &H3F , &H40 , &H40 , &H40 , &H3F ,                     ' U
Data &H1F , &H20 , &H40 , &H20 , &H1F ,                     ' V
Data &H3F , &H40 , &H38 , &H40 , &H3F ,                     ' W
Data &H63 , &H14 , &H08 , &H14 , &H63 ,                     ' X
Data &H07 , &H08 , &H70 , &H08 , &H07 ,                     ' Y
Data &H61 , &H51 , &H49 , &H45 , &H43 ,                     ' Z
Data &H00 , &H7F , &H41 , &H41 , &H00 ,                     ' [
Data &H55 , &H2A , &H55 , &H2A , &H55 ,                     ' 55
Data &H00 , &H41 , &H41 , &H7F , &H00 ,                     ' ]
Data &H04 , &H02 , &H01 , &H02 , &H04 ,                     ' ^
Data &H40 , &H40 , &H40 , &H40 , &H40 ,                     ' _
Data &H00 , &H01 , &H02 , &H04 , &H00 ,                     ' '
Data &H20 , &H54 , &H54 , &H54 , &H78 ,                     ' a
Data &H7F , &H48 , &H44 , &H44 , &H38 ,                     ' b
Data &H38 , &H44 , &H44 , &H44 , &H20 ,                     ' c
Data &H38 , &H44 , &H44 , &H48 , &H7F ,                     ' d
Data &H38 , &H54 , &H54 , &H54 , &H18 ,                     ' e
Data &H08 , &H7E , &H09 , &H01 , &H02 ,                     ' f
Data &H0C , &H52 , &H52 , &H52 , &H3E ,                     ' g
Data &H7F , &H08 , &H04 , &H04 , &H78 ,                     ' h
Data &H00 , &H44 , &H7D , &H40 , &H00 ,                     ' i
Data &H20 , &H40 , &H44 , &H3D , &H00 ,                     ' j
Data &H7F , &H10 , &H28 , &H44 , &H00 ,                     ' k
Data &H00 , &H41 , &H7F , &H40 , &H00 ,                     ' l
Data &H7C , &H04 , &H18 , &H04 , &H78 ,                     ' m
Data &H7C , &H08 , &H04 , &H04 , &H78 ,                     ' n
Data &H38 , &H44 , &H44 , &H44 , &H38 ,                     ' o
Data &H7C , &H14 , &H14 , &H14 , &H08 ,                     ' p
Data &H08 , &H14 , &H14 , &H18 , &H7C ,                     ' q
Data &H7C , &H08 , &H04 , &H04 , &H08 ,                     ' r
Data &H48 , &H54 , &H54 , &H54 , &H20 ,                     ' s
Data &H04 , &H3F , &H44 , &H40 , &H20 ,                     ' t
Data &H3C , &H40 , &H40 , &H20 , &H7C ,                     ' u
Data &H1C , &H20 , &H40 , &H20 , &H1C ,                     ' v
Data &H3C , &H40 , &H30 , &H40 , &H3C ,                     ' w
Data &H44 , &H28 , &H10 , &H28 , &H44 ,                     ' x
Data &H0C , &H50 , &H50 , &H50 , &H3C ,                     ' y
Data &H44 , &H64 , &H54 , &H4C , &H44
 
'*****************************logo startowe*************************************
Logo:
Data 84 , 6,                                                ' Image Table Name, Xbytes, N of Lines, 506 bytes
Data &H06 , &H0E , &H0E , &H1E , &H1E , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE,
Data &HFE , &HFE , &HFC , &HF0 , &HC0 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &HC0 , &HF0,
Data &HFC , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &H1E , &H1E,
Data &H0E , &H0E , &H06 , &H00 , &H00 , &HC0 , &HE0 , &HF0 , &HF8 , &HFC , &HFC , &HFE , &HFE , &H3F , &H1F , &H0F,
Data &H0F , &H0F , &H0F , &H0F , &H0F , &H0F , &H0F , &H1F , &H1F , &H3E , &H3E , &H7E , &HFE , &HFE , &HFE , &HFF,
Data &HFF , &HFF , &HFF , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &H07,
Data &H0F , &H1F , &H3F , &H7F , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFC , &HF0 , &HC0 , &H00 , &HC0 , &HF0,
Data &HFC , &HFF , &HFF , &H7F , &H1F , &H07 , &H01 , &HC0 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF,
Data &HFF , &HFF , &H00 , &H80 , &H80 , &H00 , &H00 , &H00 , &H00 , &H3F , &H7F , &HFF , &HFF , &HFF , &HFF , &HFF,
Data &HFF , &HFE , &HFC , &HFC , &HFC , &HFC , &HF8 , &HF8 , &HF8 , &HF8 , &HF8 , &HF0 , &HF0 , &HF0 , &HF0 , &HF0,
Data &HE0 , &HE3 , &HC7 , &HDF , &HDF , &H1F , &H1F , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &HFF , &HFF , &HFF,
Data &HFF , &HFF , &HFF , &H00 , &H00 , &H00 , &H42 , &H7E , &H44 , &H02 , &H7C , &H44 , &H02 , &H7C , &H00 , &H34,
Data &H4A , &H4A , &H4A , &H2A , &H7C , &H40 , &H00 , &H42 , &H7E , &H44 , &H42 , &H42 , &H02 , &H00 , &H00 , &H3C,
Data &H4A , &H4A , &H4A , &H4A , &H4C , &H00 , &H00 , &H40 , &H7F , &H08 , &H1A , &H66 , &H42 , &H42 , &H00 , &H64,
Data &H4A , &H4A , &H4A , &H4A , &H36 , &H00 , &H00 , &H00 , &H66 , &H52 , &H4A , &H46 , &H62 , &H00 , &H00 , &H02,
Data &H0E , &H32 , &HC0 , &H32 , &H0E , &H02 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &HE0 , &HE0 , &HE0 , &HF0,
Data &HF0 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HF0 , &HF0 , &HE0 , &HE0 , &HE0 , &H00 , &H00 , &H07 , &H1F,
Data &H7F , &HFF , &HFF , &HFF , &HFF , &H7F , &H1F , &H07 , &H00 , &H00 , &HE0 , &HE0 , &HE0 , &HE0 , &HE0 , &HE7,
Data &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HE7 , &HE0 , &HE0 , &HE0 , &HE0 , &HE0 , &H00,
Data &H00 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &H7D , &H7C , &H7C , &HF8 , &HF8 , &HF0 , &HF0 , &HE0 , &HE0,
Data &HE0 , &HE0 , &HE0 , &HE0 , &HE1 , &HE1 , &HF1 , &HF0 , &HF8 , &HF9 , &HFF , &H7F , &H7F , &H3F , &H0F , &H03,
Data &H01 , &H81 , &H01 , &H81 , &H81 , &H81 , &H81 , &H01 , &H01 , &H01 , &H81 , &H81 , &H81 , &H01 , &H01 , &H81,
Data &H00 , &H80 , &H00 , &H00 , &H80 , &H81 , &H81 , &H01 , &H01 , &HE0 , &H00 , &H00 , &H80 , &H00 , &H01 , &H81,
Data &H81 , &H81 , &H01 , &H01 , &H81 , &H81 , &H81 , &H81 , &H81 , &H01 , &H81 , &H01 , &H01 , &H01 , &H81 , &H01,
Data &H01 , &HC1 , &H41 , &H20 , &HA0 , &HA1 , &H21 , &HA1 , &H41 , &H80 , &H00 , &H00 , &H80 , &H80 , &H80 , &H00,
Data &H01 , &H81 , &H01 , &H81 , &H81 , &H01 , &H01 , &H01 , &H01 , &H01 , &H81 , &H01 , &H81 , &H80 , &H00 , &H00,
Data &HE0 , &H00 , &H00 , &H00 , &H00 , &H1F , &H01 , &H00 , &H1F , &H00 , &H00 , &H1F , &H00 , &H0D , &H12 , &H12,
Data &H0A , &H1F , &H00 , &H1F , &H01 , &H00 , &H00 , &H0F , &H12 , &H12 , &H12 , &H0B , &H00 , &H1F , &H02 , &H0D,
Data &H10 , &H00 , &H09 , &H12 , &H12 , &H14 , &H09 , &H00 , &H10 , &H18 , &H16 , &H11 , &H10 , &H00 , &H01 , &H46,
Data &H38 , &H06 , &H01 , &H00 , &H1F , &H20 , &H4E , &H51 , &H50 , &H48 , &H5F , &H51 , &H48 , &H27 , &H00 , &H0F,
Data &H10 , &H10 , &H10 , &H0F , &H00 , &H7F , &H09 , &H10 , &H10 , &H0F , &H00 , &H00 , &H10 , &H00 , &H7F , &H09,
Data &H10 , &H10 , &H0F , &H00 , &H1F , &H00 , &H00 , &H00
'

Nie jesteśmy tutaj uwiązani do konkretnych portów procesora dla wyświetlacza i możemy je dowolnie definiować.




Portret użytkownika EDC

Odp. Bargraf dla 3310

Zerknij na moją stronę by zobaczyć jak się oblicza wartości procentowe względem pozycji i wielkości wyświetlacza.
>LINK<
Dla wyswietlaczy graficznych istnieją biblioteki które umożliwiają rysowanie "Boxów" czyli prostokątów. Prostokąty mogą być wypełnione lub nie. Narysowanie bargragu wtedy sprowadza się do narysowania prostokąta pustego w środku na całą długość wyświetlacza a wartością bargrafu jest drugi, mniejszy, prostokat narysowany w środku tego większego tylko ten już jest wypełniony. Przeliczyć tylko musisz sobie wartosc procentowa na ilośc pikseli - długośc mniejszego prostokąta.
Pobawie sie i dodam chyba do jutra taki przykład

-

BARTek
Moja strona

Portret użytkownika marekszy

Bargraf dla 3310

No właśnie o coś takiego mi chodziło, dzięki za link do Twojej strony, na pewno ograniczy to z mojej strony mnóstwo bzdurnych pytań.
Teraz to przestudiuję ,a jutro jak wrócę z roboty i trochę się kimnę to zacznę to ćwiczyć. Jak dasz radę zapodać jutro przykładzik to wiele ułatwi, ale i tak będzie dobra zabawa i przy okazji nauka.

Portret użytkownika EDC

Odp.Bargraf dla 3310

Tak mi jeszcze wpadło do głowy, że jeśli możesz wyświetlać tekst w invercie (na czarnym tle) to możesz rysować spacje w invercie jako kolejne znaki. Tutaj masz link do biblioteki która powstała w 2014 roku już i jest w asemblerze. W środku sa przykładowe pliki. Piny tez konfigurowalne.
Tu przykład Bargrafu zrobionego na Boxach jeśli biblioteka potrafi rysowac linie

'create a bargraph effect
Boxfill(0 , 0) -(60 , 10) , 1
Boxfill(2 , 2) -(40 , 8) , 0

Na wiki jest opis BOX i BOXFILL

-

BARTek
Moja strona

Portret użytkownika gosc

Bargraf dla 3310

Niestety kombinowałem i nic mądrego nie wymyśliłem, mógłbym poprosić o jakiegoś gotowca z opisami abym mógł to pokumać i pokombinować na nim.

Portret użytkownika EDC

Odp. Wyświetlacze graficzne

Okay. "Poczyniłem" pewien obrazek żeby każdy mógł zrozumieć o co chodzi. Napisanie kodu nie wyjaśniło by sprawy. Otóż, komunikacja z wyświetlaczem jak prawie wszystko w ośmiobitowcach opiera się na Bajtach które mają osiem bitów.
Żeby cokolwiek zmienić na wyświetlaczu trzeba do niego wysłać "przynajmniej" bajt. Zapalenie lub zgaszenie jednego tylko piksela polega na tym że odczytujemy cały bajt z wyświetlacza i zmieniamy jeden bit w bajcie po czym wpisujemy ten zmieniony bajt w miejsce odczytanego. Jeśli znak jest mniejszy od ośmiu pikseli to i tak musi być wysłany jako bajt. Dlatego w tym foncie 5x7 pod cyfrą jest wolna linia. Są dwie możliwości "orientacji" bajtów. W tym wyświetlaczu wrzucane są tak że bajt zajmuje osiem linii, ale jedna kolumnę. W innych wyświetlaczach można się spotkać z układaniem jak cegły w murze.

W przypadku Nokii mamy ten dolny przykład. Na drugim obrazku widać że żeby narysować cyfrę Osiem musimy wysłać sześć bajtów. Pięć z nich pochodzi z tablicy fontów a szósty dodawany jest przez program jako odstęp. Jeśli wartości &H z tablicy fontów wrzucisz na Windows`owski kalkulator i przełączycz na układ binarny to zobaczysz które piksele będą zapalone a które nie.
Żeby więc narysować bargraf trzeba tylko wiedzieć jak chce się żeby wyglądał i sobie taki bajt stworzyć a potem powtórzyć jego wysyłanie tyle razy ile chcemy. Można w tym celu przerobić sobie sub wyświetlający jeden znak i dodać obliczenia dla bargrafu. W Twojej "bibliotece" działa się na buforze i dopiero potem wysyła całość na wyświetlacz. Działa się więc od 1 - 84 dla jednego wiersza. Procedura wysyłania na wyświetlacz sama odejmuje jeden bo koordynaty wyświetlacza faktycznie zaczynają się od zera.

Myślę że z matematyką to już problemów nie będzie :P

-

BARTek
Moja strona

Portret użytkownika marekszy

Wyświetlacze graficzne

no i super,wielkie dzięki,o to właśnie chodzi ,żeby wiedzieć co i dla czego tak się dzieje

Portret użytkownika EDC

Odp. Wyświetlacze graficzne

Proszę taki pomysł mój który możesz przerobić jak chcesz.

'jesli przyjąć że temperatura od 0 do 84 stopni
Dim Offset As Word , Lcdcacheidx As Word
Dim _start As Word , _end As Word
Dim Licznik As Word , Temperatura As Word
Dom Bargraf_znak As Byte
Dim Wiersz As Byte
Wiersz = 1
 
 
 
 
 
Rysuj_bargraf:
 
Select Case Wiersz
 Case 1 : Offset = 0
 Case 2 : Offset = 85
 Case 3 : Offset = 169
 Case 4 : Offset = 253
End Select
 
_start = Offset
_end = _start + 84
Licznik = 0
'od lewej do prawej przez cały wyswietlacz co oczywiście można zmienić
'jesli licznik w petli niższy od temperatury to wypełnia bargraf, potem do konca rysuje puste
For Lcdcacheidx = _start To _end
    If Licznik <= Temperatura Then Bargraf_znak = &H3C Else Bargraf_znak = 0
     Lcd_cache(lcdcacheidx) = Bargraf_znak
     Incr Licznik
Next
Return

To taki najbrzydszy bargraf w celu przedstawienia. Bardzo łątwo możesz zrobić taki

Pierwszy bajt 255, drugi taki jak dla 0 tylko z kropkami po brzegach czyli zamiast 0 będzie &B10000001, potem ten od wartośi &B10111101 i znów ten z kropkami i na koniec 255 :D

-

BARTek
Moja strona

Portret użytkownika marekszy

Wyświetlacze graficzne

Niestety wszystko się kaszani, żeby cokolwiek w miarę działało muszę wrzucać do pętli głównej ,chciałem dać w przerwaniach od timera0 ale procesor tak zamula ,że nie ma sensu( nawet termometr musi byś w pętli gł.).Odpuszczm na kilka dni, później zacznę od nowa.

Portret użytkownika EDC

Odp.LCD Nokii

Myślę, że ten termometr z tym oczekiwaniem 750ms w pętli głównej i w złej kolejności to tylko do testów wyświetlacza tak beznadziejnie wstawiłeś...Poza tym użyłbyś tej drugiej biblioteki i rysował tylko to co potrzebne/zmieniło się/ i wymaga ponownego narysowania, a nie pół kilobajta wysyłał. Mam w domu dwie takie Nokie na części ale jestem poza domem, wiec się nie pobawię.
..masz to chyba źle napisane a do Megi możesz dolutować kwarc :D

-

BARTek
Moja strona

Portret użytkownika marekszy

LCD Nokii

Tak,termometr tylko do testów, aby na czymś przećwiczyć.Kwarc mam wlutowany 4MHz ,ale i tak to wszystko źle działa .

Portret użytkownika EDC

Odp.LCD Nokii

Wyślij koda na mój @mail to może coś doradze ;) a z kwarcem to myślalem o szybszym hahaha a nie 4MHz..to już lepiej by śmigał na wewnętrznym 8MHz :D Dodatkowo mam nadzieje, że w kodzie masz tak samo ustawione jak masz w procesorze FuseBity i predkość. Najlepiej kazać procesorowi pomigać dioda z częśtotliwością 1s żeby zobaczyć czy napewno to jest jedna sekunda.

-

BARTek
Moja strona

Portret użytkownika marekszy

LCD Nokii

Niestety na razie nie mogę Tobie nic podesłać ,wszystko usunąłem ponieważ chciałem zacząć wszystko od początku, a poprzednie wypociny by mnie tylko sprowadzały do punktu wyjścia. Tak sobie jeszcze myślę, że problem może tkwić w samej Atmedze (jest to 168V) i trochę różni się od swoich poprzedników.Zasilałem ją z 5V ale nie wiem czy przypadkiem nie trzeba jeszcze czegoś w fusach przestawić (ma 2zakresy napięć pracy a co za tym idzie 2 zakresy częstotliwości taktowania).Faktycznie na wewnętrznym 8 MHz było trochę lepiej.Muszę jeszcze popatrzeć jak się ustawia w niej Timery, czy aby tak samo jak w innych atmegach.No i oczywiście dzielnik przez 8 wyłączony.

Portret użytkownika marekszy

LCD Nokii

I o dziwo działa tak jak należy,nawet na kwarcu 4MHz

'***********************test z termometrem  dziala*****************************
'******************nokia 5110 szer.84x wys.48 piks. ***************************
 
$regfile = "m168def.dat"
$crystal = 4000000
 
$hwstack = 128
$swstack = 128
$framesize = 128
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
'***********************************LCD****************************************
Dim Flaga_4ms As Bit , Flaga_100ms As Bit , Flaga_1s As Bit
Dim Dzielnik As Byte , Dzielnik2 As Byte
 
Dim Lcd_data As Byte
Dim Updatelcd As Bit                                        '1 = aktualizacja programu
Dim Lcd_cache(504) As Byte                                  'wyslanie danych do LCD RAM
Dim Lcdcacheidx As Word                                     'wskaznik
Dim Ch As Byte
 
Dim Offset As Word , Lcdcacheidx_3 As Word
Dim _start As Word , _end As Word
Dim Licznik_3 As Word , Temperatura As Word
Dim Bargraf_znak As Byte
Dim Wiersz As Byte
Wiersz = 1
 
'********************************termometr*************************************
Config 1wire = Portd.4
                                      ' konfiguracja portu PD.5 jako wejścia magistrali 1-wire
Dim Temp As Word , Hsingle As Word , T1_word As Word
Dim Odczyt(2) As Byte , T As Integer , T1 As Single , Napis As String * 5
Dim Alarm As Byte
'Deklaracja wszystkich zmiennych potrzebnych do pracy programu
 
'**********************************aliasy**************************************
Zasilanie Alias Portd.6 : Config Pind.6 = 1 : Portd.6 = 0
Sclk Alias Portd.7 : Config Pind.7 = 1 : Portd.7 = 0
Sdin Alias Portb.0 : Config Pinb.0 = 1 : Portb.0 = 0
Dc Alias Portb.1 : Config Pinb.1 = 1 : Portb.1 = 0
Sce Alias Portb.2 : Config Pinb.2 = 1 : Portb.2 = 0
Res Alias Portb.3 : Config Pinb.3 = 1 : Portb.3 = 0
'********************************stale LCD constants***************************
Const Lcd_inver = &H0D                                      'odwrocony ekran (po normalnym trybie polecen)
Const Lcd_normal = &H0C                                     'normalny ekran (po normalnym trybie polecen)
Const Test = &H09                                           'wszystkie piksele wlaczone (po normalnym trybie poleceń)
Const Normal_command = &H20                                 'normalny tryb polecen
 
 
'***************************deklaracje Sub LCD*********************************
Declare Sub Lcdcmd_(byval Command As Byte )
Declare Sub Lcdinit
Declare Sub Lcdclear
Declare Sub Lcdupdate
Declare Sub Lcdgoxy(byval X As Byte , Byval Y As Byte)
Declare Sub Lcdchr(byval Ch As Byte , Byval Lcdfontsize As Byte , Byval Ch_inv As Byte)
Declare Sub Lcdstr(byval Lcdstring As String , Byval Lcdfontsize As Byte , Byval Ch_inv As Byte)
Declare Sub Show(byval Xx As Byte , Byval Yy As Byte)
Declare Sub Clearshow(byval Xx As Byte , Byval Yy As Byte)
 
 
   Reset Res                                                'RESET LCD
   Waitms 10
   Set Res
'********************************** LCD Init **********************************
Call Lcdinit                                                'musi być najpierw w programie!!!
 
Declare Sub Loading                                         'animacja wyswietlaczy LED w trakcie startu
Loading
 
'niech DS ma już gotowa temp
 1wreset
 1wwrite &HCC
 1wwrite &H44
Lcdclear
 
Do
 
 
 If Flaga_4ms = 1 Then                                      'co 4ms
     Flaga_4ms = 0
'co ma byc co 4ms
  End If
   If Flaga_100ms = 1 Then                                  ' co 100ms
      Flaga_100ms = 0
     'co ma byc po 100ms
     'Gosub Rysuj_bargraf
     End If
    If Flaga_1s = 1 Then                                    'co 1s
       Flaga_1s = 0
'co ma byc co 1s
 Gosub Temperatura_1
 Gosub Rysuj_bargraf
    End If
 
 Loop
 End
 
 
'***************************przerwanie timer0**********************************
Prztimer0:
 Timer0 = 195                                               'dla 4MHz=195/dla 8MHz=132
 Flaga_4ms = 1
 Incr Dzielnik
 If Dzielnik = 25 Then                                      '25*4ms = 100ms
   Dzielnik = 0
   Flaga_100ms = 1
   Incr Dzielnik2
   If Dzielnik2 = 10 Then                                   '10*100ms=1s'
    Dzielnik2 = 0
    Flaga_1s = 1
   End If
 End If
Return
'************************podprogram pom.temperatury****************************
 
Temperatura_1:
 
  1wreset                                                   ' tu czytasz temperature
  1wwrite &HCC
  1wwrite &HBE
   Odczyt(1) = 1wread(2)
   T = Odczyt(2)
  Shift T , Left , 8
   T = T + Odczyt(1)
   T1 = T * 0.0625
   T1_word = T1
 
Napis = Fusing(t1 , "#.#")
  Lcdgoxy 2 , 1
  Lcdstr "temperatura" , 1 , 0
  Lcdgoxy 10 , 4
  Lcdstr "'C" , 2 , 0
  Lcdgoxy 2 , 4                                             'wysw.temperatury
  Lcdstr , Napis , 2 , 0
  Lcdupdate
 
 
 1wreset                                                    ' tu kazesz DS`owi przygotować nowy odczyt
 If Err = 0 Then
  1wwrite &HCC                                              ' i za sekunde juz będzie gotowy
  1wwrite &H44
  Alarm = 0
  Else
  Alarm = 1
 End If
Return
'******************************************************************************
 
Rysuj_bargraf:
 
Select Case Wiersz
 Case 1 : Offset = 0
 Case 2 : Offset = 85
 Case 3 : Offset = 169
 Case 4 : Offset = 253
End Select
 
_start = Offset
_end = _start + 84
Licznik_3 = 0
'od lewej do prawej przez cały wyswietlacz co oczywiście można zmienić
'jesli licznik w petli niższy od temperatury to wypełnia bargraf, potem do konca rysuje puste
For Lcdcacheidx_3 = _start To _end
    If Licznik_3 <= Temperatura Then Bargraf_znak = &H3C Else Bargraf_znak = 0
     Lcd_cache(lcdcacheidx_3) = Bargraf_znak
     Incr Licznik_3
Next
Return
 
 
'****************************podprogramy LCD***********************************
'****************************Lcdcmd (Command)**********************************
Sub Lcdcmd_(byval Command As Byte )
Local Licznik As Byte
Sce = 0                                                     'wlaczenie(SCE)
Dc = 0
For Licznik = 7 To 0 Step -1
Sclk = 0
Sdin = Command.licznik
Sclk = 1
Next Licznik
Sclk = 0
Sce = 1
End Sub
 
'----------------------- Lcdinit ------------------------------
Sub Lcdinit
   Waitms 50
   Set Zasilanie
   Waitms 5
   Reset Res                                                'RESET LCD
   Waitms 5
   Set Res                                                  'end of reset
   Set Sce                                                  'in Lcdcmd() will be "L"!
   Call Lcdcmd_(&H21)                                       'extended command mode
   Call Lcdcmd_(&Hc1)                                       'Hb/Hc do 9 LCD contrast (nalezy dobrac)
   Call Lcdcmd_(&H06)                                       'temperature compensation
   Call Lcdcmd_(&H13)                                       'bias 1:48
   Call Lcdcmd_(&H20)                                       'normal command mode
   Call Lcdcmd_(&H0c)                                       'normal display
   Call Lcdcmd_(&H40)                                       'Y=0
   Call Lcdcmd_(&H80)                                       'X=0
   Call Lcdclear
   Call Lcdupdate
End Sub
 
'---------------------- Lcdclear ------------------------------
Sub Lcdclear
   Call Lcdcmd_(&H40)                                       'Y=0
   Call Lcdcmd_(&H80)                                       'X=0
   Local I As Word
   For I = 1 To 504
       Lcd_cache(i) = 0
   Next I
End Sub
'--------------------- Lcdupdate -------------------------------
Sub Lcdupdate
   Local I As Word
   Local Licznik As Byte
   Call Lcdcmd_(&H80)                                       'sets 0 X-addr of RAM
   Call Lcdcmd_(&H40)                                       'sets 0 Y-addr of RAM
   For I = 1 To 504
     Lcd_data = Lcd_cache(i)
     Sce = 0                                                'enable (SCE)
     Dc = 1
     For Licznik = 7 To 0 Step -1
     Sclk = 0
     Sdin = Lcd_data.licznik
     Sclk = 1
     Next Licznik
     Sclk = 0
     Sce = 1
   Next I
   Updatelcd = 0
End Sub
 
'--------------------- Lcdgoxy--------------------------------
Sub Lcdgoxy(byval X As Byte , Byval Y As Byte)              'from 1,1 to 14,6
   Local I As Word
   Local J As Word
   X = X - 1
   I = X
   I = I * 6
   Y = Y - 1
   J = Y
   J = Y * 84
   Lcdcacheidx = I + J
   Incr Lcdcacheidx                                         'Lcdchacheidx 1-504!
End Sub
 
'------------------ Lcdchr-------------------------------------
Sub Lcdchr(byval Ch As Byte , Byval Lcdfontsize As Byte , Byval Ch_inv As Byte)       '1 character on LCD
   Local I As Byte
   Local J As Word
   Local K As Byte
   Local Ba As Byte
   Local Bb As Byte
   Local Tmpidx As Word
   Local Tmpidx1 As Word
   If Ch < &H20 Then Ch = 92
   If Ch > &H7B Then Ch = 92
   J = Ch - 32
   J = J * 5
   If Lcdfontsize = 1 Then
      For I = 1 To 6
         K = Lookup(j , Fontlookup)
         If Ch_inv = 1 Then                                 'negative
            If I = 6 Then                                   'black for 6 row
               K = 255
            Else
               K = K Xor &HFF
            End If
         Else
            If I = 6 Then                                   'white for 6 row
               K = 0
            End If
         End If
 
         Lcd_cache(lcdcacheidx) = K
         Incr Lcdcacheidx
         Incr J
      Next I
   Else                                                     'high 2
      Tmpidx = Lcdcacheidx - 84                             'signs go up and can't be at 1,x
      For I = 1 To 6
         If I = 6 Then
            If Ch_inv = 1 Then
               K = 255
            Else
               K = 0
            End If
         Else
            K = Lookup(j , Fontlookup)
            If Ch_inv = 1 Then
               K = K Xor &HFF
            End If
         End If
         Ba.0 = K.0
         Ba.1 = K.0
         Ba.2 = K.1
         Ba.3 = K.1
         Ba.4 = K.2
         Ba.5 = K.2
         Ba.6 = K.3
         Ba.7 = K.3
 
         Bb.0 = K.4
         Bb.1 = K.4
         Bb.2 = K.5
         Bb.3 = K.5
         Bb.4 = K.6
         Bb.5 = K.6
         Bb.6 = K.7
         Bb.7 = K.7
 
         Lcd_cache(tmpidx) = Ba                             'up of character
         Incr Tmpidx
         Lcd_cache(tmpidx) = Ba                             'double wide
         Incr Tmpidx
         Tmpidx1 = Tmpidx + 82
         Lcd_cache(tmpidx1) = Bb                            'down of character
         Incr Tmpidx1
         Lcd_cache(tmpidx1) = Bb                            'double wide
         Incr J
      Next I
      Lcdcacheidx = Lcdcacheidx + 12                        '6+6
  End If
  Kon_lcdchr:
End Sub
'-------------------- Lcdstr----------------------------------------
Sub Lcdstr(lcdstring As String , Lcdfontsize As Byte , Ch_inv As Byte)
   Local M As Byte
   Local N As String * 1
   For M = 1 To Len(lcdstring)
      N = Mid(lcdstring , M , 1)
      Ch = Asc(n)
      Call Lcdchr(ch , Lcdfontsize , Ch_inv )
   Next M
End Sub
 
'--------------------- Show ----------------------
 'XX 1 to (84-_width), YY 1 to 6 (n*8)
 'must be RESTORE "data to show" before CALL it subrotine
Sub Show(xx As Byte , Yy As Byte)
   Local Swidth As Byte
   Local Shigh As Byte
   Local Cacheidx As Word
   Local I As Byte
   Local J As Byte
   Local K As Byte
   Local L As Byte
   Read Swidth
   Read Shigh
   K = Yy + Shigh
   K = K - 1
   L = Xx + Swidth
   L = L - 1
   If K > 6 Then Goto End_show
   If L > 84 Then Goto End_show
 
   For I = Yy To K
   Cacheidx = I - 1
      Cacheidx = Cacheidx * 84
      Cacheidx = Cacheidx + Xx
      For J = Xx To L
         Read Ch
         Lcd_cache(cacheidx) = Ch
         Incr Cacheidx
      Next J
   Next I
   Updatelcd = 1
   End_show:
End Sub
 
'--------------------- ClearShow ----------------------
'XX 1 to (84-_width), YY 1 to 6 (n*8)
'must be RESTORE "data to show" before CALL it subrotine
Sub Clearshow(xx As Byte , Yy As Byte)
   Local Swidth As Byte
   Local Shigh As Byte
   Local Cacheidx As Word
   Local I As Byte
   Local J As Byte
   Local K As Byte
   Local L As Byte
   Read Swidth
   Read Shigh
   K = Yy + Shigh
   K = K - 1
   L = Xx + Swidth
   L = L - 1
   For I = Yy To K
   Cacheidx = I - 1
      Cacheidx = Cacheidx * 84
      Cacheidx = Cacheidx + Xx
      For J = Xx To L
         Lcd_cache(cacheidx) = 0
         Incr Cacheidx
      Next J
   Next I
   Updatelcd = 1
End Sub
'End
'**************************end program******************************************
Wyswietlanie:
 
'*************************animacja startowa*************************************
 
 Sub Loading:                                               'animacja przy starcie
  Waitms 500
   Lcdclear
   Restore Logo
   Show 1 , 1
   Lcdupdate
  Wait 3
 Return
End Sub
'***************************koniec animacji start.******************************
'                              Character generator
 
'     This table defines the standard ASCII characters in a 5x7 dot format.
'------------------------------------------------------------------------------/
'wys.znzku 7piks/szer.5piks
$data
Fontlookup:
Data &H00 , &H00 , &H00 , &H00 , &H00 ,                     ' sp
Data &H00 , &H00 , &H2F , &H00 , &H00 ,                     ' !
Data &H00 , &H07 , &H00 , &H07 , &H00 , ' "
Data &H14 , &H7F , &H14 , &H7F , &H14 ,                     ' #
Data &H24 , &H2A , &H7F , &H2A , &H12 ,                     ' $
Data &HC4 , &HC8 , &H10 , &H26 , &H46 ,                     ' %
Data &H36 , &H49 , &H55 , &H22 , &H50 ,                     ' &
'Data &H00 , &H05 , &H03 , &H00 , &H00 ,                      '
Data &H06 , &H09 , &H09 , &H06 , &H00                       ''(stopien)
Data &H00 , &H1C , &H22 , &H41 , &H00 ,                     ' (
Data &H00 , &H41 , &H22 , &H1C , &H00 ,                     ' )
Data &H14 , &H08 , &H3E , &H08 , &H14 ,                     ' -
Data &H08 , &H08 , &H3E , &H08 , &H08 ,                     ' +
Data &H00 , &H00 , &H50 , &H30 , &H00 ,                     ' ,
Data &H10 , &H10 , &H10 , &H10 , &H10 ,                     ' -
Data &H00 , &H60 , &H60 , &H00 , &H00 ,                     ' .
Data &H20 , &H10 , &H08 , &H04 , &H02 ,                     ' /
Data &H3E , &H51 , &H49 , &H45 , &H3E ,                     ' 0
Data &H00 , &H42 , &H7F , &H40 , &H00 ,                     ' 1
Data &H42 , &H61 , &H51 , &H49 , &H46 ,                     ' 2
Data &H21 , &H41 , &H45 , &H4B , &H31 ,                     ' 3
Data &H18 , &H14 , &H12 , &H7F , &H10 ,                     ' 4
Data &H27 , &H45 , &H45 , &H45 , &H39 ,                     ' 5
Data &H3C , &H4A , &H49 , &H49 , &H30 ,                     ' 6
Data &H01 , &H71 , &H09 , &H05 , &H03 ,                     ' 7
Data &H36 , &H49 , &H49 , &H49 , &H36 ,                     ' 8
Data &H06 , &H49 , &H49 , &H29 , &H1E ,                     ' 9
Data &H00 , &H36 , &H36 , &H00 , &H00 ,                     ' :
Data &H00 , &H56 , &H36 , &H00 , &H00 ,                     ' ;
Data &H08 , &H14 , &H22 , &H41 , &H00 ,                     ' <
Data &H14 , &H14 , &H14 , &H14 , &H14 ,                     ' =
Data &H00 , &H41 , &H22 , &H14 , &H08 ,                     ' >
Data &H02 , &H01 , &H51 , &H09 , &H06 ,                     ' ?
Data &H32 , &H49 , &H59 , &H51 , &H3E ,                     ' @
Data &H7E , &H11 , &H11 , &H11 , &H7E ,                     ' A
Data &H7F , &H49 , &H49 , &H49 , &H36 ,                     ' B
Data &H3E , &H41 , &H41 , &H41 , &H22 ,                     ' C
Data &H7F , &H41 , &H41 , &H22 , &H1C ,                     ' D
Data &H7F , &H49 , &H49 , &H49 , &H41 ,                     ' E
Data &H7F , &H09 , &H09 , &H09 , &H01 ,                     ' F
Data &H3E , &H41 , &H49 , &H49 , &H7A ,                     ' G
Data &H7F , &H08 , &H08 , &H08 , &H7F ,                     ' H
Data &H00 , &H41 , &H7F , &H41 , &H00 ,                     ' I
Data &H20 , &H40 , &H41 , &H3F , &H01 ,                     ' J
Data &H7F , &H08 , &H14 , &H22 , &H41 ,                     ' K
Data &H7F , &H40 , &H40 , &H40 , &H40 ,                     ' L
Data &H7F , &H02 , &H0C , &H02 , &H7F ,                     ' M
Data &H7F , &H04 , &H08 , &H10 , &H7F ,                     ' N
Data &H3E , &H41 , &H41 , &H41 , &H3E ,                     ' O
Data &H7F , &H09 , &H09 , &H09 , &H06 ,                     ' P
Data &H3E , &H41 , &H51 , &H21 , &H5E ,                     ' Q
Data &H7F , &H09 , &H19 , &H29 , &H46 ,                     ' R
Data &H46 , &H49 , &H49 , &H49 , &H31 ,                     ' S
Data &H01 , &H01 , &H7F , &H01 , &H01 ,                     ' T
Data &H3F , &H40 , &H40 , &H40 , &H3F ,                     ' U
Data &H1F , &H20 , &H40 , &H20 , &H1F ,                     ' V
Data &H3F , &H40 , &H38 , &H40 , &H3F ,                     ' W
Data &H63 , &H14 , &H08 , &H14 , &H63 ,                     ' X
Data &H07 , &H08 , &H70 , &H08 , &H07 ,                     ' Y
Data &H61 , &H51 , &H49 , &H45 , &H43 ,                     ' Z
Data &H00 , &H7F , &H41 , &H41 , &H00 ,                     ' [
Data &H55 , &H2A , &H55 , &H2A , &H55 ,                     ' 55
Data &H00 , &H41 , &H41 , &H7F , &H00 ,                     ' ]
Data &H04 , &H02 , &H01 , &H02 , &H04 ,                     ' ^
Data &H40 , &H40 , &H40 , &H40 , &H40 ,                     ' _
Data &H00 , &H01 , &H02 , &H04 , &H00 ,                     ' '
Data &H20 , &H54 , &H54 , &H54 , &H78 ,                     ' a
Data &H7F , &H48 , &H44 , &H44 , &H38 ,                     ' b
Data &H38 , &H44 , &H44 , &H44 , &H20 ,                     ' c
Data &H38 , &H44 , &H44 , &H48 , &H7F ,                     ' d
Data &H38 , &H54 , &H54 , &H54 , &H18 ,                     ' e
Data &H08 , &H7E , &H09 , &H01 , &H02 ,                     ' f
Data &H0C , &H52 , &H52 , &H52 , &H3E ,                     ' g
Data &H7F , &H08 , &H04 , &H04 , &H78 ,                     ' h
Data &H00 , &H44 , &H7D , &H40 , &H00 ,                     ' i
Data &H20 , &H40 , &H44 , &H3D , &H00 ,                     ' j
Data &H7F , &H10 , &H28 , &H44 , &H00 ,                     ' k
Data &H00 , &H41 , &H7F , &H40 , &H00 ,                     ' l
Data &H7C , &H04 , &H18 , &H04 , &H78 ,                     ' m
Data &H7C , &H08 , &H04 , &H04 , &H78 ,                     ' n
Data &H38 , &H44 , &H44 , &H44 , &H38 ,                     ' o
Data &H7C , &H14 , &H14 , &H14 , &H08 ,                     ' p
Data &H08 , &H14 , &H14 , &H18 , &H7C ,                     ' q
Data &H7C , &H08 , &H04 , &H04 , &H08 ,                     ' r
Data &H48 , &H54 , &H54 , &H54 , &H20 ,                     ' s
Data &H04 , &H3F , &H44 , &H40 , &H20 ,                     ' t
Data &H3C , &H40 , &H40 , &H20 , &H7C ,                     ' u
Data &H1C , &H20 , &H40 , &H20 , &H1C ,                     ' v
Data &H3C , &H40 , &H30 , &H40 , &H3C ,                     ' w
Data &H44 , &H28 , &H10 , &H28 , &H44 ,                     ' x
Data &H0C , &H50 , &H50 , &H50 , &H3C ,                     ' y
Data &H44 , &H64 , &H54 , &H4C , &H44
 
'*****************************logo startowe*************************************
Logo:
Data 84 , 6,                                                ' Image Table Name, Xbytes, N of Lines, 506 bytes
Data &H06 , &H0E , &H0E , &H1E , &H1E , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE,
Data &HFE , &HFE , &HFC , &HF0 , &HC0 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &HC0 , &HF0,
Data &HFC , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &HFE , &H1E , &H1E,
Data &H0E , &H0E , &H06 , &H00 , &H00 , &HC0 , &HE0 , &HF0 , &HF8 , &HFC , &HFC , &HFE , &HFE , &H3F , &H1F , &H0F,
Data &H0F , &H0F , &H0F , &H0F , &H0F , &H0F , &H0F , &H1F , &H1F , &H3E , &H3E , &H7E , &HFE , &HFE , &HFE , &HFF,
Data &HFF , &HFF , &HFF , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &H07,
Data &H0F , &H1F , &H3F , &H7F , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFC , &HF0 , &HC0 , &H00 , &HC0 , &HF0,
Data &HFC , &HFF , &HFF , &H7F , &H1F , &H07 , &H01 , &HC0 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF,
Data &HFF , &HFF , &H00 , &H80 , &H80 , &H00 , &H00 , &H00 , &H00 , &H3F , &H7F , &HFF , &HFF , &HFF , &HFF , &HFF,
Data &HFF , &HFE , &HFC , &HFC , &HFC , &HFC , &HF8 , &HF8 , &HF8 , &HF8 , &HF8 , &HF0 , &HF0 , &HF0 , &HF0 , &HF0,
Data &HE0 , &HE3 , &HC7 , &HDF , &HDF , &H1F , &H1F , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &HFF , &HFF , &HFF,
Data &HFF , &HFF , &HFF , &H00 , &H00 , &H00 , &H42 , &H7E , &H44 , &H02 , &H7C , &H44 , &H02 , &H7C , &H00 , &H34,
Data &H4A , &H4A , &H4A , &H2A , &H7C , &H40 , &H00 , &H42 , &H7E , &H44 , &H42 , &H42 , &H02 , &H00 , &H00 , &H3C,
Data &H4A , &H4A , &H4A , &H4A , &H4C , &H00 , &H00 , &H40 , &H7F , &H08 , &H1A , &H66 , &H42 , &H42 , &H00 , &H64,
Data &H4A , &H4A , &H4A , &H4A , &H36 , &H00 , &H00 , &H00 , &H66 , &H52 , &H4A , &H46 , &H62 , &H00 , &H00 , &H02,
Data &H0E , &H32 , &HC0 , &H32 , &H0E , &H02 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &HE0 , &HE0 , &HE0 , &HF0,
Data &HF0 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HF0 , &HF0 , &HE0 , &HE0 , &HE0 , &H00 , &H00 , &H07 , &H1F,
Data &H7F , &HFF , &HFF , &HFF , &HFF , &H7F , &H1F , &H07 , &H00 , &H00 , &HE0 , &HE0 , &HE0 , &HE0 , &HE0 , &HE7,
Data &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HE7 , &HE0 , &HE0 , &HE0 , &HE0 , &HE0 , &H00,
Data &H00 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &H7D , &H7C , &H7C , &HF8 , &HF8 , &HF0 , &HF0 , &HE0 , &HE0,
Data &HE0 , &HE0 , &HE0 , &HE0 , &HE1 , &HE1 , &HF1 , &HF0 , &HF8 , &HF9 , &HFF , &H7F , &H7F , &H3F , &H0F , &H03,
Data &H01 , &H81 , &H01 , &H81 , &H81 , &H81 , &H81 , &H01 , &H01 , &H01 , &H81 , &H81 , &H81 , &H01 , &H01 , &H81,
Data &H00 , &H80 , &H00 , &H00 , &H80 , &H81 , &H81 , &H01 , &H01 , &HE0 , &H00 , &H00 , &H80 , &H00 , &H01 , &H81,
Data &H81 , &H81 , &H01 , &H01 , &H81 , &H81 , &H81 , &H81 , &H81 , &H01 , &H81 , &H01 , &H01 , &H01 , &H81 , &H01,
Data &H01 , &HC1 , &H41 , &H20 , &HA0 , &HA1 , &H21 , &HA1 , &H41 , &H80 , &H00 , &H00 , &H80 , &H80 , &H80 , &H00,
Data &H01 , &H81 , &H01 , &H81 , &H81 , &H01 , &H01 , &H01 , &H01 , &H01 , &H81 , &H01 , &H81 , &H80 , &H00 , &H00,
Data &HE0 , &H00 , &H00 , &H00 , &H00 , &H1F , &H01 , &H00 , &H1F , &H00 , &H00 , &H1F , &H00 , &H0D , &H12 , &H12,
Data &H0A , &H1F , &H00 , &H1F , &H01 , &H00 , &H00 , &H0F , &H12 , &H12 , &H12 , &H0B , &H00 , &H1F , &H02 , &H0D,
Data &H10 , &H00 , &H09 , &H12 , &H12 , &H14 , &H09 , &H00 , &H10 , &H18 , &H16 , &H11 , &H10 , &H00 , &H01 , &H46,
Data &H38 , &H06 , &H01 , &H00 , &H1F , &H20 , &H4E , &H51 , &H50 , &H48 , &H5F , &H51 , &H48 , &H27 , &H00 , &H0F,
Data &H10 , &H10 , &H10 , &H0F , &H00 , &H7F , &H09 , &H10 , &H10 , &H0F , &H00 , &H00 , &H10 , &H00 , &H7F , &H09,
Data &H10 , &H10 , &H0F , &H00 , &H1F , &H00 , &H00 , &H00


Możesz jeszcze mi napisać jak taki pasek wstawić do "animacja startowa" aby samoczynnie narastał zanim przejdzie do wyświetlania programu (taka mała animacja przy starcie)i gdzie zmienić pozycję do wyświetlania aby był np.na dole.
I jeszcze odnośnie wyświetlania tablicy Logo:, czy jest prostszy sposób niż za pomocą "show" w tym programie.
W kolejnym etapie jak dopiszę przyciski będę chciał pokombinować z wyświetlaniem menu i przechodzeniem do wyboru (takie sześcio pozycyjne).

Portret użytkownika EDC

Odp. Bargraf

Ta zmienna Wiersz nie jest tam od parady.
Możesz przerobić tego suba na zgrabniejszy. Powinien rysować ładniejszy bargraf. Rzuć potem fotką ;)

Declare Sub Rysuj_bargraf(byval Wiersz As Byte)             'umieśc z reszta deklaracji
 
'tak uzywaj
Call Rysuj_bargraf(1)                                       'w nawiasie numer wiersza
 
 
 
 
Rysuj_bargraf(byval Wiersz As Byte)
'rysuje bargraf otoczony ramką
Select Case Wiersz
 Case 1 : Offset = 0
 Case 2 : Offset = 85
 Case 3 : Offset = 169
 Case 4 : Offset = 253
 Case 5 : Offset = 337
 Case 6 : Offset = 421
End Select
 
Lcd_cache(offset) = 255                                     'pierwsza zamykająca belka
Incr Offset
Lcd_cache(offstet) = &H81                                     'odstep
Incr Offset
_start = Offset
_end = _start + 82
Licznik_3 = 0
'jesli licznik w petli niższy od temperatury to wypełnia bargraf, potem do konca rysuje puste
For Lcdcacheidx_3 = _start To _end
    If Licznik_3 <= Temperatura Then Bargraf_znak = &HBD Else Bargraf_znak = &H81
     Lcd_cache(lcdcacheidx_3) = Bargraf_znak
     Incr Licznik_3
Next
Lcd_cache(_end + 1) = &H81                                    'odstep
Lcd_cache(_end + 2) = 255                                   'ostatnia zamykająca belka
 
End Sub

..co do animacji to chyba lepiej było by przesiąść się na te druga bibliotekę i aktualizować tylko potrzebne piksele.

Miłego testowania. Ten sub można tak przerobić dopisując jedna zmienną że będzie rysował więcej bargrafów z róznymi wartościami w zależności od potrzeby. Po prostu wołasz "Rysuj_bargraf(2,30) co będzie oznaczać linię pierwszą i wartość 30. Parametrów może być więcej.

-

BARTek
Moja strona

Portret użytkownika marekszy

bargraf

Tak to sobie ćwiczę i nic, po małej kosmetyce wyświetla ramkę z pierwszą kreską (wcześniej ramka była za długa),ale bargraf nie pracuje. Tak do końca to nie wiem dokładnie gdzie umieścić

Call Rysuj_bargraf(1)                                       'w nawiasie numer wiersza

próowałem w różnych miejscach i nic.
Sub Rysuj_bargraf(byval Wiersz As Byte)
'rysuje bargraf otoczony ramką
Select Case Wiersz
 Case 1 : Offset = 1
 Case 2 : Offset = 85
 Case 3 : Offset = 169
 Case 4 : Offset = 253
 Case 5 : Offset = 337
 Case 6 : Offset = 421
End Select
 
Lcd_cache(offset) = 255                                     'pierwsza zamykająca belka
Incr Offset
Lcd_cache(offset) = &H81                                    'odstep
Incr Offset
_start = Offset
_end = _start + 79                                          '82
Licznik_3 = 0
'jesli licznik w petli niższy od temperatury to wypełnia bargraf, potem do konca rysuje puste
For Lcdcacheidx_3 = _start To _end
    If Licznik_3 <= Temperatura Then Bargraf_znak = &HBD Else Bargraf_znak = &H81
     Lcd_cache(lcdcacheidx_3) = Bargraf_znak
     Incr Licznik_3
Next
Lcd_cache(_end + 1) = &H81                                  'odstep
Lcd_cache(_end + 2) = 255                                   'ostatnia zamykająca belka
 
End Sub

po kosmetyce tak to wygląda

Portret użytkownika EDC

Odp.Bargraf dla 3310

Siemanko. Zamiast tego

Gosub Temperatura_1
 Gosub Rysuj_bargraf

napisz tak
Gosub Temperatura_1
 Call Rysuj_bargraf(1)

Gosub też by chyba mógł być. Po prostu przedtem na poczatku w kodzie pisało że Wiersz=1 teraz piszesz w którym miejscu chcesz żeby był bargraf.

-

BARTek
Moja strona

Portret użytkownika marekszy

bargraf

Właśnie tak mam i nie mierzy, wyświetla tylko ramkę z pierwszą kreską

Do
 
 
 If Flaga_4ms = 1 Then                                      'co 4ms
     Flaga_4ms = 0
'co ma byc co 4ms
  End If
   If Flaga_100ms = 1 Then                                  ' co 100ms
      Flaga_100ms = 0
     'co ma byc po 100ms
     'Gosub Rysuj_bargraf
     End If
    If Flaga_1s = 1 Then                                    'co 1s
       Flaga_1s = 0
'co ma byc co 1s
 Gosub Temperatura_1
  Call Rysuj_bargraf(1)                                     'w nawiasie numer wiersza
 
    End If
 
 Loop
 End

Portret użytkownika EDC

Odp. Bargraf

Ja nie wiem jakim cudem coś Ci sie tam przedtem wyświetliło. Przecież zmienna Temperatura musi mieć jakąś wartosć. Myślałem że masz to tam juz jakoś załatwione. Wpisz że Temperatura = T1 albo coś. No skąd ta zmienna Temperatura ma mieć wartosć skoro jej nie nadajesz. Śpisz tam?
Na próbe możesz wpisać Temperatura = 30

-

BARTek
Moja strona

Portret użytkownika marekszy

bargraf

Nie mam pojęcia czemu wcześniej wyświetlał, ale pokazywał prawidłowo i działał, teraz ten też działa.
Czy śpię?już nie ale jestem po nocce.

Teraz dopiszę obsługę przycisków i pomyślę nad wyświetlaniem menu

Portret użytkownika EDC

Bargraf jak się patrzy :D

Teraz to wygląda :D Możesz spróbować wpisać Rysuj_bargraf(6) co powinno go przenieść na dół, a napis na górę jeśli tak chciałeś. Może jakieś drobne korekty będą potrzebne w tych Offsetach tylko. Z tym spaniem to żartobliwie, bo trudno się zainteresować za każdym razem całością kodu.

-

BARTek
Moja strona