logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Klawiatura 16-tkowa i string ATmega 16 pomocy z C

psine.pl 29 Kwi 2009 18:05 1278 2
REKLAMA
  • #1 6471229
    psine.pl

    Poziom 30  
    Witam.
    Piszę program do obsługi klawiatury 16 tkowej .
    Klawiatura działa mi ok.
    To znaczy wywołując funkcję get key otrzymuję zwrotkę w postaci int lub char ...
    i do tego momentu jest super .... ale chcę np wprowadzić wartość 50123 ... i tu kłopot bo nie wiem jak to zrealizować ...
    potrzebuję uzyskać wartość w postaci ciągu by wysłać na lcd i np wprowadzając drugą wartość wykonać proste działania matematyczne ...

    Proszę o pomoc z procedurką która z serii naciskanych przycisków zrobi ciąg (który z kolei można podstawić później np do atoi) .

    Wiem, że to pewnie banał (a przynajmniej tak mi się wydaje) ale już mi mózg dymi i żaden konkretny pomysł do głowy nie przychodzi....

    nie jestem ekspertem w c ... jakoś daję radę ale ten program mnie już załamuje .

    Dzięki za pomoc z góry !
  • REKLAMA
  • Pomocny post
    #2 6477874
    skynet_2
    Poziom 26  
    Jeżeli chodzi ci o to aby wpisując 5+0+1+2+3 mieć liczbę 50123, to można to zrealizować bardzo prosto.

    w pętli głównej dajesz coś takiego:
    tmp=get_key();//zakładam że 0 jest kiedy nic nie wciśnięte
    if(tmp>0)
    {
     liczba*=10;//jeżeli podstawa = 10
     liczba+=tmp;
    }

    zmienna liczba musi być przynajmniej 16[max=65.535] lub 32[max=4.294.967.295] bitowa
    Ale będzie problem jeżeli wciśniesz przycisk i będziesz trzymał, bo funkcja będzie dodawać kolejne cyfry, można to poprawić tak:
    previous_tmp=tmp;
    tmp=get_key();//zakładam że 0 jest kiedy nic nie wciśnięte
    if((tmp>0)&&(previous_tmp==0))
    {
     liczba*=10;//jeżeli podstawa = 10
     liczba+=tmp;
    }


    lub w funkcji get_key na końcu dać pętlę while która przerwie się jak puścisz przycisk:
    while(bit_is_clear(PINA, 5));
    _delay_ms(10);


    początkowo zmienne previous, tmp, liczba są równe zero

    Pozdrawiam i mam nadzieję że pomogłem
  • #3 6481425
    psine.pl

    Poziom 30  
    Witam.
    dziękuję za pomoc każdy z podanych przykładów działa.
    Pomysł prosty acz genialny ...

    Tutaj tak naprawdę widać moje braki w podstawach c ...
    też kombinowałem ze zmiennymi * ... ale nie wpadłem na += ...

    Pozdrawiam i dziękuję za pomoc.

    p.s.
    przykład wart pozostawienia jako otwarty bo szukałem po necie i zawsze było jak rozbić ciąg na pojedyńcze znaki ale nie było jak w drugą mańkę ...

    Pozdrawiam
    Marek
REKLAMA