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

[AVR] [Język C] "Konwersja" kodu ASCII na znak

zbysiusp 20 Cze 2011 09:54 6819 14
REKLAMA
  • #1 9631848
    zbysiusp
    Poziom 13  
    Witam Forumowiczów!
    Bardzo proszę o pomoc. Z terminala RealTerm wysyłam znak (Send ASCII) poprzez UART. Po odebraniu chcę go wyświetlić na LCD też w postaci znaku, a nie liczby dziesiętnej. Szukałem na Forum, ale przedstawiane sposoby u mnie nie działają albo nie potrafię ich zaimplementować (zwłaszcza itoa).
    FRAGMENT KODU PROGRAMU (na podstawie: Mirosław Kardaś):
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jak zamienić "i" na znak ASCII i wyświetlić go na LCD?
    odebrane: 65 -> A -> LCD

    Pozdrawiam
    zbysiusp
  • REKLAMA
  • Pomocny post
    #2 9631873
    xamrex
    Poziom 28  
    zbysiusp napisał:
    Jak zamienić "i" na znak ASCII i wyświetlić go na LCD?

    Funkcja iota,
    Odwrotna funkcja to atoi
  • REKLAMA
  • #3 9631903
    zbysiusp
    Poziom 13  
    Jak to zaimplementować?
    KOD NIE DZIAŁA:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Wyświetla się 1115 niezależnie co wyślę przez UART i pętla się blokuje.
  • Pomocny post
    #4 9631912
    xamrex
    Poziom 28  
    Źle używasz funckji która wyświetla "coś" na wyświetlaczu.
    Jeśli chcesz wyświetlić znak, to musisz użyć lcd_str();
    a nie lcd_int();
    lcd_int jak sama nazwa wskazuje wyświetla int'y,a lcd_str stringi.
  • REKLAMA
  • #5 9632012
    zbysiusp
    Poziom 13  
    Napisz proszę jak poprawić mój kod. Sprawa lcd_str() jasna jak słońce.
  • #7 9632179
    zbysiusp
    Poziom 13  
    Tak, ale chodzi mi o całą funkcję atoi. Nic nie chce zwócić.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodano po 38 [minuty]:

    Niestety funkcja "atoi" konwertuje podany łańcuch znaków na liczbę typu int, a nie o to chodzi.
  • #8 9632335
    nsvinc
    Poziom 35  
    Ten kod przecież nie ma sensu... Odbierasz JEDEN znak z UARTa, do atoi podajesz ten ZNAK, wiec jakiego efektu się spodziewasz? Po co zamieniać w jakikolwiek sposób znak z UARTa, skoro jest to już gotowa, 8bitowa liczba któa może mieć wartości 0..255? Wyswietlaj "dec" bezposrednio funkcją lcd_int
  • REKLAMA
  • #9 9632350
    zbysiusp
    Poziom 13  
    Chciałbym aby zamiast np. "65" na wyświetlaczu LCD pojawiło się "A".
  • #10 9632352
    xamrex
    Poziom 28  
    Mnie się wydaje, że jest to trochę bardziej skomplikowane.

    Ja rozumiem, to tak odbiera on int=65
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Teraz jeśli wywoła funkcję
    lcd_int(i); to po prostu wyświetli mu się na wyświetlaczu liczba 65, zamiast litery A

    Musiałby zrobić coś takiego:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Jednakże taki zapis wywołuje warnigna.
  • #11 9632354
    zbysiusp
    Poziom 13  
    Właśnie tak, a chciałbym zobaczyć A!
  • Pomocny post
    #12 9632360
    xamrex
    Poziom 28  
    Lol, wystarczyło popatrzeć na funkcję od pana Mirka
    Przeiceiż jest taka
    lcd_char();

    Musi działać :)
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #13 9632384
    zbysiusp
    Poziom 13  
    Bardzo dziękuję Xamrex! O to chodziło.
    Pozdrawiam
    zbysiusp

    Dodano po 1 [godziny] 59 [minuty]:

    Mam jeszcze jedno pytanie. W jaki sposób można zrealizować odbiór ciągu znaków tworząc funkcję USART_Receive_string i wyświetlić go na LCD? Wiem, że należy łańcuch załadować do tablicy, a następnie go odczytać. Ale jak to oprogramować?
  • #14 9632983
    xamrex
    Poziom 28  
    W książce jest to opisane.
    Bufor cykliczny.
  • #15 9633106
    zbysiusp
    Poziom 13  
    Ok. Dziękuję.
REKLAMA