LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

[MBED] STM32 i SSD1306 – sterowanie dwukolorowym OLED [2]

Po każdym wyświetleniu jednego znaku na podstawie informacji o maksymalnych współrzędnych ekranu wyświetlacza (SSD1306_WIDTH i SSD1306_HEIGHT), oraz wartości argumentu size są wyliczane współrzędne kolejnego znaku. Jeżeli kolejny znak nie zmieści się w całości w linijce, to tekst jest automatycznie przenoszony na początek kolejnej linijki (CR, LF). Efekt działania krótkiego fragmentu programu z listingu 11 pokazano na fotografii 9.

List. 11. Wyświetlanie w trybie tekstowym

int main (void)
{    
  InitSSD1306 ();
  DispTxt(0,0,"Test wyswietlacz",16,1);//znaki 16pikseli – obszar żółty
  DispTxt(0,16,"Test wyswietlacz OLED",12,0);//znaki 12 pikseli – negatyw
  DispTxt(0,32,"Sterownik ",16,1);//znaki 16 pikseli
  DispTxt(76,36,"SSD1306",12,1);//znaki 12 pikseli
  RefreshRAM(); //przepisz do sterownika SSD1306
  while(1);
}
Fot. 9. Wyświetlanie testowych ciągów znaków fontami o wysokości 16 i 12 pikseli

Fot. 9. Wyświetlanie testowych ciągów znaków fontami o wysokości 16 i 12 pikseli

Wyświetlanie bitmap

Każda czcionka wyświetlana w trybie tekstowym jest bitmapą rysowaną na ekranie. Te bitmapy – wzorce znaków umieszczane są w tablicy generatora znaków i mają jednakowe wymiary. Jednak często zachodzi konieczność wyświetlania bitmap o różnych rozmiarach. Pewnym problemem jest konwertowanie monochromatycznych. Ja używam prostego programu bmp2c.exe potrafiącego konwertować monochromatyczne mapy o niewielkich rozmiarach na tablicę w języku C. Kiedy już mamy skonwertowana bitmapę, to procedura jej wyświetlania jest stosunkowo prosta – listing 12.

List. 12. Wyświetlenie bitmapy

//********************************************************************************
//rysuj bitmapę
//argumenty
//x,y współrzędne początku bitmapy
//*bmp wskaźnik na tablicę z przekonwertowaną bitmapą
//width - szerokość bitmapy
//height - wysokość bitmapy
//*********************************************************************************
 
void DrawBmp(uint8_t x, uint8_t y, const uint8_t *bmp, uint8_t width, uint8_t height)
{
  uint16_t i, j, byteWidth = (width + 7) / 8;
 
  for(j = 0; j < height; j ++){
    for(i = 0; i < width; i ++) {
      if(*(bmp + j * byteWidth + i / 8) & (128 >> (i & 7))) {
        DrawPoint(x + i, y + j, 1);
      }
    }
  }
}
Fot. 10. Przykładowa bitmapa wyświetlona na OLED

Fot. 10. Przykładowa bitmapa wyświetlona na OLED

Na fotografii 10 pokazano wyświetloną bitmapę, a na fotografii 11 kilka małych bitmap – ikon wyświetlanych w żółtym obszarze matrycy.

Fot. 11. Przykładowe ikonki

Fot. 11. Przykładowe ikonki

Absolwent Wydziału Elektroniki Politechniki Wrocławskiej, współpracownik miesięcznika Elektronika Praktyczna, autor książek o mikrokontrolerach Microchip i wyświetlaczach graficznych, wydanych nakładem Wydawnictwa BTC. Zawodowo zajmuje się projektowaniem zaawansowanych systemów mikroprocesorowych.