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][C] wyswietlenie/odswiezenie zmiennej na LCD

Toners 02 Lip 2012 19:19 2161 14
REKLAMA
  • #1 11064467
    Toners
    Poziom 11  
    Hej, podpiolem pot pod ADC i chce wyswietlic zmienna na ekrenie w pozycji 0.0, problem w tym ze gdy wyswietlam mniej znakow (jade w dol z wartosci 1024 do 0) to w miare zmniejszenia znakow pozostale znaki z prawej nie wymazuja sie z ekranu.
    Jak je nadpisac? Chcialbym wysylac za kazdym razem 4 znaki (nawet jak to jest wartosc 2) w to samo miejsce.

    Obecnie moj kod wyglada tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 11064509
    tmf
    VIP Zasłużony dla elektroda
    Możesz użyć sprintf i ciągów formatujących, albo "ręcznie" dopisywać spacje, np. funkcja strcat. Generalnie przejrzyj nagłówek string.h, jest tam wiele pomocnych funkcji operujących na łańcuchach.
    BTW, to return 0 jest zbędne, chociaż oczywiście niczemu nie szkodzi.
  • #3 11064529
    LordBlick
    VIP Zasłużony dla elektroda
    To nie możesz wysłać spacji (0x20) ? Ustalasz ile znaków ma tekst przed wypisaniem i uzupełniasz do maksymalnej długości spacjami.
  • #4 11064607
    Toners
    Poziom 11  
    Moglbym uzyc spacji gdybym wiedzial jak:) Funkcja utoa() konwertuje intiger na ASCII, ...moze glupie pytanie, ale jak dodac te spacje ?
  • REKLAMA
  • #5 11064620
    stanleysts
    Poziom 27  
    LCD_WriteText(' ');
    LCD_WriteText(utoa(0x20));
  • REKLAMA
  • #7 11064650
    Toners
    Poziom 11  
    Dzieki za przyklad i linka!
  • #8 11064673
    LordBlick
    VIP Zasłużony dla elektroda
    stanleysts napisał:
    LCD_WriteText(utoa(0x20));
    A to w jakim celu ? Wypisuje na LCD text "32" i tyle...
  • REKLAMA
  • #9 11064703
    stanleysts
    Poziom 27  
    No możesz albo zrobić z utoa z wartością 0x20, albo ze ' ', żeby dostać spację na LCD...

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #10 11064724
    Toners
    Poziom 11  
    stanleysts wywala mi to:/ :

    avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=8000000UL -MMD -MP -MF"adc_pot.d" -MT"adc_pot.d" -c -o"adc_pot.o" "../adc_pot.c"
    ../adc_pot.c: In function 'main':
    ../adc_pot.c:23: warning: implicit declaration of function 'strlen'
    ../adc_pot.c:23: warning: incompatible implicit declaration of built-in function 'strlen'
    ../adc_pot.c:23: error: lvalue required as decrement operand
    ../adc_pot.c:25: warning: passing argument 1 of 'LCD_WriteText' makes pointer from integer without a cast
    make: *** [adc_pot.o] Error 1
  • Pomocny post
    #11 11064782
    stanleysts
    Poziom 27  
    1.
    Cytat:
    warning: implicit declaration of function 'strlen'
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    2. jeśli LCD_WriteText() pobiera wskaźnik a nie wartość ASCII, to trzeba to zmienić dodając np:

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


    i wtedy

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


    a o błąd nie wiem jaki chodzi z tym lvalue, napewno masz mój kod?, zadekalrowałeś space_length jako zmienną?
    sprwadź to jeszcze raz, tu się rzuca:
    Cytat:
    error: lvalue required as decrement operand
    o to, że nie może dokonać dekrementacji operatorem -- tak jakby space_length nie była zmienną a np. stałą.
  • #12 11064859
    Toners
    Poziom 11  
    Teraz sie kompiluje, niestaty dalej nie dziala, a kod mam taki:

    
    	ADC_Init();
    	LCD_Init();  								
    	LCD_Clear();
    	do{
    		pot = getADC(0);
    	   	LCD_GoTo(0,0);
    		LCD_WriteText(utoa(pot,tmp,10));
    
    		space_length = TOTAL_LENGTH - strlen(tmp);
    
    		char* space;
    		*space = ' ';
    
    		         while(space_length--)
    		         {
    		         LCD_WriteText(' ');
    		         }
    
    	}
    	while(1);
    }
    
  • Pomocny post
    #13 11064863
    stanleysts
    Poziom 27  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    a nie
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    a poza tym nie wiem ile Twój wyświetlacz wyświetla znaków w linii, czy to są dwie linie etc, dlatego ten TOTAL_LENGTH musisz sam zdefiniować.
  • #14 11064901
    Toners
    Poziom 11  
    Noo:)) troche za pozno zakumalem ....teraz smiga, dzieki!
REKLAMA