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.

Zmienne - łaczenie i rozdzielenie (programowanie mikrokontrolery język C)

alluser 10 Kwi 2017 17:00 615 6
  • #1 10 Kwi 2017 17:00
    alluser
    Poziom 10  

    Witam, proszę o pomoc.
    Mam wyświetlacz 7 segmentowy sterowany multipleksowo. Każdą zmienna w1, w2, w3, w4 przyjmuję cyfrę z tablicy znaków.
    przykład
    w1 = 1
    w2 = 3
    w3 = 5
    w4 = 9
    na wyświetlaczu zapala się 1359
    To jest ok i działa prawidłowo każda dowolna liczba od 0 do 9
    Ale problem mam z połączeniem i rozdzieleniem zmiennych.
    Moim zamiarem jest aby zmienne w1 i w2 przyjęły wartość zmiennej "a"
    czyli jeżeli "a" = 29 to zmienna w1 przyjmuję wartość 2 a zmienna w2 przyjmuje wartość 9
    to samo ze zmiennymi w3 i w4 żeby przyjęły wartość zmiennej "b"
    czyli jeżeli "a" = 29 oraz "b" = 15 na wyświetlaczu chciałbym widzieć 2915
    Próbowałem to zmienić przesunięciami bitowymi np.:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    niestety nie działa to prawidłowo ponieważ po przekroczeniu liczby 10 pojawiają się dziwne znaki.
    Nie wiem jak to zrobić żeby zmienne w1 i w2 otrzymały wartość zmiennej "a" oraz w3 i w4 otrzymały wartość zmiennej "b"
    Problem mam też w odwrotnej sytuacji czyli aby zmienna "a" = w1 i w2 i zmienna "b" = w3 i w4
    Proszę o pomoc.
    Dziękuję i pozdrawiam serdecznie,
    Janusz

    0 6
  • Pomocny post
    #2 10 Kwi 2017 17:16
    drobok
    Poziom 26  

    Jeśli chcesz wyświetlić liczbę binarną w formacie bcd to musisz zmienić ów format (google - bin2bcd) lub zwyczajnie zrobić zmienna/10 i zmienna%10 by uzyskać starszą lub młodszą cyfrę (co jest mało optymalne).

    0
  • #3 10 Kwi 2017 18:42
    alluser
    Poziom 10  

    Dziękuję za pomoc.
    w1 = a/10 oraz w2 = a%10 pomogło. Powinno na początek mi wystarczyć bo to będzie tylko do funkcji którą będę wywoływać bardzo rzadko.
    Wszystko ładnie zlicza od 00 do 99 i licznik się przekręca po 99 do 00 z tym że jak jestem na zero "00" i robię klawiszem a=a-1 czyli a-- odejmowanie to wyświetlacz nie wraca do 99 Nie wiem jak to uzyskać.
    mam zrobione if-em że jeżeli a>=100 to a = 00
    Jest sposób aby wracał do 99 jeżeli przekraczam poniżej 00 ? Czyli trzymam klawisz ze zmienną a-- i cyfry liczą w dół a po przekroczeniu zera znowu zaczyna się liczenie od 99 w dół
    Zmienne są uint8_t
    Proszę o pomoc.
    Dziękuję i pozdrawiam
    Janusz

    0
  • #5 10 Kwi 2017 21:36
    alluser
    Poziom 10  

    Witam,
    dziękuję za odpowiedź. To nie będzie tak jak pisze kolega -Szypek2- Ponieważ licznik ma zaczynać od 00 taki punkt startowy. Więc if a==00 to a =99 daje że nie ma 00 tylko wskakuje na 99.
    Proszę o pomoc.
    Pozdrawiam,
    Janusz

    0
  • Pomocny post
    #6 11 Kwi 2017 08:56
    szypek2
    Poziom 11  

    if(Przycisk_od_zmniejszacza_nacisniety){
    if(a==00) then a=99 else a--;
    }

    0
  • #7 12 Kwi 2017 10:40
    alluser
    Poziom 10  

    Witam, dziękuję za odpowiedź. Chodź wpadłem na to rozwiązanie jeszcze przed przeczytaniem postu.
    Zgadza się. Dodajemy warunek if(a==00) && (klawisz -) a =99;
    Dziękuję wszystkim za pomoc. Pozdrawiam

    0