Tym razem chciałbym opisać sposób programowania wyświetlacza graficznego pochodzącego z telefonu Nokia 5110.
Wstęp
Wyświetlacz graficzny pochodzący z telefonu Nokia 5110 posiada rozdzielczość 84x48px. Do obsługi wykorzystuje on sterownik PCD8544. Cała komunikacja odbywa się poprzez interfejs SPI.
Wyświetlacz można zasilać wykorzystując napięcie z zakresu od 3,3V do 5V.
Podłączenie
Układ należy podłączyć do następujących wyprowadzeń:
- RST - Reset - Pin Arduino 6
- CE - Chip enable - Wybranie urządzenia - Pin Arduino 7
- DC - Data/command - Linia danych, komend - Pin Arduino 5
- Din - Data input - Linia danych Pin Arduino 4
- Clk - Clock Line - Linia zegarowa - Pin Arduino 3
- Vcc - Zasilanie 5V
- BL - Podświetlanie - Zasilanie 3.3V
- Gnd - GND
Ten wyświetlacz może bez problemów współpracować z zasilaniem 3,3V oraz 5V. Dzięki tej drugiej możliwości można go podłączać bezpośrednio do wyprowadzeń układu Arduino Uno bez potrzeby zastosowania konwertera napięć.
Poniżej na rysunku 2 przedstawiłem schemat podłączenia wykonany w programie Fritzig.
Rys. 2. Schemat podłączenia do Arduino Uno.
Programowanie
Bez problemu przykłady, deklaracje oraz wszystkie potrzebne materiały do tego wyświetlacza można znaleść na internecie. W celu zaprogramowania układu należy zdefiniować potrzebną liczbę znaków. Została ona stworzona na potrzeby tego wyświetlacza przez firmę Spark Fun. Tablica znakowa prezentuje się następująco:
static const byte ASCII[][5] = { {0x00, 0x00, 0x00, 0x00, 0x00} // 20 ,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 ! ,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 " ,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 # ,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $ ,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 % ,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 & ,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 ' ,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 ( ,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 ) ,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a * ,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b + ,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c , ,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d - ,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e . ,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f / ,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0 ,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1 ,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2 ,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3 ,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4 ,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5 ,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6 ,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7 ,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8 ,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9 ,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a : ,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ; ,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c < ,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d = ,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e > ,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ? ,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @ ,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A ,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B ,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C ,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D ,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E ,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F ,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G ,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H ,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I ,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J ,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K ,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L ,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M ,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N ,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O ,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P ,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q ,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R ,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S ,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T ,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U ,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V ,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W ,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X ,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y ,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z ,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [ ,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ¥ ,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ] ,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^ ,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _ ,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 ` ,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a ,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b ,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c ,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d ,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e ,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f ,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g ,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h ,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i ,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j ,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k ,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l ,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m ,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n ,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o ,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p ,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q ,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r ,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s ,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t ,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u ,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v ,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w ,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x ,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y ,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z ,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b { ,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c | ,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d } ,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ← ,{0x78, 0x46, 0x41, 0x46, 0x78} // 7f → };
Są w niej zdefiniowane wszystkie potrzebne znaki od specjalnych poprzez cyfry i litery.Opisane jest to poprzez odpowiednie ustawienie pikseli na wyświetlaczu. Deklaracje zostały odpisane w kodzie ASCII zapisanym szesnastkowo.
Kolejnym elementem jest funkcja pozwalająca na wypisanie znaków na ekranie. Pozwala ona na przechodzenie pomiędzy wszystkimi elementami zdeklarowanej wartości. Funckję można wywołać w następujący sposób:
LcdCharacter('7');
void LcdCharacter(char character) { //Stan wysoki na wyświetlacz wpisanie 0 LcdWrite(LCD_D, 0); //Pętla przechodząca pomiędzy wszystkimi elementami for (int index = 0; index < 5; index++) { /* * Wystawienie stanu wysokiego , znaku z kolejnego miejsca * W tablicy jest - 0x20 ponieważ przetwarza znak na kod ASCII, * który jest wpisany do tablicy, a numerowanie w tablicy od 0 */ LcdWrite(LCD_D, ASCII[character - 0x20][index]); } //Zakończenie wpisanie 0 LcdWrite(LCD_D, 0); }
Kolejna funkcja pozwala na umieszczanie ciągu znaków na wyświetlaczu.
void LcdString(char *characters) { //Funckja działająca dopóki są znaki w odwołaniu do funkcji while (*characters) { //Wprowadzanie kolejnego znaku LcdCharacter(*characters++); } }
Następny zdeklarowany element programu daje możliwość wyczyszczenia wyświetlacza z wszystkich umieszczonych na nim znaków.
void LcdClear(void) { //Funckja przechodzi pomiędzy wszystkimi pikselami na tablicy //i wprodzana do nich wartość 0, czyli czyści ekran z umieszczonych znaków. for (int index = 0; index < LCD_X * LCD_Y / 8; index++) { LcdWrite(LCD_D, 0); } }
Funkcja obsługująca wyświetlacz pozwala na rozpoczęcie transmisji. Wygląda ona następująco.
void LcdWrite(byte dc, byte data) { //Wysłanie podanej wartości na wyświetlacz digitalWrite(PIN_DC, dc); //Podanie stanu niskiego na pin wybrania urządzenia digitalWrite(PIN_CE, LOW); //Funckja shiftOut przesyła jeden bit danych co sygnał zegara //Wysłanie danych na pin wejścia danych, oraz sygnału zegarowego na CLK //transmisja rozpoczęta od najbardziej znaczącego bitu shiftOut(PIN_DIN, PIN_CLK, MSBFIRST, data); //Podanie stanu wysokiego na pin wybrania urządzenia, zakońćzenie transmisji digitalWrite(PIN_CE, HIGH); }
No i na samym końcu, chyba jedna z ważniejszych funkcji. Pozwala ona na inicjalizację samego wyświetlacza. Wygląda ona następująco:
void LcdInitialise(void) { //Inicjalizacja poszczególnych pinów pinMode(PIN_CE, OUTPUT); pinMode(PIN_RESET, OUTPUT); pinMode(PIN_DC, OUTPUT); pinMode(PIN_DIN, OUTPUT); pinMode(PIN_CLK, OUTPUT); digitalWrite(PIN_RESET, LOW); digitalWrite(PIN_RESET, HIGH); //Ustawienie odpowiednich komend na wyświetlacz //000100001 Wybranie zewnętrznych instrukcji LcdWrite(LCD_C, 0x21 ); //010110001 Ustawienie kontrastu LcdWrite(LCD_C, 0xB1 ); //000000100 Współczynnik temperaturowy na 0 LcdWrite(LCD_C, 0x04 ); //000010011 Ustawienie wartości Bias mode //na 4 dla MUX rate 1:48 LcdWrite(LCD_C, 0x13 ); //000100000 Właczenie podstawowych komend LcdWrite(LCD_C, 0x20 ); // LCD Basic Commands //000001100 Normalny tryb pracy LcdWrite(LCD_C, 0x0C ); }
Cały program prezentuje się następująco:
#define PIN_CE 7 #define PIN_RESET 6 #define PIN_DC 5 #define PIN_DIN 4 #define PIN_CLK 3 #define LCD_C LOW #define LCD_D HIGH #define LCD_X 84 #define LCD_Y 48 static const byte ASCII[][5] = { {0x00, 0x00, 0x00, 0x00, 0x00} // 20 ,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 ! ,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 " ,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 # ,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $ ,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 % ,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 & ,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 ' ,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 ( ,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 ) ,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a * ,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b + ,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c , ,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d - ,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e . ,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f / ,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0 ,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1 ,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2 ,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3 ,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4 ,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5 ,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6 ,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7 ,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8 ,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9 ,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a : ,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ; ,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c < ,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d = ,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e > ,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ? ,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @ ,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A ,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B ,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C ,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D ,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E ,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F ,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G ,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H ,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I ,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J ,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K ,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L ,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M ,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N ,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O ,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P ,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q ,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R ,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S ,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T ,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U ,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V ,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W ,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X ,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y ,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z ,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [ ,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ¥ ,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ] ,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^ ,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _ ,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 ` ,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a ,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b ,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c ,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d ,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e ,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f ,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g ,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h ,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i ,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j ,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k ,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l ,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m ,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n ,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o ,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p ,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q ,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r ,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s ,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t ,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u ,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v ,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w ,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x ,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y ,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z ,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b { ,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c | ,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d } ,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ← ,{0x78, 0x46, 0x41, 0x46, 0x78} // 7f → }; void LcdCharacter(char); void LcdClear(void); void LcdString(char *); void LcdWrite(byte, byte); void setup(void) { LcdInitialise(); LcdClear(); LcdString("ABCDEFGHIJKLMNOPRSTWXZY"); LcdCharacter('1'); LcdString("234567890!@#$%^&*(){}[]"); } void loop(void) { } void LcdWrite(byte dc, byte data) { //Wysłanie podanej wartości na wyświetlacz digitalWrite(PIN_DC, dc); //Podanie stanu niskiego na pin wybrania urządzenia digitalWrite(PIN_CE, LOW); //Funckja shiftOut przesyła jeden bit danych co sygnał zegara //Wysłanie danych na pin wejścia danych, oraz sygnału zegarowego na CLK //transmisja rozpoczęta od najbardziej znaczącego bitu shiftOut(PIN_DIN, PIN_CLK, MSBFIRST, data); //Podanie stanu wysokiego na pin wybrania urządzenia, zakońćzenie transmisji digitalWrite(PIN_CE, HIGH); } void LcdString(char *characters) { //Funckja działająca dopóki są znaki w odwołaniu do funkcji while (*characters) { //Wprowadzanie kolejnego znaku LcdCharacter(*characters++); } } void LcdInitialise(void) { //Inicjalizacja poszczególnych pinów pinMode(PIN_CE, OUTPUT); pinMode(PIN_RESET, OUTPUT); pinMode(PIN_DC, OUTPUT); pinMode(PIN_DIN, OUTPUT); pinMode(PIN_CLK, OUTPUT); digitalWrite(PIN_RESET, LOW); digitalWrite(PIN_RESET, HIGH); //Ustawienie odpowiednich komend na wyświetlacz //000100001 Wybranie zewnętrznych instrukcji LcdWrite(LCD_C, 0x21 ); //010110001 Ustawienie kontrastu LcdWrite(LCD_C, 0xB1 ); //000000100 Współczynnik temperaturowy na 0 LcdWrite(LCD_C, 0x04 ); //000010011 Ustawienie wartości Bias mode //na 4 dla MUX rate 1:48 LcdWrite(LCD_C, 0x13 ); //000100000 Właczenie podstawowych komend LcdWrite(LCD_C, 0x20 ); // LCD Basic Commands //000001100 Normalny tryb pracy LcdWrite(LCD_C, 0x0C ); } void LcdClear(void) { //Funckja przechodzi pomiędzy wszystkimi pikselami na tablicy //i wprodzana do nich wartość 0, czyli czyści ekran z umieszczonych znaków. for (int index = 0; index < LCD_X * LCD_Y / 8; index++) { LcdWrite(LCD_D, 0); } } void LcdCharacter(char character) { //Stan wysoki na wyświetlacz wpisanie 0 LcdWrite(LCD_D, 0); //Pętla przechodząca pomiędzy wszystkimi elementami for (int index = 0; index < 5; index++) { /* * Wystawienie stanu wysokiego , znaku z kolejnego miejsca * W tablicy jest - 0x20 ponieważ przetwarza znak na kod ASCII, * który jest wpisany do tablicy, a numerowanie w tablicy od 0 */ LcdWrite(LCD_D, ASCII[character - 0x20][index]); } //Zakończenie wpisanie 0 LcdWrite(LCD_D, 0); }
Program wyświetla przykładowy zestaw znaków na wyświetlaczu.
Poniżej przestawiam widok podłączonego układ oraz wyświetlane przez niego dane.
Rys. 3. Podłączony układ, znaki na wyświetlaczu
Dodatkowo
Jeśli jest problem z działanie wyświetlacza, tzn nie pokazują się znaki albo dziwnie się zachowuje wtedy należy się upewnić czy jest on poprawnie zamocowany w płytce. Może się tak zdarzyć, że uchwyty metalowe trzymające wyświetlacz nie są odpowiednio dociśnięte. W takim wypadku należy wziąć kombinerki i delikatnie mocnej odgiąć mocowania.
Dostępny jest też program, który pozwala na konwersję bitmapy na kod zrozumiały dla wyświetlacza. Można go pobrać z tej strony. Dzięki niemo można właściwie każdy plik graficzny przerobić na obraz dostosowany do rozdzielczości wyświetlacza graficznego.
Dostępny jest też program, który pozwala na konwersję bitmapy na kod zrozumiały dla wyświetlacza. Można go pobrać z tej strony. Dzięki niemo można właściwie każdy plik graficzny przerobić na obraz dostosowany do rozdzielczości wyświetlacza graficznego.