piątek, 29 marzec 2024
 
Strona główna Mikrokontrolery 8051 Wyświetlacz alfanumeryczny LCD

Wyświetlacz alfanumeryczny LCD

  1. Opis wskaźnika ze sterownikiem HD44780
  2. Opis wyprowadzeń wyświetlacza
  3. Lista rozkazów układu HD44780
  4. Metody podłączania wyświetlacza do µkontrolera
  5. Makra i procedury pomocnicze
  6. Inicjacja wyświetlacza
  7. Procedury i makra wysyłające dane na wyświetlacz LCD
  8. Procedury i makra sterujące kursorem
  9. Inne procedury i makra
  10. Tablica znaków układu HD44780
  11. Definiowanie własnych znaków
  12. Projekty polskich znaków narodowych

  1. Opis wskaźnika ze sterownikiem HD44780

    Wyświetlacze tekstowe LCD produkowane są przez wielu producentów. W większości wyposażone są w sterownik HD44780 lub zgodny z nim. Dzięki temu sposób podłączenia i sterowanie jest w zasadzie niezależne od konkretnej wersji układu (można to traktować jak standard).

    Cechy układu:
    - zawiera pamięć 80 znaków (DD-RAM), w dwóch zakresach adresowych: 00H-27H, 40H-67H.
    - sterowanie wyświetlaczami 1, 2 lub 4 wierszowymi.
    - znaki w matrycy 5×8 pikseli (lub rzadko spotykane 5×10).
    - zasilanie 5V, pobór prądu ok. 0,5mA.
    - wbudowany generator znaków zgodny z ASCII dla podstawowych znaków, niestety rozszerzone kody zawierają znaki japońskie. Istnieje, co prawda wersja „europejska", ale trudno ją spotkać w handlu.
    - możliwość zdefiniowania max. 8 własnych znaków (np. polskie litery).
    - 3 sygnały sterujące, 4 lub 8 bitowa magistrala danych.
    - możliwość regulacji kontrastu.
    - podświetlenie (niektóre układy).

    Sposób przyporządkowania adresów pamięci DD-RAM do pól wyświetlacza zależy od organizacji wskaźnika. Poniżej pokazane są adresy dla typowych wskaźników:

    1×16

    2×8

    2×16

    2×20

    2×24

    4×16

    4×20

    Trochę to dziwnie wygląda, ale tak już to zrobiono. Konsekwencją takiej organizacji pamięci DD-RAM jest konieczność odpowiedniego dopasowania adresów przy wpisywaniu danych. Zostanie to zaprezentowane w przykładach poniżej.

    do góry
  2. Opis wyprowadzeń wyświetlacza
    NumerNazwaOpis
    1GNDMasa
    2VDDNapiecie zasilania +5V
    3V0Regulacja kontrastu wyświetlacza
    4RSWybór rodzaju informacji:
    0 - komenda
    1 - dane
    5R/WKierunek transmisji:
    0 - wysłanie komendy lub danych
    1 - odczyt stanu lub danych
    6ESygnał zezwalający
    0 - wejścia nieatywne
    1 - wykonanie działania
    7DB0Linia danych D0
    8DB1Linia danych D1
    9DB2Linia danych D2
    10DB3Linia danych D3
    11DB4Linia danych D4
    12DB5Linia danych D5
    13DB6Linia danych D6
    14DB7Linia danych D7
    15LED AAnoda diody podświetlającej
    16LED KKatoda diody podświetlającej

    Tryby pracy układu zależą od sygnałów sterujących:

    RSR/WOpis
    00Wpisanie komendy do HD44780. Lista komend poniżej.
    01Odczyt słowa stanu:
    bity 0-6 tego słowa stanowią aktualny adres w pamięci DD-RAM (lub CG-RAM, bity 0-5),
    bit 7 jest sygnałem zajętości (Busy). Jeżeli Busy=1 to układ wykonuje poprzednią komendę. Przed wykonaniem następnej operacji na HD44780 należy zaczekać, aż Busy=0.
    10Zapis danych do pamięci DD-RAM (lub CG-RAM)
    11Odczyt danych z pamięci DD-RAM (lub CG-RAM)
    do góry
  3. Lista rozkazów układu HD44780

    (x - wartość dowolna)

    MagistralaNazwaOpis
    00000001 Display clear Kasowanie wyświetlacza:
    - pamięć DD-RAM wypełniona spacjami,
    - kursor pod adres 00H (pierwszy znak, lewy górny róg)
    - tryb przesuwania kursora (wyłączenie przesuwania okna)
    0000001x Display/cursor home - kursor pod adres 00H (pierwszy znak, lewy górny róg)
    - tryb przesuwania kursora (wyłączenie przesuwania okna)
    Dane nie są kasowane.
    000001IS Entry mode set Tryb pracy kursora (lub okna)wyświetlacza przy zapisie kolejnych znaków:
    S=0 - przesuwa się kursor
    S=1 - przesuwa się okno, pozycja kursora na wyświetlaczu jest stała
    I=0 - przesuwanie kursora lub okna w lewo (dekrementacja adresu)
    I=1 - przesuwanie kursora lub okna w prawo (inkrementacja adresu)
    00001DCB Display ON/OFF Załączenie (=1) lub wyłączenie (=0) następujących elementów:
    D - całego pola wyświetlacza (display)
    C - kursora (cursor)
    B - miganie znaku (blink)
    0001SRxx Display/cursor shift S=0 - przesunięcie kursora ..
    S=1 - obrót danych wyświetlacza ..
    R=0 - .. w lewo
    R=1 - .. w prawo
    001DNFxx Function set Tryb pracy układu:
    D=0 - 4-bitowa magistrala danych (bity D4-D7)
    D=1 - 8-bitowa magistrala danych
    N=0 - 1 linia wyświetlacza
    N=1 - 2 lub 4 linie wyświetlacza
    F=0 - matryca znaków 5 x 7 punktów
    F=1 - matryca znaków 5 x 10 punktów (nie spotkałem takiego układu!)
    Dla konkretnego układu i schematu jest to wartość stała, ustalana podczas inicjacji wyświetlacza
    01AAALLL CG-RAM set Włącza adresowanie pamięci generatora znaków (CG-RAM) i ustawia adres w tej pamięci.
    6-io bitowy adres zawiera:
    bity AAA - kod znaku 0-7
    bity LLL - numer linii (000 - górna linia)
    1AAAAAAA DD-RAM set Włącza adresowanie pamięci danych wyświetlacza (DD-RAM) i ustawia adres w tej pamięci.
    Sposób przyporządkowania adresów polom wyświetlacza przedstawiono wyżej
    do góry
  4. Metody podłączania wyświetlacza do µK 8051

    Poniższe układy należy traktować jako przykładowe.

    a) Magistrala 8-bitowa, sterowanie portami

    Jest to podłączenie najwygodniejsze dla programisty. Wadą układu jest to, że na sterowanie przeznaczono aż 11 linii portów. Dlatego układ taki jest stosowany wtedy, gdy mamy ich wystarczającą ilość.


    b) Magistrala 4-bitowa, sterowanie portami

    Jest to podłączenie oszczędniej gospodarujące liniami portów, tylko 7 linii.Wadą układu są nieco bardziej złożone procedury obsługi. Układ taki jest stosowany wtedy, gdy mamy ograniczoną ilość linii portów.


    do góry
  5. Makra i procedury pomocnicze

    W poniższych przykładach przyjmuję następującą konfigurację:
    - wyświetlacz 2x16 znaków
    - magistrala 8-bitowa
    - dane podłączone do poru P1
    - sygnał RS - linia P3.5
    - sygnał R/W - linia P3.6
    - sygnał E - linia P3.7
    - kwarc 11,0592 MHz
    W programach stosuję nazewnictwo przyjęte przez większość programistów.

    Stałe programu

    Stałe
    LCDRS   BIT     P3.5
    LCDRW   BIT     P3.6
    LCDE    BIT     P3.7
    

    Makroinstrukcje podstawowe - sygnały sterujące

    Makra
    LCDWC   MACRO             ;Write Command - zapis rozkazu
            CLR     LCDRS
            CLR     LCDRW
            ENDM
    ;--------------------------------------------------------------------------
    LCDWD   MACRO             ;Write Data - zapis danych
            SETB    LCDRS
            CLR     LCDRW
            ENDM
    ;--------------------------------------------------------------------------
    LCDRC   MACRO             ;Read Command - odczyt bajtu stanu (BUSY i adres)
            MOV     P1,#0FFH
            CLR     LCDRS
            SETB    LCDRW
            ENDM
    ;--------------------------------------------------------------------------
    LCDRD   MACRO             ;Read Data - odczyt danych
            MOV     P1,#0FFH
            SETB    LCDRS
            SETB    LCDRW
            ENDM
    ;--------------------------------------------------------------------------
    STROB   MACRO             ;machnięcie linią E (strobowanie układu)
            SETB    LCDE
            CLR     LCDE
            ENDM
    

    Procedury

    Procedura CZYZAJ sprawdza bit BUSY, tzn czy układ HD44780 może przyjmować polecenia lub dane. Zwraca w ACC bieżący adres w pamięci DD-RAM (lub CG-RAM)

    CZYZAJ
    CZYZAJ: LCDRC
    SPRBUSY:SETB    LCDE          ;pętla oczekiwania na zgaszenie BUSY
            MOV     A,P1
            CLR     LCDE
            JB      ACC.7,SPRBUSY
            RET
    

    Procedura PISZKOM wysyła kod rozkazu z akumulatora do układu HD44780. Przed wysłaniem sprawdza bit BUSY.

    PISZKOM - wersja dla magistrali 8-bit
    PISZKOM:PUSH    ACC
            ACALL   CZYZAJ
            LCDWC
            POP     P1
            STROB
            RET
    

    Dla wersji 4-bitowej należy pamiętać, że w porcie P1 są zarówno dane (bity 4567), jak i bity sterujące (bity 012)

    PISZKOM - wersja dla magistrali 4-bit
    PISZKOM:PUSH    ACC
            LCDRC
    SPRBUSY:SETB    LCDE          ;pętla oczekiwania na zgaszenie BUSY
            MOV     A,P1          ;odczyt starszego półbajtu
            CLR     LCDE
            STROB                 ;młodszy ignoruję
            JB      ACC.7,SPRBUSY
            POP     ACC
            PUSH    ACC
            ANL     A,#0F0H       ;maska starszego półbajtu, sterowanie LCDWC
            MOV     P1,A
            STROB
            POP     ACC
            SWAP    A
            ANL     A,#0F0H
            MOV     P1,A
            STROB
            RET
    

    Procedura CZAS wprowadza opóźnienie wynoszące w przybliżeniu tyle milisekund, ile wynosiła zawartość akumulatora przed jej wywołaniam.

    Przyda nam się również makro CZEKAJ z parametrem określającym czas opóźnienia w ms.

    CZAS - opóźnienie zależne od ACC
    CZASMS: PUSH    B
    CZPTLZ: MOV     B,#229
    CZPTLW: NOP
            NOP
            DJNZ    B,CZPTLW
            NOP
            NOP
            DJNZ    ACC,CZPTLZ
            POP     B
            RET
    ;--------------------------------------------------------------------------
    CZEKAJ  MACRO   %T
            MOV     A,#%T
            ACALL   CZASMS
            ENDM
    
    do góry
  6. Inicjacja wyświetlacza

    Po włączeniu napięcia zasilania należy przeprowadzić procedurę inicjalizacji układu. Przebieg tej procedury przedstawiono na poniższych rysunkach. Podane czasy należy traktować jako minimalne, można zastosować znacznie dłuższe, np. po 50ms lub 100ms.

    Procedura inicjalizacji dla magistrali 8-bitowej


    INITLCD - magistrala 8-bit
    INITLCD:CLR     LCDE
            LCDWC
            CZEKAJ  50
            MOV     P1,#30H
            STROB
            CZEKAJ  5
            STROB
            CZEKAJ  1
            STROB
            MOV     A,#38H      ;magistrala 8-bit, dwa wiersze, matryca 5x8
            ACALL   PISZKOM
            MOV     A,#08H      ;wyłączenie wyświetlacza, kursora i migania
            ACALL   PISZKOM
            MOV     A,#01H      ;kasowanie wyświetlacza
            ACALL   PISZKOM
            MOV     A,#0EH      ;załączenie wyświetlacza i kursora
            ACALL   PISZKOM
            RET
    

    Procedura inicjalizacji dla magistrali 4-bitowej


    Procedura ta różni się od powyższej jedynie ustawieniem opcji 4-bitowej oraz inną procedurą PISZKOM:

    INITLCD - magistrala 4-bit
    INITLCD:CLR     LCDE
            LCDWC
            CZEKAJ  50
            MOV     P1,#30H
            STROB
            CZEKAJ  5
            STROB
            CZEKAJ  1
            STROB
            MOV     A,#30H      ;magistrala 4-bit, dwa wiersze, matryca 5x8
            ACALL   PISZKOM
            MOV     A,#08H      ;wyłączenie wyświetlacza, kursora i migania
            ACALL   PISZKOM
            MOV     A,#01H      ;kasowanie wyświetlacza
            ACALL   PISZKOM
            MOV     A,#0EH      ;załączenie wyświetlacza i kursora
            ACALL   PISZKOM
            RET
    
    do góry
  7. Procedury i makra wysyłające dane na wyświetlacz LCD

    PZNAK wysyła do HD44780 bajt z akumulatora traktowany jako kod ASCII znaku (zgodnie z tablicą znaków).
    Procedura ta napisana jest dla wyświetlacza 2×16 i uwzględnia przejście do nowej linii po 16 znaku.

    PZNAK
    PZNAK:  PUSH    ACC
            ACALL   CZYZAJ
            POP     P1
            LCDWD
            STROB
            INC     A
            JB     ACC.4,NLINIA
            RET
    NLINIA: XRL     A,#11010000B
            ACALL   PISZKOM
            RET
    ;------------------------------------------
    ; makro i przykład wykorzystania
    
    PISZZN  MACRO   %ZNAK
            MOV     A,#%ZNAK
            ACALL   PZNAK
            ENDM
    ;------------------------------------------
            PISZZN  'x'
            PISZZN  '='
    

    PTEXT wysyła do HD44780 ciąg znaków od adresu w DPTR. Koniec tego ciągu oznaczony jest bajtem 0.

    PTEXT
    PTEXT:  CLR     A
            MOVC    A,@A+DPTR
            JNZ     PTXTN
            RET
    PTXTN:  ACALL   PZNAK
            INC     DPTR
            SJMP    PTEXT
    ;------------------------------------------
    ; makro i przykład wykorzystania
    
    PISZTXT MACRO   %TEXT
            MOV     DPTR,#%TEXT
            ACALL   PTEXT
            ENDM
    ;------------------------------------------
            PISZTXT INFO
            ...
    INFO:   DB      '(C) Piotr K.',0
    

    PHEX wypisuje na ekranie zawartość akumulatora w formie 2-cyfrowej liczby HEX.

    PHEX
    PHEX:   PUSH    ACC
            SWAP    A
            ANL     A,#0FH
            ADD     A,#'0'
            CJNE    A,#'9'+1,$+3
            JC      PHEXHI
            ADD     A,#7
    PHEXHI: ACALL   PZNAK
            POP     ACC
            ANL     A,#0FH
            ADD     A,#'0'
            CJNE    A,#'9'+1,$+3
            JC      PHEXLO
            ADD     A,#7
    PHEXLO: ACALL   PZNAK
            RET
    ;------------------------------------------
    ; makro i przykład wykorzystania
    
    PISZHEX MACRO   %BAJT
            MOV     A,#%BAJT
            ACALL   PHEX
            ENDM
    ;------------------------------------------
            PISZHEX 0FCH
    

    PBIN wypisuje na ekranie zawartość akumulatora w formie 8-cyfrowej liczby BIN.

    PBIN
    PBIN:   MOV     R3,A
            MOV     R4,#8
    PBINPTL:MOV     A,R3
            RL      A
            MOV     R3,A
            ANL     A,#01H
            ADD     A,#'0'
            ACALL   PZNAK
            DJNZ    R4,PBINPTL
            RET
    ;------------------------------------------
    ; makro i przykład wykorzystania
    
    PISZBIN MACRO   %BAJT
            MOV     A,#%BAJT
            ACALL   PBIN
            ENDM
    ;------------------------------------------
            PISZBIN 56
    
    do góry
  8. Procedury i makra sterujące kursorem

    Makra te wysyłają do HD44780 odpowiednie rozkazy (zgodnie z listą rozkazów). Wykorzystują podprogram PISZKOM.

    KDOM - kursor na początek (pozycja 0,0)
    KDOM    MACRO
            MOV     A,#02H
            ACALL   PISZKOM
            ENDM
    

    KURSOR - sterowanie widocznością i miganiem kursora
    KURSOR  MACRO   %WIDOK,%MIGANIE
            MOV     A,#0CH+2*%WIDOK+%MIGANIE
            ACALL   PISZKOM
            ENDM
    ;------------------------------------------
    NIE     EQU     0
    TAK     EQU     1
            KURSOR  NIE,NIE     ;wyłączenie widoku kursora i migania
            KURSOR  TAK,NIE     ;wyłączenie migania, kursor widoczny
            KURSOR  TAK,TAK     ;załączenie widoku kursora i migania
    

    GOTO - ustawienie kursora na pozycji y,x (kolumna,wiersz)
    ;wiersze i kolumny numerowane są od 0!!!
    
    GOTO    MACRO   %WIERSZ,%KOLUMNA
            MOV     A,#80H+40H*%WIERSZ+%KOLUMNA
            ACALL   PISZKOM
            ENDM
    ;------------------------------------------
            GOTO    0,5
    

    KURLIN - zmiana wiersza bez zmiany kolumny (przejście kursora w pionie)
    KURLIN: ACALL   CZYZAJ
            XRL     A,#11000000B
            ACALL   PISZKOM
            RET
    
    do góry
  9. Inne procedury i makra
    KASUJ - kasowanie wyświetlacza
    KASUJ   MACRO
            MOV     A,#1
            ACALL   PISZKOM
            ENDM
    
    KASUJZ - kasowanie 1 znaku na pozycji kursora
    KASUJZ  MACRO
            MOV     A,#' '    ;spacja
            ACALL   PZNAK
            ENDM
    
    KASUJS - kasowanie ciągu znaków od pozycji kursora
    ; w ACC podana jest ilość kasowanych znaków
    KASUJS: PUSH    ACC
            MOV     A,#' '    ;spacja
            ACALL   PZNAK
            POP     ACC
            DJNZ    ACC,KASUJS
            RET
    
    do góry
  10. Tablica znaków układu HD44780


    do góry
  11. Definiowanie własnych znaków

    W układzie HD44780 istnieje możliwość zdefiniowania do ośmiu własnych znaków (dla matrycy 5×7). Matryca tych znaków zapisywana jest w pamięci CG-RAM o rozmiarze 8×8 bajtów. Jeden bajt (a właściwie jego 5 młodszych bitów) definiuje jedną linię znaku. Osiem kolejnych bajtów definiuje cały znak, kolejność z góry na dół.

    PROJEKTANT ZNAKÓW - klikaj przyciski a zobaczysz...








    Jeżeli chciałbym napisać np. "Żółte światło!" to muszę umieścić w pamięci CG-RAM definicje czterech polskich liter:

    adres 7 6 5 4 3 2 1 0 HEX 
    00  0   0   0   0   1   1   0   0  0CH
    01  0   0   0   0   0   1   0   0  04H
    02  0   0   0   0   0   1   1   0  06H
    03  0   0   0   0   0   1   0   0  04H
    04  0   0   0   0   1   1   0   0  0CH
    05  0   0   0   0   0   1   0   0  04H
    06  0   0   0   0   1   1   1   0  0EH
    07  0   0   0   0   0   0   0   0  00H
    08  0   0   0   0   0   0   1   0  02H
    09  0   0   0   0   0   1   0   0  04H
    0A  0   0   0   0   1   1   1   0  0EH
    0B  0   0   0   1   0   0   0   1  11H
    0C  0   0   0   1   0   0   0   1  11H
    0D  0   0   0   1   0   0   0   1  11H
    0E  0   0   0   0   1   1   1   0  0EH
    0F  0   0   0   0   0   0   0   0  00H
    10  0   0   0   0   0   0   1   0  02H
    11  0   0   0   0   0   1   0   0  04H
    12  0   0   0   0   1   1   1   0  0EH
    13  0   0   0   1   0   0   0   0  10H
    14  0   0   0   0   1   1   1   0  0EH
    15  0   0   0   0   0   0   0   1  01H
    16  0   0   0   1   1   1   1   0  1EH
    17  0   0   0   0   0   0   0   0  00H
    18  0   0   0   1   1   1   1   1  1FH
    19  0   0   0   0   0   0   0   1  01H
    1A  0   0   0   0   0   0   1   0  02H
    1B  0   0   0   1   1   1   1   1  1FH
    1C  0   0   0   0   1   0   0   0  08H
    1D  0   0   0   1   0   0   0   0  10H
    1E  0   0   0   1   1   1   1   1  1FH
    1F  0   0   0   0   0   0   0   0  00H

    Litery otrzymują kody:
    0 lub 8 - ł
    1 lub 9 - ó
    2 lub 10 - ś
    3 lub 11 - Ż

    Stąd napis definiuję następująco (0 jest znacznikiem końca napisu!!!):

             DB     3,1,8,'te ',2,'wiat',8,'o!',0
    

    Do dyspozycji mamy tylko 8 kodów (8 znaków), dlatego należy je definiować w miarę aktualnych potrzeb.
    Procedura POLSKIE "ładuje" 8 znaków naraz.

    POLSKIE - ładowanie kodów polskich znaków
    POLSKIE:MOV     A,#40H             ;Włączenie CG-RAM i ustawienie adresu
            ACALL   PISZKOM            ; na pierwszy znak
            MOV     DPTR,#KODYPL
            MOV     R2,#8*8
    POLPTL: ACALL   CZYZAJ
            CLR     A
            MOVC    A,@A+DPTR
            MOV     P1,A
            LCDWD
            STROB
            INC     DPTR
            DJNZ    R2,POLPTL
            MOV     A,#80H             ;Włączenie DD-RAM i ustawienie adresu
            ACALL   PISZKOM            ; na pierwszy znak
            RET
    ;---------------------------------------------------------------------------
    KODYPL: DB      00H,00H,0EH,01H,0FH,11H,0FH,04H     ;ą
            DB      02H,04H,0EH,10H,10H,11H,0EH,00H     ;ć
            DB      00H,00H,0EH,11H,1FH,10H,0EH,04H     ;ę
            DB      0CH,04H,06H,04H,0CH,04H,0EH,00H     ;ł
            DB      02H,04H,1EH,11H,11H,11H,11H,00H     ;ń
            DB      02H,04H,0EH,11H,11H,11H,0EH,00H     ;ó
            DB      02H,04H,0EH,10H,0EH,01H,1EH,00H     ;ś
            DB      04H,00H,1FH,02H,04H,08H,1FH,00H     ;ż
    

    Poniższa procedura definiuje jeden znak.
    POLZNAK - ładowanie kodów jednego znaku
    ;dane:
    ; DPTR - adres w pamięci ROM definicji znaku,
    ; ACC  - kod znaku (liczba od 0 do 7)
    ;-----------------------------------------------------------------------------
    POLZNAK:ANL     A,#07H            ;maska trzech najmłodszych bitów
            RL      A                 ;mnożenie 8*ACC
            RL      A
            RL      A
            ORL     A,#40H            ;utworzenie rozkazu SET CG-RAM
            ACALL   PISZKOM           ;Włączenie CG-RAM, adres na wskazany znak
            MOV     R2,#8
    POLPTL: ACALL   CZYZAJ
            CLR     A
            MOVC    A,@A+DPTR
            MOV     P1,A
            LCDWD
            STROB
            INC     DPTR
            DJNZ    R2,POLPTL
            MOV     A,#80H            ;Włączenie DD-RAM i ustawienie adresu
            ACALL   PISZKOM           ; na pierwszy znak
            RET
    ;---------------------------------------------------------------------------
    ;przykładowe wywołanie:
            MOV     A,#5
            MOV     DPTR,#POLMS       ;mała litera ś, kod=5
            ACALL   POLZNAK
    ;---------------------------------------------------------------------------
    ;Definicje wszystkich polskich znaków:
    POLDA:  DB      0EH,11H,11H,11H,1FH,11H,11H,02H     ;Ą
    POLDC:  DB      02H,0EH,15H,10H,10H,11H,0EH,00H     ;Ć
    POLDE:  DB      1FH,10H,10H,1EH,10H,10H,1FH,02H     ;Ę
    POLDL:  DB      10H,12H,14H,18H,10H,10H,1FH,00H     ;Ł
    POLDN:  DB      02H,15H,19H,15H,13H,11H,11H,00H     ;Ń
    POLDO:  DB      02H,0EH,15H,11H,11H,11H,0EH,00H     ;Ó
    POLDS:  DB      04H,0EH,10H,0EH,01H,11H,0EH,00H     ;Ś
    POLDZ:  DB      1FH,01H,02H,1FH,08H,10H,1FH,00H     ;Ż
    POLDX:  DB      04H,1FH,09H,02H,04H,08H,1FH,00H     ;Ź
    POLMA:  DB      00H,00H,0EH,01H,0FH,11H,0FH,04H     ;ą
    POLMC:  DB      02H,04H,0EH,10H,10H,11H,0EH,00H     ;ć
    POLME:  DB      00H,00H,0EH,11H,1FH,10H,0EH,04H     ;ę
    POLML:  DB      0CH,04H,06H,04H,0CH,04H,0EH,00H     ;ł
    POLMN:  DB      02H,04H,1EH,11H,11H,11H,11H,00H     ;ń
    POLMO:  DB      02H,04H,0EH,11H,11H,11H,0EH,00H     ;ó
    POLMS:  DB      02H,04H,0EH,10H,0EH,01H,1EH,00H     ;ś
    POLMZ:  DB      04H,00H,1FH,02H,04H,08H,1FH,00H     ;ż
    POLMX:  DB      02H,04H,1FH,02H,04H,08H,1FH,00H     ;ź
    
    do góry
  12. Projekty polskich znaków narodowych
    0EH
    11H
    11H
    11H
    1FH
    11H
    11H
    02H
    02H
    0EH
    15H
    10H
    10H
    11H
    0EH
    00H
    1FH
    10H
    10H
    1EH
    10H
    10H
    1FH
    02H
    10H
    12H
    14H
    18H
    10H
    10H
    1FH
    00H
    02H
    15H
    19H
    15H
    13H
    11H
    11H
    00H
    02H
    0EH
    15H
    11H
    11H
    11H
    0EH
    00H
    04H
    0EH
    10H
    0EH
    01H
    11H
    0EH
    00H
    1FH
    01H
    02H
    1FH
    08H
    10H
    1FH
    00H
    04H
    1FH
    09H
    02H
    04H
    08H
    1FH
    00H
    00H
    00H
    0EH
    01H
    0FH
    11H
    0FH
    04H
    02H
    04H
    0EH
    10H
    10H
    11H
    0EH
    00H
    00H
    00H
    0EH
    11H
    1FH
    10H
    0EH
    04H
    0CH
    04H
    06H
    04H
    0CH
    04H
    0EH
    00H
    02H
    04H
    1EH
    11H
    11H
    11H
    11H
    00H
    02H
    04H
    0EH
    11H
    11H
    11H
    0EH
    00H
    02H
    04H
    0EH
    10H
    0EH
    01H
    1EH
    00H
    04H
    00H
    1FH
    02H
    04H
    08H
    1FH
    00H
    02H
    04H
    1FH
    02H
    04H
    08H
    1FH
    00H
    do góry
© mgr inż. Piotr Kotarski, Kalety