Skocz do zawartości

Nieposłuszny LCD [STM]


ncnk

Pomocna odpowiedź

Witam, mam problem z oprogramowaniem LCD 2x16. Połączenia są na pewno dobre, ponieważ w pewnym momencie udało mi się coś na nim wyświetlić. Wszystko zbudowane i (niby) zaprogramowane zgodnie z artykułem z Edw. Kontrast ustawiony dobrze.

Tak to wyglądało:

A to jest kod programu:

#include "stm8s.h"
#include "stm8s_gpio.h"

WyslijDane(u8 rs, u8 szyna)
{
u8 a;
GPIO_DeInit(GPIOE);
GPIO_DeInit(GPIOB);
GPIO_Init(GPIOE, GPIO_PIN_ALL, GPIO_MODE_OUT_PP_LOW_FAST);
       GPIO_Init(GPIOB, GPIO_PIN_ALL, GPIO_MODE_OUT_PP_LOW_FAST);

GPIO_WriteLow(GPIOE, GPIO_PIN_2);    // E niski
if(rs == 1)
{
	GPIO_WriteHigh(GPIOE, GPIO_PIN_0);  // RS wysoki
}
else if (rs == 0)
{
	GPIO_WriteLow(GPIOE, GPIO_PIN_0);  // RS niski
}
GPIO_WriteLow(GPIOE, GPIO_PIN_1);    // R/W niski
GPIO_WriteHigh(GPIOE, GPIO_PIN_2);   // E wysoki
GPIO_Write(GPIOB, szyna);                  // ustawienie PD7..PD0
GPIO_WriteLow(GPIOE, GPIO_PIN_2);   // E niski
for(a=0;a<=100;a++);  //petla opozniajaca
}

void main(void)
{

WyslijDane(0,0x20);                // instrukcja wstepna
WyslijDane(0,0b00001110);     // wlaczenie wyswietlacza i zapalenie kursora
	WyslijDane(0,0b00000110);     // tryb inkrementacji adresu
WyslijDane(1,0b01000100);     // literka 'D'
WyslijDane(0,0b00000010);     // powrót kursora na pozycję początkową
 for (;;){}
}

Po tych wszystkich operacjach wyświetlacz pozostaje czysty... I co tu jest źle? Z góry dzięki za odpowiedź.

EDIT: Dzięki Treker :]

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

Nie mam żadnych bibliotek.. To jest cały program. Te wszystkie funkcje służą do ustawiania poszczególnych pinów w stan wysoki (GPIO_WriteHigh), niski (GPIO_WriteLow, bądź ustawiania załogo portu (GPIO_Write). Jeśli nie znaleźliście błędu w tym kodzie, będę szukał gdzie indziej. 🙂

Link do komentarza
Share on other sites

Hm, jeśli raz udało Ci się coś wyświetlić, to znaczy że kolejność jest dobra.

Po pierwsze - spróbuj zwiększyć delay'a, i dodać delay'a między KAŻDE dwie instrukcje, może wyświetlacz nie nadąża. W znalezionej przeze mnie w internecie bibliotece od LCD, co prawda na AVR, ale większego znaczenia to nie ma, delay wynosi 1ms.

Nie masz gotowej biblioteki pod LCD do Twojego procesora?

Edit. Taka głupota - wywal ostatnią linię, powrót kursora. Może nie widzisz wyswietlanego znaku po prostu : )

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.