Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
2017:fontx-glcd [2018/01/08 15:42] Petr Skryja |
2017:fontx-glcd [2018/01/10 12:47] (aktuální) Petr Skryja |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | (In progress) | ||
======== Fonty FONTX pro grafické displeje ======== | ======== Fonty FONTX pro grafické displeje ======== | ||
Řádek 6: | Řádek 5: | ||
---- | ---- | ||
====== Úvod ====== | ====== Úvod ====== | ||
- | FONTX je bitmapový formát písma. Struktura souboru FONTX je naznačena v následující tabulce. Soubor se skládá z hlavičky, která obsahuje ''Podpis souboru'' o velikosti 6 B, kde jsou uloženy znaky „FONTX2“, ''Název fontu'', ''Šířku fontu'', ''Výšku fontu'' a ''Kódový příznak'', který slouží k rozlišení mezi Single Byte a Double Byte formátem. V tomto projektu je řešen pouze Single Byte format. Po hlavičce následují už jen data všech znaků, která jsou řazena za sebou po bytech. Editor pro tento formát je dostupný [[http://elm-chan.org/fsw/fontxedit.zip | zde]]. | + | FONTX je bitmapový formát sloužící k vykreslování znaků, jehož struktura je naznačena v následující tabulce. Soubor se skládá z hlavičky, která obsahuje ''Podpis souboru'' o velikosti 6 B, kde jsou uloženy znaky „FONTX2“, ''Název fontu'', ''Šířku fontu'', ''Výšku fontu'' a ''Kódový příznak'', který slouží k rozlišení mezi Single Byte a Double Byte formátem. V tomto projektu je řešen pouze Single Byte format. Po hlavičce následují už jen data všech znaků, která jsou řazena za sebou po bytech. Editor pro tento formát je dostupný [[http://elm-chan.org/fsw/fontxedit.zip | zde]]. |
^ Offset ^ Velikost [B] ^ Popis^ | ^ Offset ^ Velikost [B] ^ Popis^ | ||
| 0 | 6| Podpis souboru „FONTX2“ | | | 0 | 6| Podpis souboru „FONTX2“ | | ||
Řádek 32: | Řádek 31: | ||
Pro sériové řízení displeje byl napsán ovladač [[https://gitlab.com/skryja.petr/ST7920-Serial-Driver | ST7920-Serial-Driver]]. Protože sériová komunikace neumožňuje čtení z displeje, je v tomto ovladači vytvořeno pole ST7920_LCD_bit_array[][], které kopíruje celou zobrazovací část displeje. Toto pole potom umožňuje vykreslovat pixely tak, že nedojde k přemazání okolních objektů. Zároveň lze provádět při vykreslování pixelů například logickou operaci XOR. | Pro sériové řízení displeje byl napsán ovladač [[https://gitlab.com/skryja.petr/ST7920-Serial-Driver | ST7920-Serial-Driver]]. Protože sériová komunikace neumožňuje čtení z displeje, je v tomto ovladači vytvořeno pole ST7920_LCD_bit_array[][], které kopíruje celou zobrazovací část displeje. Toto pole potom umožňuje vykreslovat pixely tak, že nedojde k přemazání okolních objektů. Zároveň lze provádět při vykreslování pixelů například logickou operaci XOR. | ||
- | Pomocí funkce ''ST7920_draw_pixel'' lze vykreslit jeden pixel kdekoliv na displeji (adresace x <0-127>, y <0-63>). Vzhledem k tomu, že sériová komunikace je poměrně pomalá a vykreslování objektu po jednom pixelu zabere hodně času, byla napsaná ještě funkce ''ST7920_serial_draw_8pixels'' pro vykreslení osmice pixelů (jednoho bytu), kde jsou pixely vykresleny v ose X za sebou (adresace x <0-119>, y <0-63>) pomocí dvou nebo jednoho zápisu do řadiče (záleží na adrese). Tato funkce umožňuje vykreslit osmici pixelů 4x – 8x rychleji, než funkce vykreslující osmici pixelů po jednom. Funkce umožňují rozsvítit/zhasnout/přepsat pixely nebo nad nimi provést logickou operaci xor. | + | Pomocí funkce ''ST7920_draw_pixel'' lze vykreslit jeden pixel kdekoliv na displeji (adresace x <0-127>, y <0-63>). Vzhledem k tomu, že sériová komunikace je poměrně pomalá a vykreslování objektu po jednom pixelu zabere hodně času, byla napsaná ještě funkce ''ST7920_serial_draw_8pixels'' pro vykreslení osmice pixelů (jednoho bytu), kde jsou pixely vykresleny v ose X za sebou (adresace x <0-119>, y <0-63>). Tato funkce umožňuje vykreslit osmici pixelů 4x – 8x rychleji (záleží na adrese), než funkce vykreslující osmici pixelů po jednom. Funkce umožňují rozsvítit/zhasnout/přepsat pixely nebo nad nimi provést logickou operaci xor. |
Řádek 151: | Řádek 150: | ||
Výsledek příkladu použití: | Výsledek příkladu použití: | ||
{{ 2017:fontx-glcd:fontx-glcd_priklad.jpg?500x300 }} | {{ 2017:fontx-glcd:fontx-glcd_priklad.jpg?500x300 }} | ||
+ | |||
+ | K vykreslení celého řetězce znaků jsou určeny funkce ''FONTX_puts'' a ''FONTX_puts_8x13''. Voláním těchto funkcí se docílí vykreslení řetězce na jeden řádek. Pokud však nastane situace, kdy by byl znak oříznut (nacházel se na konci displeje) nedojde k jeho vykreslení vůbec. Druhá jmenovaná funkce se liší pouze v rychlejším vykreslováním znaku na display. Následující příklad ukazuje použití těchto funkcí. Na druhém a čtvrtém řádku displeje nedošlo k vykreslení znaku 'é', jelikož by byl oříznut na velikost 7x13 pixelů. | ||
+ | |||
+ | <code c> | ||
+ | FONTX_puts(55u, 12u, &Fontx8x13B, "ěščřžýáíé"); | ||
+ | FONTX_puts(56u, 25u, &Fontx8x13B, "ěščřžýáíé"); | ||
+ | |||
+ | FONTX_puts_8x13(55u, 38u, &Fontx8x13B, "ěščřžýáíé"); | ||
+ | FONTX_puts_8x13(56u, 51u, &Fontx8x13B, "ěščřžýáíé"); | ||
+ | </code> | ||
+ | |||
+ | Výsledek příkladu použití funkcí pro vykreslení řetězce: | ||
+ | {{ 2017:fontx-glcd:fontx-glcd_string.jpg?520x300 }} | ||
Ukázkové video se znaky definovanými ISO-8859-2: | Ukázkové video se znaky definovanými ISO-8859-2: | ||
Řádek 157: | Řádek 169: | ||
---- | ---- | ||
====== Závěr ====== | ====== Závěr ====== | ||
- | Napsaný ovladač pro znaky ve formátu FontX je možno napojit na jakýkoliv displej, který má funkci pro vykreslení jednoho (nebo osmice) pixelu na displej. Pokračování ve vylepšování tohoto ovladače by bylo napsání funkce pro vykreslování řetězce znaků a například možnost rotace znaků (či celého řetězce). K tomuto je nutno podotknout, že v normě ISO-8859-2 neodpovídají všechna čísla znakům na české klávesnici, například znak 'š' odpovídá na české klávesnici číslu 0x9A (v normě ISO-8859-2 je to však číslo 0xB9). Znaky uložené v souboru ISO-8859-2_8x13.fnt však lze poměrně snadno předefinovat pomocí FONTX editoru. | + | K realizaci tohoto projektu byl využit vývojový editor EmBitz společně s STM32CubeMX. Byl napsán ovladač pro displej s rozlišením 128x64 a řadičem ST7920, který využívá sériovou komunikaci. Dále byl vytvořen ovladač pro vykreslování znaků ve formátu FontX, který je možno napojit na jakýkoliv displej, který má funkci pro vykreslení jednoho pixelu na displej. Ovladač obsahuje funkce, které umožňují vykreslit jeden znak jakékoliv velikosti či jednořádkový řetězec těchto znaků na jakoukoliv adresu. Funkce byly "zdvojeny" pro vykreslování znaků o velikosti 8x13 pixelů, které využívají funkci knihovny ST7920 k rychlejšímu vykreslení osmice pixelů na displej. Nakonec byla vytvořena pomocí FontX editoru sada znaků pro kódování ISO-8859-2. Nutno podotknou, že ke správnému vykreslování znaků na displej bylo třeba nastavit vývojový editor na kódování ve formátu ISO-8859-2 (viz {{2017:fontx-glcd:fontx-glcd_editor_setting.png?linkonly | zde}}). Pokračování ve vylepšování FontX ovladače by bylo například možnost rotace znaků či celého řetězce. |
\\ | \\ | ||
\\ | \\ |