W tym poście chciałbym opisać sposób generowania czcionek dla wyświetlacza M7 AXA.
[Źródło: http://www.st.com/en/evaluation-tools/32f746gdiscovery.html]
[Źródło: http://www.artronic.eu/pl/p/LCD-AG-TFTSD-UART-480272C-43TP-B/997]
[Źródło: http://www.artronic.eu/pl/p/LCD-AG-TFTSD-UART-480272C-43TP-B/997]
Ten post jest kontynuacją wcześniejszego wpisu, w którym opisałem sposób obsługi wyświetlacza sterowanego przez interfejs UART. Sposób tworzenia czcionek testowałem dla wszystkich wielkości dostępnych domyślnie na wyświetlaczu, czyli 24, 32, 48 oraz 64.
Wygenerowane czcionki muszą być jednakowej szerokości np. Lucida Console.
Do generowania czcionek potrzebne będą programy PCToLCD2002 oraz program do zamiany wartości na ASCII Hex na BIN np. WinHex.
PCToLCD2002 jest w języku chińskim. Co powoduje wyświetlenie wszystkich znaków jako pytajniki. Opis poszczególnych funkcji można znaleźć pod tymi linkami: link1, link2.
Powyższe ustawienia pozwolą na wygenerowanie poprawnych znaków dla opisywanego wyświetlacza. Najważniejsza jest lewa strona okna, z prawej opisane są sposoby formatowania tekstu, który można wyświetlić w dowolny sposób.
Następnie należy wrócić do ekranu głównego przez kliknięcie przycisku akceptacji zaznaczonego czerwonym kółkiem.
Tak przygotowaną czcionkę należy przenieść do pliku tekstowego, przez zaznaczenie całości i skopiowanie.
- !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
- (0) !(1) "(2) #(3) $(4) %(5) &(6) '(7)
- ((8) )(9) *(10) +(11) ,(12) -(13) .(14) /(15)
- 0(16) 1(17) 2(18) 3(19) 4(20) 5(21) 6(22) 7(23)
- 8(24) 9(25) :(26) ;(27) <(28) =(29) >(30) ?(31)
- @(32) A(33) B(34) C(35) D(36) E(37) F(38) G(39)
- H(40) I(41) J(42) K(43) L(44) M(45) N(46) O(47)
- P(48) Q(49) R(50) S(51) T(52) U(53) V(54) W(55)
- X(56) Y(57) Z(58) [(59) \(60) ](61) ^(62) _(63)
- `(64) a(65) b(66) c(67) d(68) e(69) f(70) g(71)
- h(72) i(73) j(74) k(75) l(76) m(77) n(78) o(79)
- p(80) q(81) r(82) s(83) t(84) u(85) v(86) w(87)
- x(88) y(89) z(90) {(91) |(92) }(93) ~(94) (95)
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
Ich generację należy przeprowadzić pojedynczo. W przypadku generowania ich ciągiem, litery nie będą wyświetlane poprawnie:
Tak wygenerowany znak należy skopiować do pliku tekstowego z docelową czcionką. Gdzie umieszczamy go w zastępstwie za wybrany znak. Operację należy powtórzyć dla wszystkich potrzebnych znaków.
Gdy już cała czcionka jest gotowa z pliku txt należy usunąć wszystkie niepotrzebne znaki. Dla powyższych ustawień będą to:
- !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
- (0) !(1) "(2) #(3) $(4) %(5) &(6) '(7)
- ((8) )(9) *(10) +(11) ,(12) -(13) .(14) /(15)
- 0(16) 1(17) 2(18) 3(19) 4(20) 5(21) 6(22) 7(23)
- 8(24) 9(25) :(26) ;(27) <(28) =(29) >(30) ?(31)
- @(32) A(33) B(34) C(35) D(36) E(37) F(38) G(39)
- H(40) I(41) J(42) K(43) L(44) M(45) N(46) O(47)
- P(48) Q(49) R(50) S(51) T(52) U(53) V(54) W(55)
- X(56) Y(57) Z(58) [(59) \(60) ](61) ^(62) _(63)
- `(64) a(65) b(66) c(67) d(68) e(69) f(70) g(71)
- h(72) i(73) j(74) k(75) l(76) m(77) n(78) o(79)
- p(80) q(81) r(82) s(83) t(84) u(85) v(86) w(87)
- x(88) y(89) z(90) {(91) |(92) }(93) ~(94) (95)
- {
- 0x
- ,
- },
- /*...*/
oraz wszystkie znaki przejścia do nowej linii. W przypadku błędnego usunięcia danych, nie będzie możliwości poprawnego wygenerowania pliku binarnego.
Po usunięcie niepotrzebnych otrzymamy coś takiego jak poniżej:
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 000000000007C0000007C0000007C000
- 0007C0000007C0000007C0000007C000
- 0007C0000007C0000007C0000007C000
- 0007C0000007C0000007C0000007C000
- 0007C0000007C0000007C0000007C000
- 0007C0000007C0000007C0000007C000
- 0007C0000007C0000007C0000007C000
- 0007C000000780000003800000038000
- 00038000000380000000000000000000
- 00000000000000000000000000000000
- 000FE000000FE000000FE000000FE000
- 000FE000000FE000000FE00000000000
- /*
- Pozostałe znaki
- */
Teraz plik należy otworzyć w program winhex, gdzie zostanie on zamieniony na plik binarny.
Tak przygotowaną czcionkę należy umieścić na karcie SD w folderze Font. Z nazwą ASCXX.bin, gdzie XX to wielkość czcionki.
Powyższy sposób działa dla wszystkich wyświetlaczy z tej rodziny (4,3, 5 oraz 7 cali).
Problem jaki może się pojawić to błędne wyświetlanie znaków, głównie dla czcionki o rozmiarze 64. Powodem błędu wyświetlana grafika razem z czcionką 64 to np format bmp, czy za długa nazwa pliku graficznego w innym formacie (przynajmniej takie błędy dotyczyły mojej aplikacji). Aby go rozwiązać najlepiej stosować krótkie nazwy plików graficznych umieszczonych w formacie png (grafika transparenta działa bez problemów na tych wyświetlaczach lub pliki jpg) oraz unikanie formatu bmp.