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

Menu na Atmega32 z kwarcem 14745600, LCD 4x20 i 5 przyciskami - zmienne nie działają

PLMartinPL 26 Gru 2015 20:19 1422 12
REKLAMA
  • #1 15271377
    PLMartinPL
    Poziom 8  
    Witam, działam na procesorze Atmega32 z kwarcem 14745600.
    Do tego podłączony wyświetlacz 4x20 (HD44780) i 5 przycisków.
    Lewy i dolny wypisują swoje nazwy, prawy wyświetla menu, górny wchodzi w ustawienia.
    Teraz, gdy górny zostanie naciśnięty, lewy i prawy przyjmują inne funkcje.
    Lewy wyświetla "menu" po lewej stronie, a prawy po prawej.
    Obecnie staram się rozwiązać ten problem na zmiennych, ale mało to daje.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #3 15286307
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #4 15287761
    dondu
    Moderator na urlopie...
    Po pierwsze od dzisiaj instrukcja GOTO dla Ciebie nie istnieje: http://mikrokontrolery.blogspot.com/2011/02/instrukcja-goto.html

    Kurs, o którym wspomniał Piotrus_999: http://mikrokontrolery.blogspot.com/2011/02/kurs-jezyka-c-spis-tresci.html

    Zaglądnij także do spisu treści na powyższej stronie.
  • #5 15288444
    PLMartinPL
    Poziom 8  
    Dzięki dondu, mam jeszcze takie pytanko:
    Czy dało by się to menu zrobić używając zmiennej?
    Kombinuję, że mam dwie pętle while z warunkami. W pierwszej ,,a==0'' a drugiej ,,a==1''.
    Lecz niczym lepszym to nie skutkuje :cry: .
  • #6 15288487
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #8 15291517
    jalex
    Poziom 2  
    Jak już ktoś powiedział nie należy używać "goto". Taki sposób programowania nie jest zalecany.
    Generalnie w takich programach rozdziela się funkcję odczytu klawiatury od funkcji będącej reakcją na stan klawiatury. Funkcja odczytu klawiatury zapisuje stan klawiszy w zmiennej (buforze). Następnie w funkcji (fragmencie programu) na podstawie tej zmiennej podejmowane są odpowiednie działania.
    Początkowo takie rozdzielenie funkcji programu wydaje się zbytnią komplikacją. Jednak bardzo szybko okazuje się, że ułatwia to rozwój oprogramowania oraz zmniejsza liczbę błędów w kodzie programu.
  • #9 15291675
    PLMartinPL
    Poziom 8  
    Ten kod ma błąd, niestety nie za bardzo wiem gdzie, ale gdy wejdzie w pętle a == 2, wtedy jeszcze wszystko dobrze działa. Lecz gdy się kliknie przycisk albo lewy, albo prawy wtedy czeka te dwie sekundy i całkowicie kasuje wyświetlacz i nie reaguje.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #10 15291841
    szczywronek
    Poziom 28  
    Pętla while(a == 2) jest poza pętlą nieskończoną (while(1)). Po opuszczeniu while(a==2) program się "kończy". Łatwo się pogubić w tym kodzie, ze względu na wielokrotne zagnieżdżenia ;)
  • #11 15292122
    PLMartinPL
    Poziom 8  
    szczywronek umieśiłem pętlę while(a == 2) w pętli while(1) i niestety nie pomogło.
    Analizuję jeszcze kod w poszukiwaniu błędów.

    Dodano po 5 [minuty]:

    Problem rozwiązałem. Przyczyną były komendy break;.
    Pytanko jeszcze takie małe. Jak zrobić, żeby tego napisu menu nie wyświetlało, gdy wyświetla inne wartości? Wiem, że przyczyną jest to, że to cały czas krąży w pętli nieskończonej, ale jak to zatrzymać? :D
  • REKLAMA
  • #13 15327507
    PLMartinPL
    Poziom 8  
    Dzięki RometFan;p teraz wszystko działa poprawnie.
REKLAMA