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. '***********************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ć.
|
|||
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
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.
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
Na wiki jest opis BOX i BOXFILL
BARTek
Moja strona
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.
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
Wyświetlacze graficzne
no i super,wielkie dzięki,o to właśnie chodzi ,żeby wiedzieć co i dla czego tak się dzieje
Odp. Wyświetlacze graficzne
Proszę taki pomysł mój który możesz przerobić jak chcesz.
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
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.
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
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 .
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
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.
LCD Nokii
I o dziwo działa tak jak należy,nawet na kwarcu 4MHz
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).
Odp. Bargraf
Ta zmienna Wiersz nie jest tam od parady.
Możesz przerobić tego suba na zgrabniejszy. Powinien rysować ładniejszy bargraf. Rzuć potem fotką ;)
..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
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ć
próowałem w różnych miejscach i nic.
po kosmetyce tak to wygląda
Odp.Bargraf dla 3310
Siemanko. Zamiast tego
napisz tak
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
bargraf
Właśnie tak mam i nie mierzy, wyświetla tylko ramkę z pierwszą kreską
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
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
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