Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2017:fontx-glcd

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2017:fontx-glcd [2018/01/08 16:44]
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 152: Řádek 151:
 {{ 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í ​všech znaků v řetězci 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ů.+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> <code c>
Řádek 158: Řádek 157:
 FONTX_puts(56u,​ 25u, &​Fontx8x13B,​ "​ěščřžýáíé"​);​ FONTX_puts(56u,​ 25u, &​Fontx8x13B,​ "​ěščřžýáíé"​);​
  
-FONTX_puts(55u, 38u, &​Fontx8x13B,​ "​ěščřžýáíé"​);​ +FONTX_puts_8x13(55u, 38u, &​Fontx8x13B,​ "​ěščřžýáíé"​);​ 
-FONTX_puts(56u, 51u, &​Fontx8x13B,​ "​ěščřžýáíé"​);​+FONTX_puts_8x13(56u, 51u, &​Fontx8x13B,​ "​ěščřžýáíé"​);​
 </​code>​ </​code>​
  
Řádek 170: Řá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ů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 adresuFunkce 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.
 \\ \\
 \\ \\
2017/fontx-glcd.1515426247.txt.gz · Poslední úprava: 2018/01/08 16:44 autor: Petr Skryja