Ingo Electronics


    HOME                                                           Stellaris LM4F120 LaunchPad


Stellaris LM4F120  LaunchPad.    Graphics Library Display Drivers.  

StellarisWare grlib grafikos funkcijų biblioteka nors ir nėra  tobula, tačiau ją galima sėkmingai naudoti su bet kokiu grafiniu displėjumi. Viskas ko reikia šios grlib naudojimui, yra turėti arba pačiam pasirašyti naudojamo displėjaus draiverį, kuriame privalo būti sekančios, žemiau nurodytos funkcijos:

-Displėjaus Interfeiso konfiguravimas.

-Duomenų įrašymo į displėjaus kontrolerį funkcijos.

-Displėjaus inicializavimas (pradiniai nustatymai).

-Vieno, nurodytos spalvos pikselio išvedimas į displėjų. - Draws a pixel on the screen.

-Horizontalios įvairių spalvų pikselių sekos  piešimas.- Draws a horizontal sequence of pixels on the screen.

-Horizontalios linijos piešimas. - Draws a horizontal line.

-Vertikalios linijos piešimas. - Draws a vertical line.

-Kvadrato užpildymas pasirinkta spava. - Fill a rectangle with a given color.

-24-bit RGB spalvos konvertavimas į displėjui suprantamą formatą. -Translates a 24-bit RGB color to a display driver-specific color.

-Flushes any cached drawing operations.(Dažniausiai ši funkcija nenaudojama, ir rašoma tuščia).

 

Draiverio pačiame gale pateikiama funkcijų struktūra, tDisplay, kurioje deklaruojamos funkcijos ir parametrai, kurie yra reikalingi naudojant StellarisWare grlib.

Šioje struktūroje gali būti kitokie funkcijų pavadinimai, tačiau funkcijų paskirties eilės tvarkos keisti negalima

Rašant savo draiverį, šios struktūros pavadinimą pasirenkame patys.

 

Ebay paieškoje įrašę pvz. Touch TFT LCD Display galima rasti nemažai įvairaus dydžio ir  palyginus nebrangių grafinių displėjų, tik reiktų atkreipti dėmesį, kad pasirinktas displėjus turėtų integruotą kontrolerį iš kurių populiariausi šiuo metu yra  SSD1289, SPFD5408, ILI9325,ILI9320,SSD1963,SSD2119.

 

Grafinio displėjaus draiverį nesunku pasirašyti patiems, panaudojant naudojamo kontrolerio aprašyma arba ieškant pavyzdžių internete.
Dažnai displėjaus pardavėjas duoda draiverio pirminį kodą.
Kaip pavyzdys šiame straipsnyje yra pateiktas grafinio displėjaus kurį galima įsigyti iš ebay, ir kurio pavadinimas bei techniai parametrai yra šie:

2.8" inch 320x240 Touch TFT LCD Display Module, SPI Interface, ILI9320

Modelis ----------------------   HY28A
LCD Controller -------------   ILI9320
Touch Screen Controller---   ADS7843 or XPT2046
LCD Type -------------------- TFT
LCD Interface  --------------- SPI
Touch Screen Interface ----- SPI
Backlight  --------------------- LED
Colors ------------------------- 65536  (16bits)
Resolution  ------------------- 320*240 (pixels)
Pin pitch  ---------------------  2.00 mm

Daugiau info www.PowerMCU.com

http://www.hotmcu.com/28-touch-screen-tft-lcd-with-spi-interface-p-42.html?cPath=6_16

HY28A_3HY28A_back

 

Tokio displėjaus, kuris bus naudojamas žemiau pateiktuose programavimo pavyzdžiuose, draiveris yra pateiktas čia:  ILI9320_320x240_SPI_driver

Displėjus  jungiamas prie sakančių Stellaris Launchpad kontaktų:

LCD_SCK  –  PB4
LCD_CS     – PB1
LCD_SDO  – PB6
LCD_SDI   – PB7
RESET       – PB5

TP_CS        – PD6
TP_SCK     –  PD0
TP_SDI       – PD3
TP_SDO     – PD2
TP_IRQ      – PE1
BL_CTRL  –  PB0

Naujo projekto sukūrimas naudojant StellarisWare grlib

 Turint grafinį displėjų ir jam skirtą draiverio kodą, jau galima pradeti rašyti savo pirmąją programą, kurioje bus naudojamos Stellaris grlib funkcijos:

 

1. Susikuriame nauja projektą, taip kaip aprašyta ankstesnėje temoje: Link

2. Kadangi naudosime grlib biblioteką, tai nurodome jos adresą įrašydami……..

Project->>Properties>Build>ARM Linker>File Search Path

Nukopiname šį užraša:

"${PROJECT_ROOT}/../../../../grlib/ccs-cm4f/Debug/grlib-cm4f.lib"

Įkeliame į Include library file or command file as input (--library,-I)

3. Project->>Properties>Build>ARM Linker>Basic Options>Set C system stack size įrašome 1024

4. StellarisWare  direktorijoje sukuriame naują aplanką kurį galime pavadinti kaip tik norima, Pvz. ILI9320_SPI_drivers į kurį įkelsime draiverius , paveikslėlius ir kt papildomus failus.

5.Atsisiunčiame ir i 4punkte sukurtą aplanką sukeliame šiuos išpakuotus failus: ILI9320_SPI_drivers.rar

6. Sekantis etapas  projekto direktorijoje sukuriame naują aplanką kurį taip pat galime pavadinti kaip tik norime, galime pavadinti tuo pačiu pavadinimu pvz. ILI9320_SPI_drivers
Naujas aplankas CCS projekto direktorijoje sukuriamas taip:
File->New->Folder----Folder name: --- įrašome pavadinimą  -----Finish

Į šį naują aplanką sukeliame nuorodas:

Su dešiniu pelės klavišu pasirenkame Add Files.. susirandame StellarisWare  direktorijoje 4punkte sukurtą  ILI9320_SPI_drivers aplanką ir jame pažymim visus failus,  spaudžiam Open  atsidariusiame lange pažymime Link to files , spaudžiam OK .

Projekto direktorijoje atsiranda nauji failai su nedidele rodikle, rodyklė reiškia kad tai yra nuoroda į failą.
Šiuos naujai atsiradusius failus pelės pagalba sutampome į anksčiau projekto direktorijoje sukurtą aplanką ILI9320_SPI_drivers

7. Atidarome naujai sukurto projekto failą kuriame yra main funkcija, išvalome jame esančius užrašus,  nukopijuojame ir įkeliame žemiau esantį kodą:

#include "inc/hw_sysctl.h"
#include "inc/hw_types.h"
#include "driverlib/fpu.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/stdlib.h"//for ltoa(..);
#include "grlib/grlib.h"
//#include "grlib/widget.h"
//#include "grlib/canvas.h"
//#include "grlib/pushbutton.h"
//#include "grlib/listbox.h"
//#include "grlib/container.h"
//#include "grlib/imgbutton.h"
//#include "grlib/radiobutton.h"
//#include "grlib/checkbox.h"
#include "ILI9320_SPI_drivers/HY28A_SPI_ILI9320.h"
#include "ILI9320_SPI_drivers/My_images_1.h"
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
// The error routine that is called if the driver library encounters an error.
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#ifdef DEBUG
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//Deklaruojame parametrų ir funkcijų strukturą kuri yra aprašyta grafinio displėjaus draiveryje

tContext g_sContext;
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
void main() {
       SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);
       SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
       GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
       GPIOPinWrite(GPIO_PORTF_BASE, (GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3), 0x00);
       SPI_Configuration();
 
     ILI9320_RESET();

       GLCD_Initializtion();
       GrContextInit(&g_sContext, &g_sHY28A_SPI_ILI9320);
       //Bus rasomas tolimesnis programos kodas
        while(1)
          {
          }
}
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 Kol kas tai yra tik šablonas, kuriame galima rašyti testuojant, derinant ir tikrinant tolimesnius projekto įvairius elementus, detales ir įkelti pavyzdžius kurie bus žemiau pateikti.

Kelių programinio kodo versijų sukūrimas

 

Testuojant programas, yra būdas, to paties projekto kataloge sukurti keleta programinio kodo versijų, kuriuom kartais pravartu pasinaudoti.

Kairėje puseje esančiame  Project Explorer  dešiniu pelės mygtuku spustelime ant norimo laikinai pašalinti main.c failo ir pasirinkame:

Resource Configurations >> Exclude from Build… pažymėti Select All, t.y pasirenkame  Debug ir Release konfigūracijas, o tada spaudžiame OK.

Tokiu būdu galime išsaugoti projekto main kažkurios tai versijos failą, tačiau jis nebus naudojamas kompiliuojant kokią nors kitą programos versiją, o visi projekto nustatymai (Properties) išliks nepakitę.

Toliau susikuriame naują projekto pagrindinį failą:

 File >> New  >> Source File.

Langelyje Source file: įrašome naujai kuriamos programos versijos pavadinimą ir nurodome failo tipą (.c).

Spaudžiame Finish:

Kairėje pusėje, Project Explorer  aktyvaus projekto kataloge, atsiranda naujas failas , kuris dar yra tuščias, į jį galime įsikelti ankstesnę projekto versiją naudodami Copy-Paste ir toliau redaguoti taip kaip norime.

Tai geras būdas, kai norime sukurti keletą panašaus profilio projekto versijų, išsaugodami ankstesnes versijas.

Norint pereiti prie kurios nors ankstesnės projekto versijos, darome taip:

Kairėje puseje esančiame  Project Explorer  dešiniu pelės mygtuku spustelėkite ant norimo main.c failo.

Pasirenkame:

Properties>>Build>>Nuimame varnelę nuo Exclude from Build

StellarisWare grlib funkcijos

 

Stellaris grafikos funkcijų biblioteka yra sudaryta iš dviejų dalių:

  1. Primityviosios grafikos (graphics primitives)  
  2. Grafiniai elementai - paruoštukai – angl. Widget

 Šias dalis galima naudoti atskirai arba kartu.

Primityvioji grafika leidžia piešti:

  1. Horizontalias,vertikalias arba kampu pasvirusias linijas.
  2. Kvadratus ir apskritimus.  
  3. Viena pasirinkta spalva užpildytus kvadratus ir apskritimus.
  4. Rašyti tekstą pasirinktu šriftu, kurių yra apie 160 variantų.
  5. Įkelti paveikslėlius.

 
Stellaris grlib funkcijose yra naudojamas 24 bitų spalvų kodavimas, tolimesnėje eigoje spalvos yra dekoduojamos naudojamo displėjaus suprantamu kodavimu, pvz. į 16-bit (5-6-5) BGR.

Ši spalvų dekodavimo funkcija yra nurodoma naudojamo displėjaus draiveryje.

Reikia atkreipti dėmesį, kad yra naudojama BGR spalvinė seka, o ne RGB,  tai turi būti apibrėžiama inicializuojant GLCD displėjų.

Naudojant ILI9320 kontrolerį, tai padaroma  Entry Mode registre (0x03) 12-ą bitą nustatant į  “1“.


Primityvios grafikos naudojimo pavyzdžiai

 

Piešiame horizontalią liniją:

   GrContextForegroundSet(&g_sContext, ClrYellow);//linijos spalva
  GrLineDrawH(&g_sContext, 20, 220,185);//piešiame linija

//20  – x koordinatė,linijos pradžia
//220 – x koordinatė linijos pabaiga
//185 – linijos y koordinatė

 

Piešiame vertikalią liniją:

  GrContextForegroundSet(&g_sContext, ClrRed);//linijos spalva
 GrLineDrawV(&g_sContext, 70 , 300, 200); );//piešiame linija

//70  – linijos x koordinatė
//300 - linijos y koordinatė(apatinis taškas)
//200 - linijos y koordinatė(viršutinis taškas)

 

Piešiame kampu pasvirusią liniją:

 GrContextForegroundSet(&g_sContext, ClrYellow);//linijos spalva

        GrLineDraw(&g_sContext,

        20,  // x koordinatė(apatinis taškas)

        300, // y koordinatė(apatinis taškas)

        220, // x koordinatė (viršutinis taškas)

        100);// y koordinatė(viršutinis taškas)

 

Piešiame kvadratą:

 //kiekvienam kvadratui turime suteikti pavadinimą,t.y sukuriame kaip naują objektą

        tRectangle sRect;

//Šio kvadrato koordinatės

        sRect.sXMin = 5; // x koordinatė(viršutinis kairės pusės kampas)
        sRect.sYMin = 5; // y koordinatė(viršutinis kairės pusės kampas)
        sRect.sXMax = 210;// x koordinatė(apatinis dešinės pusės kampas)
        sRect.sYMax = 20; // y koordinatė(apatinis dešinės pusės kampas)

        GrContextForegroundSet(&g_sContext, ClrWhite);  //pasirenkame spalvą
        GrRectDraw(&g_sContext, &sRect);  //piešiame kvadratą

 
Piešiame apskritimą:

  GrContextForegroundSet(&g_sContext, ClrYellow);
 GrCircleDraw(&g_sContext, 120, 160, 50);
//120– x koordinatė, apskritimo centras
//160- y koordinatė, apskritimo centras
//50-  apskritimo spindulys


Piešiame spalva užpildytą kvadratą:

// kvadratui suteikiame pavadinimą,t.y sukuriame kaip naują objektą

tRectangle G_Rect;

GrContextForegroundSet(&g_sContext, ClrGreen); //pasirenkame spalvą

//Šio kvadrato koordinatėsG_Rect.sXMin = 70;
G_Rect.sXMax = 170;
G_Rect.sYMin = 70;
G_Rect.sYMax = 120;

GrRectFill(&g_sContext, & G_Rect);

 
Piešiame spalva užpildytą apskritimą:

 GrContextForegroundSet(&g_sContext, ClrRed); //pasirenkame spalvą

 GrCircleFill(&g_sContext, 120, 160, 50);

//120– x koordinatė, apskritimo centras
//160- y koordinatė, apskritimo centras
//50-  apskritimo spindulys

Rašome tekstą:

  GrContextForegroundSet(&g_sContext, ClrRed); //pasirenkame teksto spalvą
 GrContextFontSet(&g_sContext, &g_sFontCmss30b); //pasirenkame teksto šriftą
 GrStringDraw(&g_sContext, "Graphics", -1, 70, 62, 0);
 GrStringDraw(&g_sContext, "Library", -1, 82, 92, 0);

//82,92 – x,y koordinatė, teksto viršutinis kairysis kampas

 

Kaip matome piešti linijas, kavadratus, apskritimus ir rašyti tekstą yra visai paprasta, svarbu tik tinkamai susiplanuoti koordinates x,y kur ir ką norime piešti, preliminariai nusibraižant ant popieriaus, ar pasinaudojant kokia nors piešimo programa.

 

Šiek tiek yra sudėtingiau su paveikslėliais, apie tai sekačioje temoje.


Paveikslėlių įkėlimas ir formatavimas

 

Paveikslėlių piešimui Stellaris grlib primityviojoje grafikoje yra naudojamas specialus formatas, t.y negalime tiesiogiai įkelti BMP, GIF, TIFF ar JPG.

Primityvioji grafika paveikslėlius leidžia piešti  1 bit-per-pixel -1 BPP (dvi spalvos), 4 BPP(16 spalvų), arba 8 BPP(256 spalvų) formatu.

Jeigu paveikslėlis turi 1BPP formatą, tai piešimui yra naudojamos fono (background) ir  priekinio plano (foreground)  spalvos.

 
Kaip pavyzdį paimame žemiau esanti paveikslėlį, kurio pavadinimas google_plus06

google_plus06

Nuoroda šio paveikslėlio atsisiuntimui:Link

 

Pirmiausia reikia parsisiūsti ir instaliuoti grafikos redagavimo programėlę GIMP 2, kuri yra nemokama ir ją galima atsisiūsti iš čia:  http://www.gimp.org/downloads/

 

  1. Atidarome GIMP
  2. File>>Open>>nurodome kur yra paveikslėlis kurį norime redaguoti >>Open
  3. Kaip matome iš šio paveikslėlio Image Properties jo dydis yra 128x128, jeigu norime dydi sumažinti:
  4. Image>>Scale Image...įrašome norimą gauti paveikslėlio dydį pikseliais (Width ir Height). Pvz. 60x60 ir spaudžiame Scale.
  5. Image >> Mode >> Indexed, pasirenkame Generate optimum palette ir langelyje Maximum number of colors įrašome norimą spalvų skaičių 2,16 arba 256  ir spaudžiame Convert.
  6. Lengviau pasiekiamoje vietoje susikuriame naują aplanką pvz: C:\GLCD_conv

  7. File >> ExportSave in Folger nurodome 6 punkte sukurtą aplanką., spaudžiame Select File Type (By Extension), pasirenkame File Type>> PNM image ir spaudžiame Export>Data formatting>>RAW ir dar kartą spaudžiame Export.  Aplanke C:\GLCD_conv atsiranda naujas failas google_plus06.pnm
  8.  katalogo StellarisWare\tools\bin nusikopijuojame failą pnmtoc.exe ir jį įkeliame į 6 punkte sukurtą aplanką .
  9. Uždarome GIMP.
  10.  Atsidarome Windows programą Command Prompt, Windows7 ji yra Accessories kataloge
  11.  Atsidariusiame Command Prompt lange,  įkeliame nuorodą į 6 punkte sukurtą katalogą,pvz:

             cd C:\GLCD_conv

                 Spaudžiame Enter.

     Jeigu viskas teisingai yra atlikta, Command Prompt lange jokių papildomų perspėjimų neturi atsirasti,kursorius tik pereis į naują eilutę.                  

       12.     Command Prompt  įkeliame štai tokią tokią komandinę eilutę:

                 pnmtoc -c google_plus06.pnm > google_plus06_new.c

  Spaudžiame Enter.

   Jeigu viskas teisingai yra atlikta, Command Prompt lange jokių papildomų perspėjimų neturi atsirasti, kursorius tik pereis į naują eilutę.    

                 Aplanke C:\GLCD_conv atsiranda naujas failas google_plus06_new.c   Link           

                 Raudona spalva yra konvertuojamo failo pavadinimas. Reikia atkreipti dėmesi, kad konvertuoto failo    

                 pavadinimą (antroje komandinės eilutės pusėje) šiek tiek pakeičiame, nesvarbu, galima rašyti ir visai  

                 kitą  pavadinimą.
            

                Visus 11,12 punkte veiksmus atliekame  su Copy, pelės Paste ir Enter klavišo komandomis.

                Tam reikalui galime turėti jau iš anksto pasirašytą štai tokį nedidelį paprastą šabloną:

 

cd C:\GLCD_conv

pnmtoc -c google_plus06.pnm > google_plus06_new.c

 

               Lieka tik įrašyti konvertuojamo ir  konvertuoto failo pavadinimus (raudonas šriftas) ir naudojant

              Copy-Paste atlikti veiksmus su Command Prompt.

                

  1. Atidarome naujai sukurtą google_plus06_new.c  failą .

Matome didelį masyvą, iš užrašo IMAGE_FMT_4BPP_COMP – galime spręsti, kad tai yra 4BPP (16 bitų spalvinis kodas) paveikslėlis. Dvi žemiau esančios eilutės nurodo jo dydį 60x60 pikseliais.

Pagal nutylėjima, pavekslėlio duomenų masyvas pavadintas g_pucImage, šį pavadinimą pakeičiame, tokiu kokiu norime,tarkim plus_4bpp_60x60.

Gaunam:

 

const unsigned char plus_4bpp_60x60[] =

{

    IMAGE_FMT_4BPP_COMP,

    60, 0,

    60, 0,

 

    15,

----

----

----

};

 

               Išsaugome pakeitimus.

               Šitą failą, tiksliau šio failo tūrinį, toliau bus galima naudoti tolimesnėje projekto kūrimo eigoje.

 
Atsidarome naujai sukurto 13punkte  paredaguoto  paveikslėlio failą
google_plus06_new.c  nukopijuojame visą jame esantį tūrinį.

Atsidarome projekto kataloge esantį My_images_1.c failą ir įkeliame google_plus06_new.c  faile, esantį masyvą. Išsaugome. (Save).

Atsidarome projekto kataloge esantį My_images_1.h failą ir įkeliame nuorodą:

extern const unsigned char plus_4bpp_60x60[];

Išsaugome. (Save).

 

Piešiame paveikslėlį:

  GrImageDraw(&g_sContext, plus_4bpp_60x60, 90 ,130 );

//90,130 – x,y koordinatė, paveikslėlio viršutinis kairysis kampas

Paruoštukai – Widget‘s

Widget yra LCD ekrane atvaizduotas grafinis elementas kuris gali reaguoti į  vartotojo veiksmus.

Kaip pavyzdys čia gali būti mygtukas,  kurį paspaudus LCD ekrane, mikrovaldiklis atlieka kažkokį tai veiksmą.

 
Canvas – piešimo laukas, ant kurio kurio gali būti dedami visi Widget elementai (išskyrus pačius Canvas), rašomas tekstas, piešiami primityviosios grafikos elementai.

LCD ekrane galima talpinti vieną arba kelis piešimo laukus (Canvas).

 
Widget elementai yra šie:

Push button – paspaudimo mygtukas. Paspaudimo mygtukas gali būti stačiakampio arba apskritimo formos.

Image Button  - Vaizdinis mygtukas.

Checkbox  - žymės langelis (vėliavėlė)

Container – Konteineris, kuriame gali būti grupuojami keletas vieno tipo Widget elementų.

Listbox  - Sąrašo laukas. Leidžia vartotojui pasirinkti arba atšaukti vieną iš kelių teksto eilučių.

Radio button – Perjungėjas. Leidžia pasirinkti vieną iš keletos parinkčių.Radio button yra apskritimo formos, kurį pasirinkus, apskritimas yra užpildomas norima spava, arba virš jo yra piešiamas dar vienas apskritimas.

Slider – Slankiklis. Leidžia vartotojui, horizontaliai arba vertikaliai vilkti ar patemti  žymeklį iki pasirinktos reikšmės.

Žemiau pateiktame vaizdo įraše matome kaip veikia Slider's.

Widget‘s inicializuojami žemiau pateiktomis struktūromis:

 

 

 

 

 

 

Canvas(

sName,

pParent,

pNext,

pChild,

pDisplay,

lX,

lY,

lWidth,

lHeight,

ulStyle,

ulFillColor,

ulOutlineColor,

ulTextColor,

pFont,

pcText,

pucImage,

pfnOnPaint

)

CheckBox(

sName,

pParent,

pNext,

pChild,

pDisplay,

lX,

lY,

lWidth,

lHeight,

usStyle,

usBoxSize,

ulFillColor,

ulOutlineColor,

ulTextColor,

pFont,

pcText,

pucImage,

pfnOnChange

)

Container(

sName,

pParent,

pNext,

pChild,

pDisplay,

lX,

lY,

lWidth,

lHeight,

ulStyle,

ulFillColor,

ulOutlineColor,

ulTextColor,

pFont,

pcText)

ImageButton(

sName,

pParent,

pNext,

pChild,

pDisplay,

lX,

lY,

lWidth,

lHeight,

ulStyle,

ulForeColor,

ulPressColor,

ulBackColor,

pFont,

pcText,

pucImage,

pucPressImage,

pucKeycapImage,

sXOff,

sYOff,

usAutoRepeatDelay,

usAutoRepeatRate,

pfnOnClick

)

ListBox(

sName,

pParent,

pNext,

pChild,

pDisplay,

lX,

lY,

lWidth,

lHeight,

ulStyle,

ulBgColor,

ulSelBgColor,

ulTextColor,

ulSelTextColor,

ulOutlineColor,

pFont,

ppcText,

usMaxEntries,

usPopulatedEntries,

pfnOnChange

)

 

 

 

 

 

CircularButton(

sName,

pParent,

pNext,

pChild,

pDisplay,

lX,

lY,

lR,

ulStyle,

ulFillColor,

ulPressFillColor,

ulOutlineColor,

ulTextColor,

pFont,

pcText,

pucImage,

pucPressImage,

usAutoRepeatDelay,

usAutoRepeatRate,

pfnOnClick

)

RectangularButton(

sName,

pParent,

pNext,

pChild,

pDisplay,

lX,

lY,

lWidth,

lHeight,

ulStyle,

ulFillColor,

ulPressFillColor,

ulOutlineColor,

ulTextColor,

pFont,

pcText,

pucImage,

pucPressImage,

usAutoRepeatDelay,

usAutoRepeatRate,

pfnOnClick

)

RadioButton(

sName,

pParent,

pNext,

pChild,

pDisplay,

lX,

lY,

lWidth,

lHeight,

usStyle,

usCircleSize,

ulFillColor,

ulOutlineColor,

ulTextColor,

pFont,

pcText,

pucImage,

pfnOnChange

)

Slider(

sName,

pParent,

pNext,

pChild,

pDisplay,

lX,

lY,

lWidth,

lHeight,

lMin,

lMax,

lValue,

ulStyle,

ulFillColor,

ulBackgroundFillColor,

ulOutlineColor,

ulTextColor,

ulBackgroundTextColor,

pFont,

pcText,

pucImage,

pucBackgroundImage,

pfnOnChange

)

 

 

 

main kodo pradžioje kiekvienam Widget‘ui, jeigu tik toks bus naudojamas, suteikiame pavadinimą. Pvz:

extern tCanvasWidget Background_02;

extern tCheckBoxWidget CheckBox_a;

extern tContainerWidget konteineris1;

extern tImageButtonWidget mygtukas_01;

extern tListBoxWidget ListBox;

extern tPushButtonWidget PushBtn_plius;

extern tRadioButtonWidget radioBtn_01;

extern tSliderWidget slider_value;

 

Widget‘s programiniu būdu aprašomi ir piešiami medžio principu, t.y kiekvienam elementui turi būti nurodoma jo vieta medyje, tai yra nusakoma struktūros parametrais – parent,next ir child. Parametrai parent,next ir child yra rodyklės į widget elementus, kitaip sakant widget elementų pavadinimai su simboliu & priešakyje..   Paprastai medžio kamienas pradedamas nuo canvas, t.y piešimo lauko, kuris turi vieną elementą „child“, šis elementas  savo ruožtu gali turėti savo „child“ elementą, arba elementą „next“. Elementai „next“ gali sudaryti eilę, arba grupę elementų, turinčių tą patį „parent“.



Lietimui jautrus ekranas

Widget‘s naudojimas beveik netenka prasmės, jeigu LCD ekranas nėra lietimui jautrus.

Šioje temoje aprašomas lietimui jautrus 2.8“ TFT LCD HY28A ekranas.

Patogiausia, kai lietimui jautrus ekranas turi integruotą ADC kontrolerį.

Kokiu principu dirba lietimui jautrus ekranas galima pasiskaityti iš žemiau pateiktų nuorodų:

Touchscreen Interfacing 
Using resistive touch screens
Touch Screen Controller Tips
Calibration in touch-screen systems

Per daug nesigilinant į detales, HY28A LCD ekrano ADC kontrolerio valdymui naudojame XPT2046.c ir XPT2046.h failus, kuriuos kuriuos sukeliame į projeką kaip aprašyta Naujo projekto sukūrimo temoje nuo 4 punkto.

Capture_g3

Kalibravimas

Kadangi paėmus keletą to paties paties modelio LCD displėjų, jų rezistyvinio sluoksnio parametrai yra šiek tiek išsibarstę, reikalinga atlikti displėjaus kalibravimą.

Kalibravimo metu apskaičiuojami koeficientai, kurie tolimesnėje eigoje bus naudoami gaunamus iš ADC kontrolerio duomenis paversti į ekrano X ir Y koordinates išreikštas pikseliais.

Yra keletas kalibravimo metodų.

Šiame ADC kontrolerio draiveryje yra panaudotas penkių taškų kalibravimas.

Displėjaus kalibravimui aktivuojame funkciją  TS_Calibration();

Ši funkcja naudojama tik LCD kalibravimo metu.

Kalibravimą atliekame sekančiai:

1. Į mikrokontroleri įkeliame sekančią sukompiliuotą programą:


#include "inc/hw_types.h"
#include "inc/hw_ints.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/fpu.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "grlib/grlib.h"

#include "ILI9320_SPI_drivers/HY28A_SPI_ILI9320.h"
#include "ILI9320_SPI_drivers/XPT2046.h"

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
tContext g_sContext;

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
void main() {

        SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);

        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
        GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
        GPIOPinWrite(GPIO_PORTF_BASE, (GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3), 0x00);

        SPI_Configuration();

        ILI9320_RESET();

        GLCD_Initializtion();

        GrContextInit(&g_sContext, &g_sHY28A_SPI_ILI9320);

        SPI_Config_TP();

        TS_Calibration();

          while(1)
            {


            }
}
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


3.    Atsidarome XPT2046.c failą.
4.    Ekrane pasirodžiusių koeficientų A2,B2,C2,D2,E2,F2 skaitines reikšmes perrašome į XPT2046.c failą:

Capture_g4
5.    Išsaugome failo pakeitimus.