mspgcc problem z napisem jako parametr funkcji

Aug 16, 2006 4 Replies

Hej! Mam problem z przekazaniem do funkcji parametru w postaci tablicy znaków. Mam to zrobione ak niżej. Chcę po prostu funkcję, która mi wyrzuci na LCD napis. To poniżej kompiluje się z Warningami odnoście typów wskaźników i niby napisy wyświetla, ale cały program jakoś głupieje :( Książki mi niewiele pomogły, więc mam nadzieję, że grupa podpowie mi jak to zrobić.



Z góry dziękuję pozdrawiam



const unsigned char LCD_M_1[] = "1. POMIAR 2. USTAW SKALE3. USTAW JEDN."; ... void WYSW_MENU(unsigned int menu,unsigned char *co,unsigned int ile, unsigned int linia); ... WYSW_MENU(menu,LCD_M_1,14,0); ... void WYSW_MENU(unsigned int menu,unsigned char *co,unsigned int ile, unsigned int linia) { SEND_CMD(0x80+linia*0x40); for(i=(menu-1)*ile;i!=menu*ile;i++) //wyswietlenie napisu { SEND_CHAR(*(co+i)); } }


U¿ytkownik "Grzegorz Latocha" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:ebuefj$mjj$ snipped-for-privacy@news.onet.pl...

a zrob tak

while (*co) { SEND_CHAR(*co); co++; }

SOA#1

Tu masz moj± funkcjê. Reaguje poprawnie na znak '\n', czyli przej¶cie do drugiej linii w wy¶wietlaczy 2x16. W kodzie piszesz LCD_Text("napis\ninny napis"); lub LCD_Text(LCD_M_1);

void LCD_Text(const unsigned char* text) { int i; for(i=0; *text != 0; i++) { if (*text == '\n') { LCD_Ln();

*text++; } else LCD_Send(data, *text++); } }

U mnie dzia³a.

Ma³a poprawka. * przy *text++; jest nie potrzebny. Czyli:

void LCD_Text(const unsigned char* text) { int i; for(i=0; *text != 0; i++) { if (*text == '\n') { LCD_Ln(); text++; } else LCD_Send(data, *text++); } }

Pozdrawiam

Sirtap napisał(a):

Tu chyba lepiej petla while pasuje: void LCD_Text(const unsigned char* text) { while(*text) { if (*text == '\n') { LCD_Ln(); text++; } else LCD_Send(data, *text++); } }

Pozdr AK

A odnosnie do pytania z pierwszego postu, to warningi sa, poniewaz tekst jest definiowany jak 'const' natomiast funcja wymaga parametru bez atrybutu 'const', czyli powinno byc tak:

const unsigned char LCD_M_1[] = "1. POMIAR 2. USTAW SKALE3. USTAW JEDN."; ... void WYSW_MENU(unsigned int menu, const unsigned char *co,unsigned int ile, unsigned int linia); ... WYSW_MENU(menu,LCD_M_1,14,0); ... void WYSW_MENU(unsigned int menu,const unsigned char *co,unsigned int ile, unsigned int linia) { SEND_CMD(0x80+linia*0x40); for(i=(menu-1)*ile;i!=menu*ile;i++) //wyswietlenie napisu { SEND_CHAR(*(co+i)); } }

Pozdr AK

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required