Also Zu dem SetPixel ist es so, dass alle anderen Funktionen diese SetPixel verwenden. SetPixel ist also die grundlegenste Funktion.
Wenn ich mich nicht vertan hab, kannst du die folgenden Funktionen rauswerfen:

void GLCD_Box(ui8_t xstart, ui8_t ystart, ui8_t xend, ui8_t yend, ui8_t color);
void GLCD_Frame(ui8_t xstart, ui8_t ystart, ui8_t xend, ui8_t yend, ui8_t color);
void GLCD_PutC(ui8_t x, ui8_t y, ui8_t chr, ui8_t color);
void GLCD_PutS(ui8_t x, ui8_t y, char *chr, ui8_t color);
void GLCD_PutS_Inv(ui8_t x, ui8_t y, char *chr, ui8_t color);
void GLCD_Fill(ui8_t pattern);
void GLCD_Header(char *text);
void GLCD_On(void);
void GLCD_Off(void);
void GLCD_Error(char *descr, char *module, ui16_t value);

Wenn PutS/PutC weg ist, kannst du auch die "static const stc_font5x7 font5x7[] PROGMEM =...." rauswerfen; frisst dann nicht so viel Flash.

Die "static inline void _delay4Cycles(ui16_t __count)" sowie das nachfolgende define delay(us)... kann ebenso raus.

Von den Ports her ist es so, dass ich hier nicht (wie bei anderen Beispielen) nur 2 Ports hab (d.h. 1 Datenport und 1 Command-Port), sondern dass ich die Command-Leitungen auf verschiedene Ports aufgeteilt hab (ging vom Platinendesign her nicht anders). Macht das ganze aber auch flexibler.

In der Header-File setzt du einfach die Pins & Ports:
Hier mal nur die Kürzel #define TG12864B_....

DATA: Datenport, LCD-Pins 7-14; Datenleitungen

EN: Enable, LCD-Pin 6; Bei einem Enable-Puls werden die an den DATA-Leitungen angelegten Signale übernommen (Write) bzw. das Display legt die angeforderten Daten an die Leitungen (Read).

RW: Read/Write, LCD-Pin 5; Low: Daten zum Display senden; High: Daten vom Display auslesen.

DI: Data/Instruction, LCD-Pin 4; Low: Instruction, Steuerbefehle; High: "Bilddaten"

CS1/CS2: Chip Select für Treiber 1/2, LCD-Pin 15-16; welcher der beiden Treiber soll bei Enable die Daten übernehmen? Beim Schreiben von Daten können beide aktiviert sein, wenn beide das Gleiche machen sollen; beim Lesen darf jedoch nur 1 aktiv sein.

RST: Reset LCD-Pin 17; Low-Aktiv, kann auch mit dem Reset des Controllers verbunden werden für gleichzeitigen Reset.


Nachtrag: achja, dass in der SetPixel 2x GLCD_ReadCell ausgeführt wird, ist Absicht. Wenns nur 1x gemacht wird, macht das Display nur Grütze. Da gabs hier schon mal nen Beitrag von mir dazu.