LCD 320x240 ili 9341

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
Awatar użytkownika
Henryk
Posty: 357
Rejestracja: 22 sty 2018, 17:20

LCD 320x240 ili 9341

Post autor: Henryk » 02 kwie 2026, 19:06

Witam , jak miło forum znowu aktywne :)
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 :D
  1.    '  *********************************************
  2.    '* 2,8-calowy, 65-tysięczny, pełnokolorowy wyświetlacz LCD *
  3.    '* 320 x 240 pikseli [ILI9341] SPI *
  4.    '* Test ekranu dotykowego (XPT2046) *
  5.    '* O-Family O 2019.9.26 *
  6.    '  *********************************************
  7.    '
  8.  
  9. $regfile = "m328pdef.dat"                                   ''Ustaw AVR do użycia. (ATmega88P)
  10.   ' Config Clockdiv = 1                                      'Zmień zegar operacyjny AVR na 8MHz.
  11. $crystal = 16000000                                         'Ustaw zegar AVR.
  12.  
  13. $hwstack = 64                                               'Ustaw pojemność stosu sprzętowego.
  14. $swstack = 10                                               'Ustaw rozmiar stosu oprogramowania.
  15. $framesize = 24                                             'Ustaw pojemność obszaru ramki.
  16.  
  17.    '
  18.    '  * Ustawienia początkowe G-LCD *
  19.    '
  20.    Const Portrait = 1                                       'Orientacja ekranu LCD (obrócony o 90 stopni). (0: Pozioma [X=320, Y=240], 1: Pionowa [X=240, Y=320]))
  21.    Const Rotate_180 = 0                                     'Orientacja ekranu LCD (obrót o 180 stopni). (0: Złącze na górze, 1: Złącze na dole)
  22.    Dim Offset256 As Byte                                    'Flaga przesunięcia adresu LCD (0:0-255, 1:256-319)
  23. $lib "glcd_ILI9341_2R8_240x320.lib"                         'Zawiera wersję biblioteki ILI9341 o przekątnej 2,8 cala i rozdzielczości 240x320.
  24.    ' Określa port połączenia LCD. Cs1 = [CS], Rst = [RESET], A0 = [DC], Si = [SDI], Sclk = [SCK]
  25.       Config Graphlcd = Color , Cs1 = Portd.3 , Rst = Portd.4 , A0 = Portd.5 , Si = Portd.6 , Sclk = Portd.7       '[Cs1]‚Ć[Rst]‚̓IƒvƒVƒ‡ƒ“B
  26.    Initlcd                                                  ''Zainicjuj ILI9341.
  27.    Cls                                                      'Wyczyść cały ekran G-LCD.
  28.  
  29.    '
  30.    ' * Zdefiniuj nazwę koloru * [RRRG_GGBB] = [R2,R1,R0,G2_G1,G0,B1,B0]
  31.    '
  32.    Const Black = &B0000_0000
  33.    Const Red = &B1110_0000
  34.    Const Green = &B0001_1100
  35.    Const Blue = &B0000_0011
  36.    Const Magenta = &B1110_0011
  37.    Const Yellow = &B1111_1100
  38.    Const Cyan = &B0001_1111
  39.    Const White = &B1111_1111
  40.    '
  41.    Const Orange = &B1111_0100
  42.    Const Brightgreen = &B0011_1110
  43.    Const Brightblue = &B0001_1111
  44.    Const Darkred = &B1100_0000
  45.    Const Darkgreen = &B0001_0100
  46.    Const Darkblue = &B0000_0010
  47.  
  48. '--------------------------------------------------------------------------------------------------
  49.  
  50.    '
  51.    '  * Ustawienia kontrolera ekranu dotykowego *
  52. ' (XPT2046, ADS7846, TSC2046, AK4182A)
  53.    '
  54.    Touch_clk Alias Portd.7                                  'Port połączeniowy XPT2046 [Touch_CLK].
  55.    Touch_cs Alias Portd.2                                   'Port połączenia XPT2046 [Touch_CS].
  56.    Touch_din Alias Portd.6                                  'Port połączeniowy XPT2046 [Touch_DIN].
  57.    Touch_do Alias Pind.1                                    'Port połączenia XPT2046 [Touch_DO].
  58.    Touch_irq Alias Pind.0                                   'Port połączenia XPT2046 [Touch_IRQ].
  59.    '
  60.    Config Touch_clk = Output                                ''Ustaw port połączenia XPT2046 [Touch_CLK] na wyjście.
  61.    Config Touch_cs = Output                                 'Ustaw port połączenia XPT2046 [Touch_CS] na wyjście.
  62.    Set Touch_cs                                             'Ustaw XPT2046 [Touch_CS] na [H].
  63.    Config Touch_din = Output                                'Ustaw port połączenia XPT2046 [Touch_DIN] na wyjście.
  64.    Config Touch_do = Input                                  'Ustaw port połączenia XPT2046 [Touch_DO] na wejście.
  65.    Config Touch_irq = Input                                 'Ustaw port połączenia XPT2046 [Touch_IRQ] na wejście.
  66.    '
  67.    Dim Touchx As Word                                       'Dane ekranu dotykowego [X].
  68.    Dim Touchy As Word                                       'Dane ekranu dotykowego [Y].
  69.    Dim Touchflag As Byte                                    'Flaga wykrycia ekranu dotykowego.
  70.    Dim Temptclk As Byte                                     ''[Touch_CLK] Do przechowywania stanu portu.
  71.    Dim X_command As Byte , Y_command As Byte : X_command = &B1101_0000 : Y_command = &B1001_0000
  72.    'Polecenie rozpoczęcia pomiaru A/D XPT2046.
  73.    '
  74.    Temptclk = Touch_clk                                     '' Zapisz stan portu [Touch_CLK].
  75.    Reset Touch_cs                                           'Ustaw [Touch_CS] XPT2046 na [L].
  76.    Shiftout Touch_din , Touch_clk , X_command , 1           'Wysyła polecenie konfiguracji dla kontrolera Touch.
  77.    Set Touch_cs                                             'Ustaw [Touch_CS] XPT2046 na [H].
  78.    Touch_clk = Temptclk                                     ''Zwróć stan portu [Touch_CLK].
  79.    '
  80.    Dim Touchxmin As Word : Touchxmin = 300                  '[X] Minimalna określona wartość (konieczna korekta ze względu na indywidualne różnice w ekranach dotykowych)
  81.    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)
  82.    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)
  83.    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)
  84.  
  85.  
  86. '--------------------------------------------------------------------------------------------------
  87.  
  88.    '
  89.    '  ****************
  90.    ' *Test rysowania*
  91.    '  ****************
  92.  
  93.  
  94.    Offset256 = 0
  95.     Cls                                                     'Wyczyść cały ekran G-LCD.
  96.     Box(0 , 0) -(240 , 255) , White
  97.      Setfont Color16x16                                        'Wybierz czcionkę.
  98.      Offset256 = 1                                          'klawiatura w ofset256 = 1 dolne
  99.     ShowPic 3 , 2 , foto
  100.      Offset256 = 0
  101.  
  102.    Mainloop:
  103.    Gosub Touchget                                           'Odczyt kontrolera ekranu dotykowego.
  104.        'Wyświetl wartość współrzędnej analogowo-cyfrowej [X].
  105.  
  106.       Lcdat 100 , 90 , "X: " ; touchx ; "  " , White , Blue
  107.                                    'Wyświetl wartość współrzędnej analogowo-cyfrowej [Y].
  108.       Lcdat 140 , 90 , "Y: " ; touchy ; "  " , White , Blue
  109.  
  110.  
  111.            If Touchy > 830 Then                             'menu w ofset256 = 1 dolne
  112.           If Touchy < 880 Then
  113.          Select Case Touchx
  114.            Case 900 To 950 : Lcdat 180 , 90 , "1" , White , black
  115.            Case 800 To 870 : Lcdat 180 , 90 , "2" , White , black
  116.            Case 720 To 770 : Lcdat 180 , 90 , "3" , White , black
  117.            Case 630 To 680 : Lcdat 180 , 90 , "4" , White , black
  118.            Case 540 To 590 : Lcdat 180 , 90 , "5" , White , black
  119.            Case 450 To 500 : Lcdat 180 , 90 , "A" , White , black
  120.            Case 360 To 410 : Lcdat 180 , 90 , "B" , White , black
  121.            Case 270 To 330 : Lcdat 180 , 90 , "C" , White , black
  122.            Case 170 To 230 : Lcdat 180 , 90 , "+" , White , black
  123.            Case 110 To 130 : Lcdat 180 , 90 , "X" , White , black
  124.          End Select
  125.          End If
  126.          End If
  127.  
  128.             If Touchy > 900 Then                            'menu w ofset256 = 1 dolne
  129.           If Touchy < 950 Then
  130.          Select Case Touchx
  131.            Case 900 To 950 : Lcdat 180 , 90 , "6" , White , black
  132.            Case 800 To 870 : Lcdat 180 , 90 , "7" , White , black
  133.            Case 720 To 770 : Lcdat 180 , 90 , "8" , White , black
  134.            Case 630 To 680 : Lcdat 180 , 90 , "9" , White , black
  135.            Case 540 To 590 : Lcdat 180 , 90 , "0" , White , black
  136.            Case 450 To 500 : Lcdat 180 , 90 , "D" , White , black
  137.            Case 360 To 410 : Lcdat 180 , 90 , "E" , White , black
  138.            Case 270 To 330 : Lcdat 180 , 90 , "F" , White , black
  139.            Case 170 To 230 : Lcdat 180 , 90 , "-" , White , black
  140.            Case 110 To 130 : Lcdat 180 , 90 , "Q" , White , black
  141.          End Select
  142.          End If
  143.          End If
  144.    Goto Mainloop
  145.  
  146.  
  147. '--------------------------------------------------------------------------------------------------
  148.  
  149.    '
  150.    '  **********************************************************
  151.    '  * Podprogram odczytu kontrolera ekranu dotykowego * (Touchx = wartość analogowo-cyfrowa [X], Touchy = wartość analogowo-cyfrowa [Y])
  152. ' * (XPT2046, ADS7846, TSC2046, AK4182A) * (Touchflag = flaga wykrycia dotyku, 1: Dotyk wykryty)
  153.    '  **********************************************************
  154.    '
  155.    Dim Touch_mean As Byte , Touchx_sum As Word , Touchy_sum As Word
  156.  
  157. Touchget:
  158.    If Touch_irq = 0 Then                                    '„Jeśli nastąpiło dotknięcie ekranu [Touch_IRQ]=[L]? Wtedy
  159.       Temptclk = Touch_clk                                  '' Zapisz stan portu [Touch_CLK].
  160.       '
  161.       Touchx_sum = 0                                        ''Zainicjuj sumę średnich.
  162.       Touchy_sum = 0
  163.       '
  164.       For Touch_mean = 1 To 4                               'ograniczenie do 4x dla mniejszych wartosci x y "oryginał "'Wykonaj test analogowo-cyfrowy ekranu dotykowego 16 razy.
  165.          Waitus 30                                          'Czas oczekiwania na ustabilizowanie się wartości A/D.
  166.          Reset Touch_clk                                    'Ustaw [Touch_CLK] na [L].
  167.          Reset Touch_din                                    'Ustaw [Touch_DIN] na [L].
  168.          Reset Touch_cs                                     'Ustaw [Touch_CS] na [L].
  169.          '
  170.          Shiftout Touch_din , Touch_clk , X_command , 1 , 8 , 2       '„Wyślij polecenie startu A/D dla [X].
  171.          Reset Touch_din                                    'Ustaw [Touch_DIN] na [L].
  172.          Set Touch_clk                                      'Ustaw [Touch_CLK] na [H].
  173.          Waitus 2                                           ''Stwórz dziewiąty impuls zegara.
  174.          Reset Touch_clk                                    'Ustaw [Touch_CLK] na [L].
  175.          Waitus 2
  176.          '
  177.          Shiftin Touch_do , Touch_clk , Touchx , 1 , 12 , 2 ''Odbierz dane A/D dla [X].
  178.          Shift Touchx , Right , 4                           ''Ustaw 12 bitów z wyrównaniem do prawej.
  179.          '
  180.          Shiftout Touch_din , Touch_clk , Y_command , 1 , 8 , 2       '„Wyślij polecenie startu A/D dla [Y].
  181.          Reset Touch_din                                    'Ustaw [Touch_DIN] na [L].
  182.          Set Touch_clk                                      'Ustaw [Touch_CLK] na [H].
  183.          Waitus 2                                           ''Stwórz dziewiąty impuls zegara.
  184.          Reset Touch_clk                                    'Ustaw [Touch_CLK] na [L].
  185.          Waitus 2
  186.          '
  187.          Shiftin Touch_do , Touch_clk , Touchy , 1 , 12 , 2 ''Odbierz dane A/D [Y].
  188.          Shift Touchy , Right , 4                           ''Ustaw 12 bitów z wyrównaniem do prawej.
  189.          '
  190.          Set Touch_cs                                       'Ustaw [Touch_CS] na [H].
  191.          '
  192.          Touchx_sum = Touchx_sum + Touchx                   'Dodaj sumy, aby uzyskać średnią.
  193.          Touchy_sum = Touchy_sum + Touchy
  194.       Next Touch_mean
  195.       Touch_clk = Temptclk                                  ''Zwróć stan portu [Touch_CLK].
  196.       '
  197.       Shift Touchx_sum , Right , 4                          ''Wyciągnij średnią z wartości [X].
  198.       Touchx = Touchx_sum
  199.       Shift Touchy_sum , Right , 4                          ''Wyciągnij średnią z wartości [Y].
  200.       Touchy = Touchy_sum
  201.       '
  202.       If Touchx > Touchxmin Then                            '„Jeśli wartość [X] jest większa niż minimalna określona wartość? Wtedy
  203.          If Touchx < Touchxmax Then                         '„Jeśli wartość [X] jest mniejsza od maksymalnej określonej wartości? Wtedy
  204.             If Touchy > Touchymin Then                      '„Jeśli wartość [Y] jest większa niż minimalna określona wartość? Wtedy
  205.                If Touchy < Touchymax Then                   '„Jeśli wartość [Y] jest mniejsza niż maksymalna określona wartość? Wtedy
  206.                   Touchflag = 1                             '' Ustaw flagę wykrycia ekranu dotykowego.
  207.                End If
  208.             End If
  209.          End If
  210.       End If
  211.    End If
  212.    Return
  213.  
  214.  
  215.    End
  216.  
  217. '--------------------------------------------------------------------------------------------------
  218.  
  219.    '
  220.    ' * Dane czcionki *
  221.    '
  222. $include "color16x16.font"
  223.    foto:
  224.   $bgf "klw01.bgc"
W załączniku komplet do testów , miłej zabawy :D
ILI9341.7z
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 :( Pozdrawiam Henryk .
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: LCD 320x240 ili 9341

Post autor: niveasoft » 02 kwie 2026, 19:24

Forum i utrzymanie strony kosztuje mnie 400zł/rok a dlatego ze był mały ruch na forum to pomyśłałem że może to nikomu niepotrzebne.
Dwa miesiące myslałem i stwierdziłem że jednak strona mi sie przyda bo chce pokazać nową pięknie poprawinoną wersje NoSave Tool i Bflash. Nic na tym nie zarabiam , ale chce sie podzielić :D.
Co do tego wyświetlacza TFT to mam na nim piekny projekt i jesli zlecający zgodzi się żebym tu go pokazał to zobaczycie co to potrafi :D
Awatar użytkownika
Henryk
Posty: 357
Rejestracja: 22 sty 2018, 17:20

Re: LCD 320x240 ili 9341

Post autor: Henryk » 02 kwie 2026, 19:40

niveasoft pisze: ↑
02 kwie 2026, 19:24
Forum i utrzymanie strony kosztuje mnie 400zł/rok a dlatego ze był mały ruch na forum to pomyśłałem że może to nikomu niepotrzebne.
Natomiat ja usilnie szukałem kontaktu z Tobą a że nie rozmawiamy inaczej niż tu na forum , to jest jak jest .
Ja nie mam problemu bu udzielić wsparcia aby forum było aktywne ;)
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: LCD 320x240 ili 9341

Post autor: niveasoft » 02 kwie 2026, 19:46

Nie przyjmuje zadnych wpłat ani forum nie wyświetla reklam. To jest forum dla tych co lubia programowac w basicu. Bo naprawdę w B4X to ja mam apki aktywne w AppStore i PlayStore a one komunikuja sie poprzez serwery ze sterownikami napisanymi tez w basic`u.
Utrzymanie strony lezy tylko po mojej stronie i zalezy tylko od aktywności jej uzytkowników i odemnie co chcę ogłosić :D
Miło Pana widzieć Panie Henryku
Awatar użytkownika
Henryk
Posty: 357
Rejestracja: 22 sty 2018, 17:20

Re: LCD 320x240 ili 9341

Post autor: Henryk » 02 kwie 2026, 19:58

niveasoft pisze: ↑
02 kwie 2026, 19:46
Miło Pana widzieć Panie Henryku
I wzajemnie Bartku , a jednak jestem za kontaktem poza forum byś nie musiał się zastanawiać na przyszłość ;) Twoja wiedza jest więcej warta niż utrzymanie forum .
Moja przeglądarka jest ustawiona na dzień dobry na Bart-projects a dopiero później na google
Awatar użytkownika
Henryk
Posty: 357
Rejestracja: 22 sty 2018, 17:20

Re: LCD 320x240 ili 9341

Post autor: Henryk » 03 kwie 2026, 20:54

Mała aktualizacja wczorajszego wpisu ;)
Miałem zamiar opublikować inny kod tylko on gdzieś mi zginął a był na pulpicie :lol: :lol: ooooch starość nie radość .
teraz ładuję to co chciałem i dodaję filmik z działania programu ;)
  1.    '  *********************************************
  2.  
  3.    '* 2,8-calowy, 65-tysięczny, pełnokolorowy wyświetlacz LCD *
  4.    '* 320 x 240 pikseli [ILI9341] SPI *
  5.    '* Test ekranu dotykowego (XPT2046) *
  6.    '* Rodzina O 2019.9.26 *
  7.    '  *********************************************
  8.    '
  9.  
  10. $regfile = "m328pdef.dat"                                   ''Ustaw AVR do użycia. (ATmega88P)
  11.   ' Config Clockdiv = 1                                      'Zmień zegar operacyjny AVR na 8MHz.
  12. $crystal = 16000000                                         'Ustaw zegar AVR.
  13.  
  14. $hwstack = 64                                               'Ustaw pojemność stosu sprzętowego.
  15. $swstack = 10                                               'Ustaw rozmiar stosu oprogramowania.
  16. $framesize = 24                                             'Ustaw pojemność obszaru ramki.
  17.  
  18.    '
  19.    '  * Ustawienia początkowe G-LCD *
  20.    '
  21.    Const Portrait = 1                                       'Orientacja ekranu LCD (obrócony o 90 stopni). (0: Pozioma [X=320, Y=240], 1: Pionowa [X=240, Y=320]))
  22.    Const Rotate_180 = 0                                     'Orientacja ekranu LCD (obrót o 180 stopni). (0: Złącze na górze, 1: Złącze na dole)
  23.    Dim Offset256 As Byte                                    'Flaga przesunięcia adresu LCD (0:0-255, 1:256-319)
  24. $lib "glcd_ILI9341_2R8_240x320.lib"                         'Zawiera wersję biblioteki ILI9341 o przekątnej 2,8 cala i rozdzielczości 240x320.
  25.    ' Określa port połączenia LCD. Cs1 = [CS], Rst = [RESET], A0 = [DC], Si = [SDI], Sclk = [SCK]
  26.    Config Graphlcd = Color , Cs1 = Portd.3 , Rst = Portd.4 , A0 = Portd.5 , Si = Portd.6 , Sclk = Portd.7       '[Cs1]‚Ć[Rst]‚̓IƒvƒVƒ‡ƒ“B
  27.    Initlcd                                                  ''Zainicjuj ILI9341.
  28.    Cls                                                      'Wyczyść cały ekran G-LCD.
  29.  
  30.    '
  31.    ' * Zdefiniuj nazwę koloru * [RRRG_GGBB] = [R2,R1,R0,G2_G1,G0,B1,B0]
  32.    '
  33.    Const Black = &B0000_0000
  34.    Const Red = &B1110_0000
  35.    Const Green = &B0001_1100
  36.    Const Blue = &B0000_0011
  37.    Const Magenta = &B1110_0011
  38.    Const Yellow = &B1111_1100
  39.    Const Cyan = &B0001_1111
  40.    Const White = &B1111_1111
  41.    '
  42.    Const Orange = &B1111_0100
  43.    Const Brightgreen = &B0011_1110
  44.    Const Brightblue = &B0001_1111
  45.    Const Darkred = &B1100_0000
  46.    Const Darkgreen = &B0001_0100
  47.    Const Darkblue = &B0000_0010
  48.  
  49. '--------------------------------------------------------------------------------------------------
  50.  
  51.    '
  52.    '  * Ustawienia kontrolera ekranu dotykowego *
  53. ' (XPT2046, ADS7846, TSC2046, AK4182A)
  54.    '
  55.    Touch_clk Alias Portd.7                                  'Port połączeniowy XPT2046 [Touch_CLK].
  56.    Touch_cs Alias Portd.2                                   'Port połączenia XPT2046 [Touch_CS].
  57.    Touch_din Alias Portd.6                                  'Port połączeniowy XPT2046 [Touch_DIN].
  58.    Touch_do Alias Pind.1                                    'Port połączenia XPT2046 [Touch_DO].
  59.    Touch_irq Alias Pind.0                                   'Port połączenia XPT2046 [Touch_IRQ].
  60.    '
  61.    Config Touch_clk = Output                                ''Ustaw port połączenia XPT2046 [Touch_CLK] na wyjście.
  62.    Config Touch_cs = Output                                 'Ustaw port połączenia XPT2046 [Touch_CS] na wyjście.
  63.    Set Touch_cs                                             'Ustaw XPT2046 [Touch_CS] na [H].
  64.    Config Touch_din = Output                                'Ustaw port połączenia XPT2046 [Touch_DIN] na wyjście.
  65.    Config Touch_do = Input                                  'Ustaw port połączenia XPT2046 [Touch_DO] na wejście.
  66.    Config Touch_irq = Input                                 'Ustaw port połączenia XPT2046 [Touch_IRQ] na wejście.
  67.    '
  68.    Dim Touchx As Word                                       'Dane ekranu dotykowego [X].
  69.    Dim Touchy As Word                                       'Dane ekranu dotykowego [Y].
  70.    Dim x As byte                                            'kursor [X].
  71.    Dim y As byte                                            'kursor [Y].
  72.  
  73.  
  74.   ' Dim Touchflag As Byte                                    'Flaga wykrycia ekranu dotykowego.
  75.    Dim Temptclk As Byte                                     ''[Touch_CLK] Do przechowywania stanu portu.
  76.    Dim X_command As Byte , Y_command As Byte : X_command = &B1101_0000 : Y_command = &B1001_0000
  77.    'Polecenie rozpoczęcia pomiaru A/D XPT2046.
  78.    '
  79.    Temptclk = Touch_clk                                     '' Zapisz stan portu [Touch_CLK].
  80.    Reset Touch_cs                                           'Ustaw [Touch_CS] XPT2046 na [L].
  81.    Shiftout Touch_din , Touch_clk , X_command , 1           'Wysyła polecenie konfiguracji dla kontrolera Touch.
  82.    Set Touch_cs                                             'Ustaw [Touch_CS] XPT2046 na [H].
  83.    Touch_clk = Temptclk                                     ''Zwróć stan portu [Touch_CLK].
  84.  
  85. '--------------------------------------------------------------------------------------------------
  86.  
  87.    '
  88.    '  ****************
  89.    ' *Test rysowania*
  90.    '  ****************
  91.  
  92.  
  93.    Offset256 = 0                                            'menu w ofset256 = 0 gorne
  94.     Cls                                                     'Wyczyść cały ekran G-LCD.
  95.     Box(0 , 0) -(240 , 255) , White
  96.      Setfont color16x16
  97.      'Setfont Color8x8                                       'Wybierz czcionkę.
  98.      Offset256 = 1                                          'menu w ofset256 = 1 dolne
  99.     ShowPic 3 , 2 , foto
  100.      Offset256 = 0
  101.      'Box(3 , 170) -(237 , 190) , White
  102.      Boxfill(0 , 171) -(240 , 189) , White
  103.      x = 1
  104.      ShowPic 1 , 180 , foto01
  105.  
  106.    Mainloop:
  107.    Gosub Touchget                                           'Odczyt kontrolera ekranu dotykowego.
  108.        'Wyświetl wartość współrzędnej analogowo-cyfrowej [X].
  109.  
  110.       Lcdat 100 , 90 , "X: " ; touchx ; "  " , White , Blue
  111.                                   'Wyświetl wartość współrzędnej analogowo-cyfrowej [Y].
  112.       Lcdat 140 , 90 , "Y: " ; touchy ; "  " , White , Blue
  113.  
  114.  
  115.            ShowPic x , 180 , foto01
  116.            if x > 230 then : x = 230 : end if
  117.            if x < 1 then : x = 1 : end if
  118.  
  119.  
  120.  
  121.  
  122.            If Touchy > 830 Then                             'menu w ofset256 = 1 dolne
  123.           If Touchy < 880 Then
  124.          Select Case Touchx
  125.            Case 900 To 950 : Lcdat 60 , 90 , "1" , White , black
  126.            Case 800 To 870 : Lcdat 60 , 90 , "2" , White , black
  127.            Case 720 To 770 : Lcdat 60 , 90 , "3" , White , black
  128.            Case 630 To 680 : Lcdat 60 , 90 , "4" , White , black
  129.            Case 540 To 590 : Lcdat 60 , 90 , "5" , White , black
  130.            Case 450 To 500 : Lcdat 60 , 90 , "A" , White , black : x = x + 1 : Touchx = 0
  131.            Case 360 To 410 : Lcdat 60 , 90 , "B" , White , black
  132.            Case 270 To 330 : Lcdat 60 , 90 , "C" , White , black
  133.            Case 170 To 230 : Lcdat 60 , 90 , "+" , White , black
  134.            Case 110 To 130 : Lcdat 60 , 90 , "X" , White , black
  135.          End Select
  136.          End If
  137.          End If
  138.  
  139.             If Touchy > 900 Then                            'menu w ofset256 = 1 dolne
  140.           If Touchy < 950 Then
  141.          Select Case Touchx
  142.            Case 900 To 950 : Lcdat 60 , 90 , "6" , White , black
  143.            Case 800 To 870 : Lcdat 60 , 90 , "7" , White , black
  144.            Case 720 To 770 : Lcdat 60 , 90 , "8" , White , black
  145.            Case 630 To 680 : Lcdat 60 , 90 , "9" , White , black
  146.            Case 540 To 590 : Lcdat 60 , 90 , "0" , White , black
  147.            Case 450 To 500 : Lcdat 60 , 90 , "D" , White , black : x = x -1 : Touchx = 0
  148.            Case 360 To 410 : Lcdat 60 , 90 , "E" , White , black
  149.            Case 270 To 330 : Lcdat 60 , 90 , "F" , White , black
  150.            Case 170 To 230 : Lcdat 60 , 90 , "-" , White , black
  151.            Case 110 To 130 : Lcdat 60 , 90 , "Q" , White , black
  152.          End Select
  153.          End If
  154.          End If
  155.    Goto Mainloop
  156.  
  157.  
  158. '--------------------------------------------------------------------------------------------------
  159.  
  160.    '
  161.    '  **********************************************************
  162.    '  * Podprogram odczytu kontrolera ekranu dotykowego * (Touchx = wartość analogowo-cyfrowa [X], Touchy = wartość analogowo-cyfrowa [Y])
  163. ' * (XPT2046, ADS7846, TSC2046, AK4182A) * (Touchflag = flaga wykrycia dotyku, 1: Dotyk wykryty)
  164.    '  **********************************************************
  165.    '
  166.    Dim Touch_mean As Byte , Touchx_sum As Word , Touchy_sum As Word
  167.  
  168. Touchget:
  169.    If Touch_irq = 0 Then                                    '„Jeśli nastąpiło dotknięcie ekranu [Touch_IRQ]=[L]? Wtedy
  170.       Temptclk = Touch_clk                                  '' Zapisz stan portu [Touch_CLK].
  171.       '
  172.       Touchx_sum = 0                                        ''Zainicjuj sumę średnich.
  173.       Touchy_sum = 0
  174.       '
  175.       For Touch_mean = 1 To 4                               'ograniczenie do 4x dla mniejszych wartosci x y "oryginał "'Wykonaj test analogowo-cyfrowy ekranu dotykowego 16 razy.
  176.          Waitus 30                                          'Czas oczekiwania na ustabilizowanie się wartości A/D.
  177.          Reset Touch_clk                                    'Ustaw [Touch_CLK] na [L].
  178.          Reset Touch_din                                    'Ustaw [Touch_DIN] na [L].
  179.          Reset Touch_cs                                     'Ustaw [Touch_CS] na [L].
  180.          '
  181.          Shiftout Touch_din , Touch_clk , X_command , 1 , 8 , 2       '„Wyślij polecenie startu A/D dla [X].
  182.          Reset Touch_din                                    'Ustaw [Touch_DIN] na [L].
  183.          Set Touch_clk                                      'Ustaw [Touch_CLK] na [H].
  184.          Waitus 2                                           ''Stwórz dziewiąty impuls zegara.
  185.          Reset Touch_clk                                    'Ustaw [Touch_CLK] na [L].
  186.          Waitus 2
  187.          '
  188.          Shiftin Touch_do , Touch_clk , Touchx , 1 , 12 , 2 ''Odbierz dane A/D dla [X].
  189.          Shift Touchx , Right , 4                           ''Ustaw 12 bitów z wyrównaniem do prawej.
  190.          '
  191.          Shiftout Touch_din , Touch_clk , Y_command , 1 , 8 , 2       '„Wyślij polecenie startu A/D dla [Y].
  192.          Reset Touch_din                                    'Ustaw [Touch_DIN] na [L].
  193.          Set Touch_clk                                      'Ustaw [Touch_CLK] na [H].
  194.          Waitus 2                                           ''Stwórz dziewiąty impuls zegara.
  195.          Reset Touch_clk                                    'Ustaw [Touch_CLK] na [L].
  196.          Waitus 2
  197.          '
  198.          Shiftin Touch_do , Touch_clk , Touchy , 1 , 12 , 2 ''Odbierz dane A/D [Y].
  199.          Shift Touchy , Right , 4                           ''Ustaw 12 bitów z wyrównaniem do prawej.
  200.          '
  201.          Set Touch_cs                                       'Ustaw [Touch_CS] na [H].
  202.          '
  203.          Touchx_sum = Touchx_sum + Touchx                   'Dodaj sumy, aby uzyskać średnią.
  204.          Touchy_sum = Touchy_sum + Touchy
  205.       Next Touch_mean
  206.       Touch_clk = Temptclk                                  ''Zwróć stan portu [Touch_CLK].
  207.       '
  208.       Shift Touchx_sum , Right , 4                          ''Wyciągnij średnią z wartości [X].
  209.       Touchx = Touchx_sum
  210.       Shift Touchy_sum , Right , 4                          ''Wyciągnij średnią z wartości [Y].
  211.       Touchy = Touchy_sum
  212.        End If
  213.    Return
  214.  
  215.  
  216.    End
  217.  
  218. '--------------------------------------------------------------------------------------------------
  219.  
  220.    '
  221.    ' * Dane czcionki *
  222.    '
  223. $include "color16x16.font"
  224. $include "color8x8.font"
  225.    foto:
  226.   $bgf "klw01.bgc"
  227.    foto01:
  228.    $bgf "pin.bgc"
wzbogacony o prostą banalną animację .
Klik

W załączniku brakująca ikona krórą należy wkleić do folderu z projektem .
pin.7z
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
ODPOWIEDZ