bartek1333 Napisano Sierpień 4, 2011 Udostępnij Napisano Sierpień 4, 2011 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 Link do komentarza Share on other sites More sharing options...
MasterFun Sierpień 6, 2011 Udostępnij Sierpień 6, 2011 Prawie wszystko ok z tym że zamiast ++a powinno być a++ 😉 Link do komentarza Share on other sites More sharing options...
RaV Sierpień 6, 2011 Udostępnij Sierpień 6, 2011 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); } Link do komentarza Share on other sites More sharing options...
bartek1333 Sierpień 6, 2011 Autor tematu Udostępnij Sierpień 6, 2011 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 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
MasterFun Sierpień 6, 2011 Udostępnij Sierpień 6, 2011 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. Link do komentarza Share on other sites More sharing options...
bartek1333 Sierpień 6, 2011 Autor tematu Udostępnij Sierpień 6, 2011 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? Link do komentarza Share on other sites More sharing options...
RaV Sierpień 6, 2011 Udostępnij Sierpień 6, 2011 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. Link do komentarza Share on other sites More sharing options...
bartek1333 Sierpień 6, 2011 Autor tematu Udostępnij Sierpień 6, 2011 Biblioteki wziąłem gdzieś z internetu i pozmieniałem na swoje potrzeby. W załączniku są pliki .h i .c do obsługi wyświetlacza. Obsługa LCD.rar Link do komentarza Share on other sites More sharing options...
RaV Sierpień 6, 2011 Udostępnij Sierpień 6, 2011 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... 1 Link do komentarza Share on other sites More sharing options...
bartek1333 Sierpień 6, 2011 Autor tematu Udostępnij Sierpień 6, 2011 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ść 😉 Link do komentarza Share on other sites More sharing options...
Grzesieq94 Sierpień 6, 2011 Udostępnij Sierpień 6, 2011 Jeśli zmieniłbyś biblioteki na takie jak w kursie C z tego forum (dokładnie z tego linku http://hobby.abxyz.bplaced.net/index.php?pid=4&aid=8 (poszukaj przy pierwszym programie wykorzystującym wyświetlacz LCD)) to mógłbyś zastosować funkcję LCD_LOCATE(x,y); która przynajmniej u mnie działa w podobnym zastosowaniu do twojego bardzo dobrze 😉 Link do komentarza Share on other sites More sharing options...
Barto Sierpień 13, 2011 Udostępnij Sierpień 13, 2011 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:) 1 Link do komentarza Share on other sites More sharing options...
remek Sierpień 20, 2011 Udostępnij Sierpień 20, 2011 To nie ma znaczenia. Pre / post inkrementacja w pętli for da ten sam wynik. To ma znaczenie, wydajnościowe. Postinkrementacja jest wolniejsza 😉 Link do komentarza Share on other sites More sharing options...
GAndaLF Sierpień 20, 2011 Udostępnij Sierpień 20, 2011 w jaki niby sposób postinkrementacja ma być wolniejsza jeżeli w każdym wypadku musi zostać wykonana ta sama instrukcja asemblerowa "inc"? Link do komentarza Share on other sites More sharing options...
remek Sierpień 21, 2011 Udostępnij Sierpień 21, 2011 To zależy od kompilatora, ale najczęściej przy post inkrementacji powstaje tymczasowy obiekt, który jest zwiększany i przypisywany do początkowego. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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ę »