Skocz do zawartości

Przesuwanie tekstu na LCD C


Pomocna odpowiedź

Napisano

Witam,
Nie mogę przesunąć tekstu na ekranie. Cały czas zostaje on na początku. Zamieszczam kawałek kodu.

for(unsigned char a = 0; a < 10; ++a)
		{
		LCDxy(a,0);
		write_text("rOBOt");
		_delay_ms(500);
		lcd_clear();
		}

Czy są jakieś funkcje na przesuwanie tekstu, czy jakoś inaczej trzeba kombinować?

Pozdrawiam

To nie ma znaczenia.

Pre / post inkrementacja w pętli for da ten sam wynik.

Zobacz kod:

#include <stdlib.h>
#include <iostream>
int main(int argc, char** argv)
{

   for(int i = 0; i < 10; ++i)
       std::cout << i << "\n";
   for(int j = 0; j < 10; j++)
        std::cout << j << "\n";

   return (EXIT_SUCCESS);
}

Może jest ktoś na forum, co sobie kiedyś przesuwał tekst na LCD 2x16 😉 . Bo w Bascomie to prosta sprawa jest, tylko problem z C.

A może ktoś wie, dlaczego mój kod nie działał, kompilował się a mimo to tekst zostawał na początku.

Proszę o odpowiedzi,
pozdrawiam

Rav racja, bez znaczenia, teraz to sprawdziłem, sorki mój błąd...

Natomiast bartek1333, problem nie leży w tym programie którego listing wkleiłeś bo u mnie na wyświetlaczu wszystko działa, zmieniłem tylko nazwy funkcji bo korzystam z innej biblioteki obs. lcd.

Natomiast bartek1333, problem nie leży w tym programie którego listing wkleiłeś bo u mnie na wyświetlaczu wszystko działa, zmieniłem tylko nazwy funkcji bo korzystam z innej biblioteki obs. lcd.

To w czym może leżeć problem? Może dodać przed zmienną pętli: extern?

Może także leżeć w samej bibliotece obsługującej LCD. Jeśli masz do niej jakąś dokumentacje to może tam będzie rozwiązanie.

Przyszedł mi taki sposób na obejście, żeby po prostu dodawać spacje na początku

zamiast

LCDxy(a,0); 

na przykład

for(int b = 0; b < a; b++)
  write_text(" ");    

to jest brzydkie rozwiązanie, ale może zadziała...

  • Lubię! 1

Teraz nie mam jak sprawdzić bo już idę spać, ale może pojutrze sprawdzę.

To jest sposób, ale taki trochę brzydki 😋 . Może ktoś zobaczy jakie są błędy w tej bibliotece.

RaV, puki co trzymaj piwko za wytrwałość

😉

O wiele bardziej eleganckie rozwiązanie, które dostarcza sam sterownik wyświetlacza to przesuwanie " okna" wyświetlacza bez zmiany napisu zawartego w jego pamięci RAM- co więcej bardzo szybkie od strony programowej i proste. Wystarczy zgodnie z dokumentacją wysłać kod 0x18 (S/C=1,R/L=0) aby przesunąć okno w lewo, 0x1C (S/C=1,R/L=1) w prawo (strona 24-25/59 dokumentacji HD44780). Ponadto należy pamiętać, że to przewijanie trwa przez 40 pozycji bo tylko jest komórek pamięci( tak długi tekst można faktycznie wysłać do wyświetlacza bez utraty danych). Okno przesuwa się dla obydwu linii jednocześnie- i to jedyny niewielki minus tego rozwiązania. Dla ścisłości rozwiązanie działa, bo sam z niego korzystam:)

  • Pomogłeś! 1
To nie ma znaczenia.

Pre / post inkrementacja w pętli for da ten sam wynik.

To ma znaczenie, wydajnościowe.

Postinkrementacja jest wolniejsza 😉

w jaki niby sposób postinkrementacja ma być wolniejsza jeżeli w każdym wypadku musi zostać wykonana ta sama instrukcja asemblerowa "inc"?

To zależy od kompilatora, ale najczęściej przy post inkrementacji powstaje tymczasowy obiekt, który jest zwiększany i przypisywany do początkowego.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...