piątek, 29 marzec 2024
 
Strona główna Mikrokontrolery 8051 Wyświetlacz 7-segmentowy LED

Procedury obsługujące 7-segmentowy wyświetlacz LED

  1. Konwersja BIN → 7segment
  2. Obsługa wyświetlacza 7-segmentowego

  1. Konwersja BIN → 7segment

    Wskaźnik 7-segmentowy zawiera faktycznie osiem segmentów (wraz z kropką). Zazwyczaj segmenty oznacza się w sposób pokazany na rysunku. Podprogram BIN2SEG zamienia liczbę w akumulatorze (0-15) na 8-bitowy kod z wygaszoną kropką. Zakładam, że 1 oznacza świecenie, a 0 wygaszenie segmentu.
    Przyporządkowanie segmentów do bitów:

    76543210
    HGFEDCBA
    BIN2SEG
    BIN2SEG:ANL     A,#0FH         ;maska dla 4 bitów
            INC     A              ;pominięcie RET
            MOVC    A,@A+PC        ;pobranie kodu
            RET
    ;tablica kodów (bezpośrednio za RET!)
            DB      3FH,06H,5BH,4FH  ; 0 1 2 3
            DB      66H,6DH,7DH,07H  ; 4 5 6 7
            DB      7FH,6FH,77H,7CH  ; 8 9 A b
            DB      39H,5EH,79H,71H  ; C d E F
    

    W powyższym podprogramie liczby od 0 do 15 zamieniane są na kody 7-segmentowe cyfr szesnatkowych. Nic nie stoi na przeszkodzie, aby zastosować inne kody otrzymując inny zestaw znaków. Ponadto, stosując maskę np. 5-bitową (1FH) uzyskamy 32 zamiast 16 kodów.
    Poniższa tabela przedstawia wszystkie kombinacje kodowe, które mają jakiś sens. Kształty niektórych znaków nie są najlepsze, ale kilka typowych napisów można skonstruować.

    widokkodyuwagiPROJEKTANT
     3FH 06H 5BH 4FH cyfry (0 1 2 3), litery (O I)
    A
    B
    C
    D
    E
    F
    G
    H
     66H 6DH 7DH 07H cyfry (4 5 6 7), litera (S)
     7FH 6FH 77H 7CH cyfry (8 9), litery (A b)
     39H 5EH 79H 71H litery (C d E F)
     58H 3DH 76H 74H litery (c G H h)
     18H 1EH 38H 37H litery (i J L M?)
     54H 5CH 73H 67H litery (n o P q lub ro:ρ)
     50H 78H 1CH 3EH litery (r t u U lub W)
     6EH 72H 40H 48H litery (y µ), znaki (- =)
     00H 20H 22H 63H spacja, znaki (’ " º)

    Niestety, nie można stworzyć niektórych liter, np. K czy Z.
    Swojego nazwiska nie napiszę, ale imię:

    Inne napisy:      

    do góry
  2. Obsługa wyświetlacza 7-segmentowego

    W systemach µ-procesorowych wskaźniki 7-segmentowe sterowane są multiplekserowo. W typowym przypadku oznacza to zużycie 8 linii we/wy na segmenty oraz tyle linii, ile jest wskaźników. W poniższym przykładzie przyjmuję następujące założenia:

    • wyświetlacz zawiera sześć wskaźników 7-segmentowych z kropką
    • w miejsce siódmego wskaźnika podłączono zestaw 8 diód LED
    • dane do wyświetlania zawarte są w pamięci o adresach DANE i LEDY, przy czym dla wskaźników są to kody (np. 0-15 dla cyfr szesnastkowych)
    • informacja o kropkach zawarta jest w pamięci o adresie KROPKI
    • obsługa realizowana jest w przerwaniu od timera T0 o okresie około 1ms
      (tryb 1, TH0=256-4 dla fxtal=11059200Hz)
    • przerwanie korzysta z pierwszego banku rejestrów. Rejestry mają następujące funkcje:
      R0 - adresuje dane,
      R2 - licznik wskaźników,
      R3 - numer wskaźnika w kodzie 1z7 (0 aktywne),
      R4 - rejestr pomocniczy,
    • w programie wykorzystano procedurę BIN2SEG omówioną w poprzednim punkcie.

    Schemat układu:

    Obsługa wskaźnika
    ;---------------------------------------------------------------------------
    DANE    REG     20H           ;6 bajtów danych dla wskaźników
    LEDY    REG     DANE+6        ;bajt danych dla zestawu diód
    KROPKI  REG     LEDY+1        ;układ kropek
    TMODW   EQU     00000001B     ;T0 - bramkowanie wewn, tryb 1, timer
    TH0W    EQU     256-4         ;czas 256*4*12/11059200s = 1.111ms
    TL0W    EQU     0
    ;---------------------------------------------------------------------------
    BANK0   MACRO
            CLR     RS0
            ENDM
    BANK1   MACRO
            SETB    RS0
            ENDM
    ;---------------------------------------------------------------------------
            LJMP    START
    ;---------------------------------------------------------------------------
    ;obsługa przerwania
            ORG     000BH
            PUSH    PSW
            PUSH    ACC
            MOV     TH0,#TH0W
            BANK1
            MOV     P3,#0FFH      ;wyłączenie wszystkich wskaźników
            MOV     A,@R0         ;pobranie danej do wyświetlenia
            CJNE    R0,#LEDY,T0KOD;czy zestaw diód?
            SJMP    T0SEGM        ;tak, brak przekodowania i kropki
    T0KOD:  ACALL   BIN2SEG       ;nie, przekodowanie dla wskaźnika 7seg
            MOV     R4,A          ;uwzglęnij kropkę
            MOV     A,KROPKI
            ANL     A,R3
            JZ      T0KR          ;czy ma być kropka? (ACC=0 -> nie)
            MOV     A,#10000000B  ;tak
    T0KR:   ADD     A,R4          ;dodanie bitu kropki
    T0SEGM: MOV     P1,A          ;ustaw segmenty
            MOV     P3,R3         ;włącz wskaźnik
            INC     R0            ;modyfikuj rejestry dla następnego wskaźnika
            MOV     A,R3
            RL      A
            MOV     R3,A
            DJNZ    R2,T0KON      ;czy ostatni wskaźnik?
            MOV     R0,#DANE      ;rejestry dla pierwszego wskaźnika
            MOV     R2,#7
            MOV     R3,#11111110B
    T0KON:  POP     ACC
            POP     PSW
            RETI
    ;---------------------------------------------------------------------------
    BIN2SEG:....                  ;procedura przekodowania
    ;---------------------------------------------------------------------------
    ;program główny
    START:  MOV     SP,#60H       ;przestawienie stosu
            MOV     TH0,#TH0W     ;ustawienie timera
            MOV     TL0,#TL0W
            MOV     TMOD,#TMODW
            BANK1
            MOV     R0,#DANE      ;dane początkowe dla rejestrów sterujących
            MOV     R2,#7
            MOV     R3,#11111110B
            BANK0
            SETB    TR0           ;włączenie timera
            SETB    ET0           ;włączenie przerwań
            SETB    EA
    ;---------------------------------------------------------------------------
    ; program główny, który generuje dane do wyświetlania,
    ; wpisując je do pamięci DANE/LEDY/KROPKI
            ...
    ;---------------------------------------------------------------------------
    
    do góry
© mgr inż. Piotr Kotarski, Kalety