MEGA16 + CodeVision + LCD + dlaczego ?

Nov 21, 2004 4 Replies

Hi,



amator jestem, laik , lamer i beginner



mam AVR MEGA16 na STK500 (Atmelowski Board) z oscyl. 4MHz do tego LCD 16x1 firmy LUMEX i program w CodeVisionAVR



#include <mega16.h>



#asm .equ __lcd_port=0x18 ;PORTB #endasm #include <lcd.h>



void time(int k) { int i,n; for(i=0;i<250;i++) for(n=0;n<k;n++) ; }



void main(void) {



....tu byly inicjalizacje itd......



lcd_init(16); lcd_putsf("LCD Poczatek");



while (1) {



// jak nacisne przelacznik to na LCD ma sie cos dziac



if(PIND == ~0x01) lcd_clear(); if(PIND == ~0x02) lcd_putsf("Z"); if(PIND == ~0x04) lcd_putsf("1234567890"); if(PIND == ~0x08) { lcd_clear(); lcd_gotoxy(3,0); lcd_putsf("ABCDEFGHIJK"); } if(PIND == ~0x10) { lcd_clear(); lcd_putsf("M"); time(20); lcd_clear(); lcd_putsf("Ma"); time(20); lcd_clear(); lcd_putsf("Mag"); time(20); lcd_clear(); lcd_putsf("Magd"); time(20); lcd_clear(); lcd_putsf("Magda"); time(20); lcd_clear(); lcd_putsf("Magdal"); time(20); lcd_clear(); lcd_putsf("Magdale"); time(20); lcd_clear(); lcd_putsf("Magdalen"); time(20); lcd_clear(); lcd_putsf("Magdalena"); time(20); lcd_clear(); lcd_putsf("Magdalena "); time(20); } if(PIND == ~0x20) { lcd_putchar('M'); time(200); lcd_putchar('a'); time(200); lcd_putchar('g'); time(200); lcd_putchar('d'); time(200); lcd_putchar('a'); time(200); lcd_putchar('l'); time(200); lcd_putchar('e'); time(200); lcd_putchar('n'); time(200); lcd_putchar('a'); time(200); lcd_putchar(' '); time(200); } time(222); }; }



przy starcie wyswietla tylko 8 znakow -> To zabaw



wiec naciskam sobie przelaczniki na plytce i ..... jakos moj LCD ma problem z wyswietlaniem 8-mego i dalszych znakow



kiedy ciagle naciskam drugi guzik ten od lcd_putsf("Z"); literki z szybko wypisuja sie az do 8 miejsca potem pare sekund przerwy i mam z-ki do konca



wypisywanie Magdalena na oba sposoby konczy sie na Magdalen



wiec ludzie pomozcie prosze bo mnie zaraz cos trafi i moja przygoda z uC skonczy sie szybko



pozdrawiam



Witam. Jak pamietam (a pamiec mam bardzo kiepska) przyczyna moze byc taka, ze kontroler wyswietlacza widzi znaki powyzej 9-tego tak jakby byly w nowym wierszu. I chyba tak wlasnie jest w wyswietlaczach 1x16. Mowie chyba, bo od wielu lat takim sie nie bawilem

peters

True, mam taki sam, znaki od 9-go do 16-go maj± takie adresy jakby nale¿a³y do drugiej linii.

Ostry snipped-for-privacy@pf.pl.bezzzspamu> napisał(a): ..

Witam. One należą do 2-giej linii ;) LCD 16*1 to jest takie dziwne ustrojstwo . Składa się z 2 wierszy , a każdy wiersz posiada bufor , w którym mieści się 40 znaków z tym , że na wyświetlaczu widzimy po 8 znaków z każdej linii.W wyswietlaczu znajduje się rejestr indeksowy od wartości którego zależy ,które z 8 znaków z bufora widzimy na wyświetlaczu. przykład: bufor_Linia1:1234567890123456789012345678901234567890 bufor_Linia2:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN

index=0:na wyświetlaczu widzimy 12345678abcdefgh index=5:na wyświetlaczu widzimy 67890123fghijklm index=25:na wyświetlaczu widzimy 67890123zABCDEFG

Tak to mniejwięcej wygląda ;-)

Pozdrawiam Piotrek Sz.

PS Wielkość bufora zależy od typu LCD.Tu opisałem STC1C16DRG

dzieki jest tak jak piszecie

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required