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

Atmega8 - Wyświetlanie na wyświetlaczu zmiennych programowych

jupiter132 12 Lut 2015 22:39 1335 8
REKLAMA
  • #1 14433211
    jupiter132
    Poziom 11  
    Posty: 76
    Ocena: 1
    Witam drogich forumowiczów.

    Zwracam się do was z pytaniem na pewien problem, który można powiedzieć rozwiązałem ale jest on może przez swoją prostotę zbyt rozbudowany. Zaznaczę iż przeglądałem wiele tematów i odpowiedzi nie znalazłem.

    Otóż problemowo polega to na tym iż deklaruję zmienną w programie np int a. Potem dokonuję jakiś obliczeń na tej zmiennej a na koniec chcę ją wyświetlić na LCD hd44780. Moje rozwiązanie polega na zadeklarowaniu pomocniczej zmiennej w postaci tablicy char b[np.15] a następnie zastosowanie itoa(i, str, 10);. Następnie znów deklaruję trzecią zmienną int c oraz piszę c = b[i] gdzie i od 0 do 14. Wtedy uzyskuję w tej tablicy wartości ASCII. Jeżeli chodzi o wypisanie liczby na ekran należy wypisać 9 warunków if lub case w których sprawdzam czy uzyskana wartość ASCII odpowiada określonej liczbie przez co można wyznaczyć liczbę do wypisania.

    Wiem również iż są gotowe biblioteki których stosowania można się nauczyć ale chciałbym podejść do tego od zera co bardziej pozwoli mi to zrozumieć. Jestem na 90% pewien, że istnieje lepsze rozwiązanie tego problemu.
    Ktoś coś?
  • REKLAMA
  • #2 14433225
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    To, co masz w tablicy po wywołaniu itoa() - to są właśnie znaki ASCII. Nic już nie musisz z rym robić, tylko wypisać na wyświetlacz funkcją lcd_char() lub podobną.
  • REKLAMA
  • Pomocny post
    #3 14433240
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14783
    Pomógł: 659
    Ocena: 12920
    Możesz jeszcze użyć sprintf - np do wyświetlenia kilku zmiennych - ale tam możesz natrafić na znany w internecie problem, ze funkcja zamiast liczby zwraca "?". Z pomocą funkcji "Szukaj" znajdziesz jak go rozwiązać.
    Pomogłem? Kup mi kawę.
  • #4 14433241
    jupiter132
    Poziom 11  
    Posty: 76
    Ocena: 1
    BlueDraco napisał:
    To, co masz w tablicy po wywołaniu itoa() - to są właśnie znaki ASCII. Nic już nie musisz z rym robić, tylko wypisać na wyświetlacz funkcją lcd_char() lub podobną.


    Ale to wtedy muszę skorzystać z biblioteki odpowiedniej do tego. Chcę bez.

    p.kaczmarek2 napisał:
    Możesz jeszcze użyć sprintf - np do wyświetlenia kilku zmiennych - ale tam możesz natrafić na znany w internecie problem, ze funkcja zamiast liczby zwraca "?". Z pomocą funkcji "Szukaj" znajdziesz jak go rozwiązać.

    Chyba to rozwiązało mój problem. Jutro dokładnie to sprawdzę i się odezwę, na dziś starczy:)

    P.S Ewentualnym przykładem w tym temacie nie pogardzę, innym też może się przyda:)
  • #5 14433331
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    A jaka to biblioteka do LCD nie ma funkcji wyświetlania znaków ani napisów, ale za to ma funkcję wyświetlania liczb jednocyfrowych? Coś okrutnie pokręciłeś. itoa() i lcdstring() ew. lcdchar() w pętli - to wszystko, czego potrzebujesz.

    Pokaż kod.
  • REKLAMA
  • Pomocny post
    #6 14433497
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #7 14434033
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Kolega już użył itoa(), więc ma już cyfry w ASCII, a jeszcze coś kombinuje, ale nie chce pokazać, co naplątał.
  • #8 14434589
    jupiter132
    Poziom 11  
    Posty: 76
    Ocena: 1
    BlueDraco napisał:
    Kolega już użył itoa(), więc ma już cyfry w ASCII, a jeszcze coś kombinuje, ale nie chce pokazać, co naplątał.


    niveasoft napisał:
    Może kolega nie zna podstawowych zależności tabeli ASCII. Do każdej cyfry dodaj 48 i wyświetli się poprawnie ta o którą chodzi. 0 + 48 = 48 i właśnie 48 oznacza zero. Są też ścisłe zależności pomiędzy dużymi i małymi literami.


    Koledzy, przeczytajcie dokładnie o co mi chodzi. Jedyną słuszną uwagą było to że nie faktycznie itoa() daje odrazu liczbę w kodzie ASCII. Upragniony kod:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jak widzicie w ostatnim warunku if() sprawdzam czy mogę wydrukować czwórkę. Tzn czy czwórka to ta czwórka w kodzie ASCII. Natomiast żeby dysponować np. 9 zmiennymi potrzebuje 9 warunków do sprawdzania. Natomiast zaraz spojrze na sprintf()

    Edit:
    Shame on me, sorki chłopaki. Przecież moge zamiast binarnych wartości wstawiać dziesiętne. Dzięki za pomoc:)
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #9 14434842
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Parafrazując Twój kod wygląda mniej więcej tak:

    Jeśli a jest równe 48 to wyślij 48
    Jeśli a jest równe 49 to wyślij 49
    Jeśli a jest równe 50 to wyślij 50
    itd...

    A powinien wyglądać tak:

    Wyślij a

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik forum zadał pytanie dotyczące wyświetlania zmiennych programowych na wyświetlaczu LCD HD44780 przy użyciu mikrokontrolera Atmega8. Opisał swoje podejście, które polegało na konwersji zmiennej całkowitej na ASCII za pomocą funkcji itoa() oraz na tworzeniu tablicy pomocniczej. Odpowiedzi na jego pytanie sugerowały, że nie musi on tworzyć dodatkowych zmiennych, ponieważ itoa() już zwraca wartości ASCII, które można bezpośrednio wyświetlić za pomocą funkcji lcd_char(). Użytkownicy podkreślili również, że można użyć funkcji sprintf, ale z uwagą na potencjalne problemy. W końcu, autor potwierdził, że zrozumiał, iż itoa() dostarcza już odpowiednie dane do wyświetlenia, a jego kod wymagał jedynie uproszczenia.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA