Obsługa kolorowego wyświetlacza LCD-TFT 320×240 za pomocą mikrokontrolera STM32
Teraz można napisać właściwe procedury emulacji magistrali. Będziemy potrzebowali funkcji zapisu komendy WrCmd, zapisu danej WrData – listing 5.
List. 5. Procedury zapisu komendy i danej
//zapisz komende
void WrCmd(unsigned char cmd){
ClrP(CS);
SetP(RD);
ClrP(A0); //RS=0
BusWrite(cmd);
ClrP(WR);
SetP(WR);
SetP(CS);
}
//zapisz dana
void WrData(unsigned char data){
ClrP(CS);
SetP(RD);
SetP(A0); //RS=1
BusWrite(data);
ClrP(WR);
SetP(WR);
SetP(CS);
}
Procedura zapisu pozycji na ekranie (adresu piksela) została pokazana na listingu 7. Argumentami są współrzędne x i z zakresu 0…319 (liczba 16-bitowa) oraz y – z zakresu 0…239 (liczba 8-bitowa).
List. 6. Ustalenie pozycji na ekranie
void WrAddr(unsigned int x, unsigned char y)
{
unsigned char xh, xl;
xh=x>>8;
xl=x;
WrCmd(xh);
WrCmd(xl);
WrCmd(y);
}
Nie ma tu zabezpieczeń przed przekroczeniem zakresu i użytkownik sam musi zadbać o poprawność określenia pozycji piksela. Dana określająca kolor piksela ma format pokazany na rysunku 2.

Rys. 2. Format danej określającej kolor piksela
Kolor czerwony i zielony jest zakodowany na 3 bitach, a kolor niebieski na 2 bitach. Mając do dyspozycji funkcje zapisu danych i ustalenia pozycji na ekranie zapisywanej danej można napisać funkcje zapisującą bitmapę do wyświetlacza. Na listingu 7 pokazano procedurę wyświetlającą bitmapę o wymiarach 240×320 pikseli zapisanej w tablicy bmp[].Wynik działania tej procedury pokazano na fotografii 3.

Fot. 3. Efekt działania procedury z listingu 7
List. 7. Procedura wyświetlająca pełnowymiarową bitmapę
void SendFullBmp(void)
{
unsigned short x, y;
for(y=0;y<240;y++)
{
WrAddr(0,y);
for(x=0;x<320;x++)
WrData(bmp[(y*320)+x]);
}
}
Pełnowymiarowe bitmapy są używane rzadko. Dużo częściej trzeba wyświetlać mniejsze obiekty graficzne. Dlatego potrzebujemy procedur wyświetlających bitmapy o dowolnym rozmiarze i w dowolnym miejscu wyświetlacza. Oczywiście ta dowolność jest ograniczona rozmiarami matrycy. Procedura z listingu 8 wyświetla bitmapę od pozycji określonej w argumentach x i y i o wymiarach określonych w argumentach dx i dy. Ponieważ na ekranie można umieścić kilka bitmap, to argument bmp przekazuje wskaźnik tablicę z wyświetlaną bitmapą.
List. 8. Procedura wyświetlenia dowolnej bitmapy
void SendBmp(const unsigned char *bmp, short x, short y, short dx, short dy)
{
unsigned short i, j;
for(i=y;i<y+dy;i++) //wyświetlanie wierszy
{
WrAddr(x,i);
for(j=x;j<x+dx;j++)//wyświetlanie pikseli w wierszu
WrData(bmp[((i-y)*dx)+j-x]);
}
}

Fot. 4. Przykład wyświetlenia dowolnej bitmapy

Od wzmacniacza nieodwracającego do integratora i wzmacniacza ładunkowego, czyli historia z zaskakującą pointą jak w dobrym kryminale
Green czy smart? Jak decyzje ESG zaczynają optymalizować procesy produkcyjne
Firma Semicon ma w ofercie narzędzia do obróbki przewodów 

![https://www.youtube.com/watch?v=BgxJVTwYJ-s Zapraszamy do obejrzenia filmu i wysłuchania krótkich wypowiedzi prelegentów Hardware Forum 2026 i organizatorów majowej konferencji dla inżynierów z branży elektronicznej: Konrad Bruliński z Lemontech, prof. Krzysztof Kulpa z Politechniki Warszawskiej, Zbigniew Huber z FLC, Ewa Załupska z firmy KROK, Jerzy Kozieł z MPTECH, Grzegorz Potyralski z VIGO Photonics, dr Krzysztof Czuba z Politechniki Warszawskiej, Anna Beata Kalisz Hedegaard z Quantum Security Defence, Adrian Cichosz z Elhurt Dystrybucja Anna Kamińska z Creotech Quantum, oraz Łukasz Jaeszke i Adam Jaeszke z TEK.day [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/05/tytulowe-film-1.png)



