Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C] - Jak zdefiniować znak na wyświetlaczu 7 segmentowym?

lyczewskiand 16 Lip 2013 20:19 1506 7
  • #1 16 Lip 2013 20:19
    lyczewskiand
    Poziom 15  

    Witam. Mam wyświetlacz 7 segmentowy podpięty pod atmegę8. Chcę wyświetlać na nim znaki ale męczy mnie już ręczne ustawianie kazdego segmentu.
    Można jakoś zdefiniować znaki np 1,2,3... itp. na początku programu a potem tylko umieścić gotowy element?
    Chodzi mi o to żeby nie pisać za każdym razem jak chcę wyświetlić cyfrę 8 takiego kodu:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 7
  • #2 16 Lip 2013 20:21
    tmf
    Moderator Mikrokontrolery Projektowanie

    Wygodnie jest podpiąć wszystkie segmenty do jednego portu, wtedy po prostu robisz PORTx=wartość. Definicje cyfr umieszcza się w tablicy, wtedy robisz PORTx=tablica[cyfra]. Proste i skuteczne. Pobierz przykłady z pierwszego linku w mojej stopce, tam masz m.in. tego typu definicje w przykłądach dotyczących LED.

    0
  • #3 16 Lip 2013 20:28
    lyczewskiand
    Poziom 15  

    W stopce widzę tylko książki Twojego autorstwa :)

    0
  • #4 16 Lip 2013 21:22
    BlueDraco
    Specjalista - Mikrokontrolery

    Bardzo uniwersalnie można to zrobić tak:

    #define SEG_A 0x01
    itd. dla segmentów
    Potem:
    const uint8_t b27seg [] =
    {
    SEG_A | SEG_B | SEG_C | SEG_D _SEG_E | SEG_F,
    itd dla kolejnych cyfr
    }

    A potem w przerwaniu timera:
    gasimy cyfry, np.:
    PORTC = 0;
    usatwiamy segmenty:
    PORTSEG = b27seg[cyfra[i]];
    zapalamy cyfrę, np.:
    PORTC = 1 << i;

    0
  • #5 16 Lip 2013 21:53
    tmf
    Moderator Mikrokontrolery Projektowanie

    lyczewskiand napisał:
    W stopce widzę tylko książki Twojego autorstwa :)

    No i są tam linki do stron, na których są do pobrania przykłady.
    Kolega BlueDraco już ci z grubsza idee wyjaśnił :)

    0
  • #6 17 Lip 2013 00:33
    lyczewskiand
    Poziom 15  

    To jednak jeszcze nie to o co mi chodzi.
    Dodam ze mam podwójny wyświetlacz (PARA LIGHT A-502E-10 G)
    Korzystam tylko z jednej połowy i chcę wyświetlać na nim znaki takie jakie chcę.
    Czyli np. na początku kodu zamieszczam jakąś definicję że znak "2" to np. taki i taki pin jest ustawiony jako wyjście a inny jako wejście, tak jak w pierwszym poście, żeby wyświetlić znak "8" muszę ustawić wszystkie piny jako wyjście.

    i tak zdefiniować wszystkie znaki jakie tylko przyjdą mi do głowy, nawet litery.
    A potem np. żeby napisać na takim wyświetlaczu napis "PAULA" (co jest bardzo proste do uzyskania na 7 segmentowym wyświetlaczu), używać tychże definicji, żeby nie ustawiać każdego pinu z osobna za każdym razem przy każdej literce tak jak tutaj:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Poza pytaniem:
    Korzystając z tego miejsca chciałbym się zapytać jaką książkę polecacie do nauki języka C dla AVRów? Pana Kardasia? Pana Francuza? :) Czas się w jakąś książkę zaopatrzyć żeby nie zawracać przysłowiowych 4 liter na forum.

    0
  • #8 17 Lip 2013 10:37
    BlueDraco
    Specjalista - Mikrokontrolery

    Do sterowania wyświetlaczem nie ustawiasz wyprowadzeń jako wejść i wyjść, tylko zmieniasz stan wyjść.
    Jeśli masz wyświetlacz podpięty pod dwa porty, możesz zdefiniować dla każdej cyfry sterownaie dwóch portów jako dwa bajty:

    const struct {
    uint8_t portb, portc;
    } b27seg [] =
    {
    {SEG_A | SEG_B | SEG_C /* segmenty na porcie b*/, SEG_D _SEG_E | SEG_F /* port C*/},
    itd dla kolejnych cyfr - dla każdej dwa bajty
    }
    Potem przy wyświetlaniu masz np.:
    PORTB = b27seg[cyfra[i]].portb;
    PORTC = b27seg[cyfra[i]].portc;

    0