LCD 8*2 - problem z inicjalizacja?

Mar 11, 2005 2 Replies

Witam szanownych grupowiczow. Mam Wyswietlacz LCD o oznaczeniu WC0802C. Nie potrafie sobie poradzic z jego inicjalizacjia napisana w C (w oparciu o inicjalizacje z EP) Caly czas swieci sie 8 znakow w gornej lini. Sa to czarne kwadraciki. Myslalem ze to kontrasta, lecz niestety nie. Dlaczego dolna linia nie daje znaku zycia? Ponizej zalaczam kod w C. Prosze pomozcie poczatkujacemu.



Z gory dzieki MB P.s. Kolejna nocka nad wyswietlaczem. Na marginesie troszeczeke jest po "chinsku " podlaczony wyswietlacz, wiec roznia sie znaki inicjalizujace, typowo 3 i 2.


#include <reg52.h>



#define Port P0 //opis podlaczenia LCD // P0.6 - d7 1 0 // P0.5 - d6 1 0 // P0.4 - d5 1 1 // P0.3 - d4 1 0 // P0.2 - E 0 1 // P0.1 - RW 0 1 // P0.0 - RS 0 1



sbit LcdEn = P0^2 ; sbit LcdRs = P0^0 ; sbit LcdRw = P0^1 ;


//****************************************** void Delay (unsigned int k) { unsigned int i,j; for (j=0;j<k;j++) for (i=0;i<=592;i++); } //****************************************** void WriteByteToLcd(char X) { unsigned char Bufor; Bufor = X; LcdEn = 1; Bufor &= 0xF0; //starsza czesc Bufor>>=1; Port &= 0x07; //zerwoanie magistrali wyswietlacza Port = Port | Bufor; LcdEn = 0; Delay(1);



LcdEn=1; Bufor = X&0x0F; //mlodsza czesc Bufor<<=3; Port &= 0x07; //zerwoanie magistrali wyswietlacza Port = Port | Bufor; LcdEn=0; Delay(1); } //****************************************** void WriteToLcdCtrlRegister(char X) { LcdRs = LcdRw = 0; // ustawienie sygnalów sterujacych WriteByteToLcd(X); } //******************************************



void LcdInit (void) { char i; LcdRs=0; LcdRw=0; for (i=0; i<3; i++) { LcdEn = 1; Port &=0x07; //zerowanie magistrali danych wyswoetlacza Port = Port | 0x30; //wpis na magistrale danych 2 LcdEn = 0; Delay(5); } LcdEn = 1; // wpisanie wartosci 2 do rejestru kontrolnego Port &=0x07; //zerowanie magistrali Port &= 0x10; // tylko "górne" 4 bity LcdEn = 0; Delay(1);



WriteToLcdCtrlRegister(0x28); // interfejs 4 bity,znaki 5x7 WriteToLcdCtrlRegister(0x08); // wylaczenie LCD WriteToLcdCtrlRegister(0x01); // kasowanie ekranu, powrót do pozycji home WriteToLcdCtrlRegister(0x07); // przesuwanie kursora z inkrementacja WriteToLcdCtrlRegister(0x0C); // zalaczenie wyswietlacza



}


void LcdClrScr(void) { WriteToLcdCtrlRegister(0x01); }



void main () { LcdInit; LcdClrScr; while(1); }



U¿ytkownik "Marcin Bia³as" snipped-for-privacy@friko4.onet.pl> napisa³ w wiadomo¶ci news:d0ta8l$4uc$ snipped-for-privacy@news.onet.pl

formatting link
?selm=3cd5a92c%40news.home.net.pl??

Mnie sie jakos glupio wydaje ze najpierw powinienes ustawic odpowiedni stan liniach danych, RS, RW, a dopiero potem zrobic maly impuls na Enable ..

J.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required