Kolejne lcd na blacie , trochę kłopotów z nim było ale jakoś udało się je pokonać .
Przykłady do testów znalazłem na stronie O-Family są tam dwa oddzielne pliki dla grafiki i panelu dotykowego i biblioteka .
Niestety biblioteka ma pewną niedogodność która polega na ustawianiu zmiennej ofset256 = 0 lub 1 .
Ofset256=0 pozwala korzystać z ekranu o rozdzielczości 240x 255 , aby użyć reszty ekranu należy ustawić ofset256 = 1 .
Zmajstrowałem z tego co O-Fmily udostępnił jeden plik do testów .
Komentarze większość tłumaczona przez translator , jakoś Japońskie znaki mi nie pasowały
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- ' *********************************************
- '* 2,8-calowy, 65-tysięczny, pełnokolorowy wyświetlacz LCD *
- '* 320 x 240 pikseli [ILI9341] SPI *
- '* Test ekranu dotykowego (XPT2046) *
- '* O-Family O 2019.9.26 *
- ' *********************************************
- '
- $regfile = "m328pdef.dat" ''Ustaw AVR do użycia. (ATmega88P)
- ' Config Clockdiv = 1 'Zmień zegar operacyjny AVR na 8MHz.
- $crystal = 16000000 'Ustaw zegar AVR.
- $hwstack = 64 'Ustaw pojemność stosu sprzętowego.
- $swstack = 10 'Ustaw rozmiar stosu oprogramowania.
- $framesize = 24 'Ustaw pojemność obszaru ramki.
- '
- ' * Ustawienia początkowe G-LCD *
- '
- Const Portrait = 1 'Orientacja ekranu LCD (obrócony o 90 stopni). (0: Pozioma [X=320, Y=240], 1: Pionowa [X=240, Y=320]))
- Const Rotate_180 = 0 'Orientacja ekranu LCD (obrót o 180 stopni). (0: Złącze na górze, 1: Złącze na dole)
- Dim Offset256 As Byte 'Flaga przesunięcia adresu LCD (0:0-255, 1:256-319)
- $lib "glcd_ILI9341_2R8_240x320.lib" 'Zawiera wersję biblioteki ILI9341 o przekątnej 2,8 cala i rozdzielczości 240x320.
- ' Określa port połączenia LCD. Cs1 = [CS], Rst = [RESET], A0 = [DC], Si = [SDI], Sclk = [SCK]
- Config Graphlcd = Color , Cs1 = Portd.3 , Rst = Portd.4 , A0 = Portd.5 , Si = Portd.6 , Sclk = Portd.7 '[Cs1]‚Ć[Rst]‚ÍIvV‡“B
- Initlcd ''Zainicjuj ILI9341.
- Cls 'Wyczyść cały ekran G-LCD.
- '
- ' * Zdefiniuj nazwę koloru * [RRRG_GGBB] = [R2,R1,R0,G2_G1,G0,B1,B0]
- '
- Const Black = &B0000_0000
- Const Red = &B1110_0000
- Const Green = &B0001_1100
- Const Blue = &B0000_0011
- Const Magenta = &B1110_0011
- Const Yellow = &B1111_1100
- Const Cyan = &B0001_1111
- Const White = &B1111_1111
- '
- Const Orange = &B1111_0100
- Const Brightgreen = &B0011_1110
- Const Brightblue = &B0001_1111
- Const Darkred = &B1100_0000
- Const Darkgreen = &B0001_0100
- Const Darkblue = &B0000_0010
- '--------------------------------------------------------------------------------------------------
- '
- ' * Ustawienia kontrolera ekranu dotykowego *
- ' (XPT2046, ADS7846, TSC2046, AK4182A)
- '
- Touch_clk Alias Portd.7 'Port połączeniowy XPT2046 [Touch_CLK].
- Touch_cs Alias Portd.2 'Port połączenia XPT2046 [Touch_CS].
- Touch_din Alias Portd.6 'Port połączeniowy XPT2046 [Touch_DIN].
- Touch_do Alias Pind.1 'Port połączenia XPT2046 [Touch_DO].
- Touch_irq Alias Pind.0 'Port połączenia XPT2046 [Touch_IRQ].
- '
- Config Touch_clk = Output ''Ustaw port połączenia XPT2046 [Touch_CLK] na wyjście.
- Config Touch_cs = Output 'Ustaw port połączenia XPT2046 [Touch_CS] na wyjście.
- Set Touch_cs 'Ustaw XPT2046 [Touch_CS] na [H].
- Config Touch_din = Output 'Ustaw port połączenia XPT2046 [Touch_DIN] na wyjście.
- Config Touch_do = Input 'Ustaw port połączenia XPT2046 [Touch_DO] na wejście.
- Config Touch_irq = Input 'Ustaw port połączenia XPT2046 [Touch_IRQ] na wejście.
- '
- Dim Touchx As Word 'Dane ekranu dotykowego [X].
- Dim Touchy As Word 'Dane ekranu dotykowego [Y].
- Dim Touchflag As Byte 'Flaga wykrycia ekranu dotykowego.
- Dim Temptclk As Byte ''[Touch_CLK] Do przechowywania stanu portu.
- Dim X_command As Byte , Y_command As Byte : X_command = &B1101_0000 : Y_command = &B1001_0000
- 'Polecenie rozpoczęcia pomiaru A/D XPT2046.
- '
- Temptclk = Touch_clk '' Zapisz stan portu [Touch_CLK].
- Reset Touch_cs 'Ustaw [Touch_CS] XPT2046 na [L].
- Shiftout Touch_din , Touch_clk , X_command , 1 'Wysyła polecenie konfiguracji dla kontrolera Touch.
- Set Touch_cs 'Ustaw [Touch_CS] XPT2046 na [H].
- Touch_clk = Temptclk ''Zwróć stan portu [Touch_CLK].
- '
- Dim Touchxmin As Word : Touchxmin = 300 '[X] Minimalna określona wartość (konieczna korekta ze względu na indywidualne różnice w ekranach dotykowych)
- Dim Touchxmax As Word : Touchxmax = 3800 '[X] Maksymalna określona wartość. (Może być konieczna regulacja ze względu na indywidualne różnice w ekranach dotykowych)
- Dim Touchymin As Word : Touchymin = 400 'Minimalna określona wartość dla [Y] (konieczna jest korekta ze względu na indywidualne różnice w ekranach dotykowych)
- Dim Touchymax As Word : Touchymax = 3900 'Maksymalna określona wartość [Y]. (Może być konieczna regulacja w zależności od indywidualnych różnic w ekranach dotykowych)
- '--------------------------------------------------------------------------------------------------
- '
- ' ****************
- ' *Test rysowania*
- ' ****************
- Offset256 = 0
- Cls 'Wyczyść cały ekran G-LCD.
- Box(0 , 0) -(240 , 255) , White
- Setfont Color16x16 'Wybierz czcionkę.
- Offset256 = 1 'klawiatura w ofset256 = 1 dolne
- ShowPic 3 , 2 , foto
- Offset256 = 0
- Mainloop:
- Gosub Touchget 'Odczyt kontrolera ekranu dotykowego.
- 'Wyświetl wartość współrzędnej analogowo-cyfrowej [X].
- Lcdat 100 , 90 , "X: " ; touchx ; " " , White , Blue
- 'Wyświetl wartość współrzędnej analogowo-cyfrowej [Y].
- Lcdat 140 , 90 , "Y: " ; touchy ; " " , White , Blue
- If Touchy > 830 Then 'menu w ofset256 = 1 dolne
- If Touchy < 880 Then
- Select Case Touchx
- Case 900 To 950 : Lcdat 180 , 90 , "1" , White , black
- Case 800 To 870 : Lcdat 180 , 90 , "2" , White , black
- Case 720 To 770 : Lcdat 180 , 90 , "3" , White , black
- Case 630 To 680 : Lcdat 180 , 90 , "4" , White , black
- Case 540 To 590 : Lcdat 180 , 90 , "5" , White , black
- Case 450 To 500 : Lcdat 180 , 90 , "A" , White , black
- Case 360 To 410 : Lcdat 180 , 90 , "B" , White , black
- Case 270 To 330 : Lcdat 180 , 90 , "C" , White , black
- Case 170 To 230 : Lcdat 180 , 90 , "+" , White , black
- Case 110 To 130 : Lcdat 180 , 90 , "X" , White , black
- End Select
- End If
- End If
- If Touchy > 900 Then 'menu w ofset256 = 1 dolne
- If Touchy < 950 Then
- Select Case Touchx
- Case 900 To 950 : Lcdat 180 , 90 , "6" , White , black
- Case 800 To 870 : Lcdat 180 , 90 , "7" , White , black
- Case 720 To 770 : Lcdat 180 , 90 , "8" , White , black
- Case 630 To 680 : Lcdat 180 , 90 , "9" , White , black
- Case 540 To 590 : Lcdat 180 , 90 , "0" , White , black
- Case 450 To 500 : Lcdat 180 , 90 , "D" , White , black
- Case 360 To 410 : Lcdat 180 , 90 , "E" , White , black
- Case 270 To 330 : Lcdat 180 , 90 , "F" , White , black
- Case 170 To 230 : Lcdat 180 , 90 , "-" , White , black
- Case 110 To 130 : Lcdat 180 , 90 , "Q" , White , black
- End Select
- End If
- End If
- Goto Mainloop
- '--------------------------------------------------------------------------------------------------
- '
- ' **********************************************************
- ' * Podprogram odczytu kontrolera ekranu dotykowego * (Touchx = wartość analogowo-cyfrowa [X], Touchy = wartość analogowo-cyfrowa [Y])
- ' * (XPT2046, ADS7846, TSC2046, AK4182A) * (Touchflag = flaga wykrycia dotyku, 1: Dotyk wykryty)
- ' **********************************************************
- '
- Dim Touch_mean As Byte , Touchx_sum As Word , Touchy_sum As Word
- Touchget:
- If Touch_irq = 0 Then '„Jeśli nastąpiło dotknięcie ekranu [Touch_IRQ]=[L]? Wtedy
- Temptclk = Touch_clk '' Zapisz stan portu [Touch_CLK].
- '
- Touchx_sum = 0 ''Zainicjuj sumę średnich.
- Touchy_sum = 0
- '
- For Touch_mean = 1 To 4 'ograniczenie do 4x dla mniejszych wartosci x y "oryginał "'Wykonaj test analogowo-cyfrowy ekranu dotykowego 16 razy.
- Waitus 30 'Czas oczekiwania na ustabilizowanie się wartości A/D.
- Reset Touch_clk 'Ustaw [Touch_CLK] na [L].
- Reset Touch_din 'Ustaw [Touch_DIN] na [L].
- Reset Touch_cs 'Ustaw [Touch_CS] na [L].
- '
- Shiftout Touch_din , Touch_clk , X_command , 1 , 8 , 2 '„Wyślij polecenie startu A/D dla [X].
- Reset Touch_din 'Ustaw [Touch_DIN] na [L].
- Set Touch_clk 'Ustaw [Touch_CLK] na [H].
- Waitus 2 ''Stwórz dziewiąty impuls zegara.
- Reset Touch_clk 'Ustaw [Touch_CLK] na [L].
- Waitus 2
- '
- Shiftin Touch_do , Touch_clk , Touchx , 1 , 12 , 2 ''Odbierz dane A/D dla [X].
- Shift Touchx , Right , 4 ''Ustaw 12 bitów z wyrównaniem do prawej.
- '
- Shiftout Touch_din , Touch_clk , Y_command , 1 , 8 , 2 '„Wyślij polecenie startu A/D dla [Y].
- Reset Touch_din 'Ustaw [Touch_DIN] na [L].
- Set Touch_clk 'Ustaw [Touch_CLK] na [H].
- Waitus 2 ''Stwórz dziewiąty impuls zegara.
- Reset Touch_clk 'Ustaw [Touch_CLK] na [L].
- Waitus 2
- '
- Shiftin Touch_do , Touch_clk , Touchy , 1 , 12 , 2 ''Odbierz dane A/D [Y].
- Shift Touchy , Right , 4 ''Ustaw 12 bitów z wyrównaniem do prawej.
- '
- Set Touch_cs 'Ustaw [Touch_CS] na [H].
- '
- Touchx_sum = Touchx_sum + Touchx 'Dodaj sumy, aby uzyskać średnią.
- Touchy_sum = Touchy_sum + Touchy
- Next Touch_mean
- Touch_clk = Temptclk ''Zwróć stan portu [Touch_CLK].
- '
- Shift Touchx_sum , Right , 4 ''Wyciągnij średnią z wartości [X].
- Touchx = Touchx_sum
- Shift Touchy_sum , Right , 4 ''Wyciągnij średnią z wartości [Y].
- Touchy = Touchy_sum
- '
- If Touchx > Touchxmin Then '„Jeśli wartość [X] jest większa niż minimalna określona wartość? Wtedy
- If Touchx < Touchxmax Then '„Jeśli wartość [X] jest mniejsza od maksymalnej określonej wartości? Wtedy
- If Touchy > Touchymin Then '„Jeśli wartość [Y] jest większa niż minimalna określona wartość? Wtedy
- If Touchy < Touchymax Then '„Jeśli wartość [Y] jest mniejsza niż maksymalna określona wartość? Wtedy
- Touchflag = 1 '' Ustaw flagę wykrycia ekranu dotykowego.
- End If
- End If
- End If
- End If
- End If
- Return
- End
- '--------------------------------------------------------------------------------------------------
- '
- ' * Dane czcionki *
- '
- $include "color16x16.font"
- foto:
- $bgf "klw01.bgc"
Na sam koniec pytam czy ma ktoś bibliotekę i jakiś banalny przykład dla LCD TFT SPI 480X320 na ST7796 ????
Bo i taki kupiłem no i wtopa na całego bo niczego nie znalazłem
