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.

Atmega8 - Wyświetlanie na wyświetlaczu zmiennych programowych

jupiter132 12 Lut 2015 22:39 699 8
  • #1 12 Lut 2015 22:39
    jupiter132
    Poziom 11  

    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ś?

    0 8
  • #2 12 Lut 2015 22:43
    BlueDraco
    Specjalista - Mikrokontrolery

    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ą.

    0
  • Pomocny post
    #3 12 Lut 2015 22:49
    p.kaczmarek2
    Poziom 23  

    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ć.

    0
  • #4 12 Lut 2015 22:49
    jupiter132
    Poziom 11  

    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:)

    0
  • #5 12 Lut 2015 23:14
    BlueDraco
    Specjalista - Mikrokontrolery

    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.

    0
  • Pomocny post
    #6 13 Lut 2015 00:22
    373522
    Użytkownik usunął konto  
  • Pomocny post
    #7 13 Lut 2015 10:16
    BlueDraco
    Specjalista - Mikrokontrolery

    Kolega już użył itoa(), więc ma już cyfry w ASCII, a jeszcze coś kombinuje, ale nie chce pokazać, co naplątał.

    0
  • #8 13 Lut 2015 13:20
    jupiter132
    Poziom 11  

    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
    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: actionscript
    Zaloguj się, aby zobaczyć kod

    0
  • #9 13 Lut 2015 15:00
    BlueDraco
    Specjalista - Mikrokontrolery

    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

    0