//Listing 1. Plik nagłówkowy modułu obsługi wyświetlacza GT-S5230 //Parametry fizyczne – położenie poziome #define TFT_WIDTH 400 #define TFT_HEIGHT 240 //Konfigurowanie wyprowadzeń. RD=1, CS=0 #define TFT_DATA_PORT PORTA #define TFT_DATA_DDR DDRA #define TFT_CTRL_PORT PORTB #define TFT_CTRL_DDR DDRB #define RS_PIN PB1 //Wyjście RS: 1->Display data, 0->Command data #define WR_PIN PB2 //Wyjście WR #define RD_PIN PB3 //Wyjście RD #define CS_PIN PB4 //Wyjście CS #define RES_PIN PB0 //Wyjście RESET //Makra #define SET_WR TFT_CTRL_PORT |= (1<>8); writeData((uint8_t) TFT_WIDTH-1); //Ustawienie adresu strony writeCommand(CMD_PASET); writeData(0x00); writeData(0x00); writeData((TFT_HEIGHT-1)>>8); writeData(TFT_HEIGHT-1); //Włączenie ekranu writeCommand(CMD_DISPON); //Czyszczenie ekranu uint32_t bytesToSend = (uint32_t) TFT_WIDTH*TFT_HEIGHT*2 writeCommand(CMD_RAMWR); //Rozpoczęcie zapisu pamięci while(bytesToSend--) writeData(0x00); //Kolor czarny } //Listing 4. Ustawienie aktywnego obszaru ekranu void TFTsetActiveWindow(uint16_t X1, uint8_t Y1, uint16_t X2, uint8_t Y2) { writeCommand(CMD_CASET); writeData(X1 >> 8); writeData(X1 & 0xFF); writeData(X2 >> 8); writeData(X2 & 0xFF); writeCommand(CMD_PASET); writeData(Y1 >> 8); writeData(Y1); writeData(Y2 >> 8); vwriteData(Y2); } //Lisitng 5. Wyświetlanie wypełnionego i „pustego” prostokąta na ekranie wyświetlacza TFT void TFTdrawFilledBox(uint16_t X1, uint8_t Y1, uint16_t X2, uint8_t Y2) { uint32_t bytesToSend = (X2-X1+1)*(Y2-Y1+1); //Obliczenie liczby pikseli //Definiowanie obszaru aktywnego TFTsetActiveWindow(X1, Y1, X2, Y2); //Rozpoczęcie zapisu pamięci writeCommand(CMD_RAMWR); while(bytesToSend--) {writeData(Colour>>8); writeData(Colour&0xFF);} //(2 bajty/piksel) } void TFTdrawRectangle(uint16_t X1, uint8_t Y1, uint16_t X2, uint8_t Y2) { TFTdrawFilledBox(X1 , Y1 , X2 , Y1); TFTdrawFilledBox(X1 , Y2 , X2 , Y2); TFTdrawFilledBox(X1 , Y1 , X1 , Y2); TFTdrawFilledBox(X2 , Y1 , X2 , Y2); } Listing 6. Wyświetlanie obrazu na ekranie wyświetlacza TFT void TFTdrawPicture(uint16_t X1, uint8_t Y1, const uint16_t *Picture) { register uint16_t pixelData, pixelsToSend; register uint8_t Width, Height; //Odczytanie wielkości obrazu pixelData = pgm_read_word(Picture++); //Wyznaczenie wielkości obrazka Width = pixelData >> 8; Height = pixelData & 0xFF; //Obliczenie liczby pikseli do wysłania pixelsToSend = Width * Height; //Definiowane obszaru aktywnego dla uproszczenia zapisu TFTsetActiveWindow(X1, Y1, X1+Width-1, Y1+Height-1); //Rozpoczęcie zapisu pamięci writeCommand(CMD_RAMWR); while(pixelsToSend--) { pixelData = pgm_read_word(Picture++); writeData(pixelData >> 8); writeData(pixelData & 0xFF); } }