Stap 4: LCD Protocol - tekening (alleen in de Phillips-PCF8833!)
Verder te gaan met het protocol, zodra het LCD-scherm wordt geïnitialiseerd is klaar om te trekken. Tekening werkt door eerst definiëren een regio te trekken en vervolgens streaming pixelgegevens te vullen die regio. Het is verwarrend op het eerste, maar indien behoorlijk gedaan is efficiënter dan pixel-bij-pixel tekening. Een regio is simpelweg een rechthoekig gebied op het scherm. We zullen zeggen dat het begint bij punt (X1, Y1) en eindigt bij punt (X2, Y2). Eenmaal gedefinieerd, zal de LCD controller pixels van links naar rechts (X1, Y1) basisgewicht invullen. Wanneer het de rand van de regio wordt bereikt, zal het springen naar de volgende regel [in mijn voorbeeld, (X1, Y1 + 1)]. Het doet dit totdat het bereikt (X2, Y2) op die het stopt gegevens te aanvaarden. Als u alleen tekenen van één pixel wilt, u gewoon instellen (X1, Y1) en (X2, Y2) aan de pixel waar u wilt tekenen. Dit bepaalt de regio als een enkele pixel. Alle gegevens die worden verzonden na van de eerste pixel waarde van gegevens is verwijderd.Als u wilt definiëren een regio, moet u deze opdrachten verzenden in de volgende volgorde:
PASET (Hex 0x2B) - adres van de pagina instellen
Gegevens Y1 - de beginpositie van Y
Gegevens Y2 - de eindpositie van Y
CASET (Hex 0x2A) - kolom adres Set
Gegevens X1-het beginpunt X positie
Gegevens X2-de laatste X positie
RAMWR (Hex 0x2C) - RAM schrijven - begin verzendende pixelgegevens na deze opdracht
< pixelgegevens > - opmaak die hieronder worden beschreven
Nadat het scherm klaar om te accepteren van de pixelgegevens is, moet u de kleurgegevens voor elke pixel in volgorde sturen. In de standaardmodus voor kleur (0x03, 12-bits per pixel) gebruikt kleurgegevens 12 bits. Dit betekent dat u 2 pixels waard van gegevens voor elke 3 bytes verzenden kunt. Als u slechts één pixel verzendt, hoeft u alleen voor het verzenden van 2 bytes. Het formaat 2-pixels-per-3-bytes wordt hieronder weergegeven:
RRRR GGGG | BBBB RRRR | GGGG BBBB
Als slechts één pixel te verzenden, kunt u deze indeling in plaats daarvan:
XXXX RRRR | GGGG BBBB (X betekent "don't care", kunnen ofwel 0 of 1, deze bits worden verwijderd)
In C, mag u deze code aan output formaat van de 2-pixels-per-3-bytes, color1 en kleur2 zijn 16-bits waarden (ints in AVR GCC)
(color_lcd_send_data(char dat) is een functie die een gegevensbyte aan de LCD uitgangen)
color_lcd_send_data (color1 >> 4);
color_lcd_send_data (((color1&0x0F) << 4) | () Color2 >> 8));
color_lcd_send_data(color2);
Deze code wordt vereenvoudigd voor 1-pixel-2-bytes formaat voor single-pixel schrijft:
color_lcd_send_data (kleur >> 4);
color_lcd_send_data (kleur << 4);