mspgcc problem z napisem jako parametr funkcji
Grzegorz Latocha - 16-08-2006 08:45
mspgcc problem z napisem jako parametr funkcji 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));
}
}
Miller Artur - 16-08-2006 08:45
Użytkownik "Grzegorz Latocha" <glatocha@poczta.onet.pl> napisał w wiadomości
news:ebuefj$mjj$1@news.onet.pl...
> 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));
> }
> }
a zrob tak
while (*co)
{
SEND_CHAR(*co);
co++;
}
SOA#1
Sirtap - 16-08-2006 09:45
>> Chcę po prostu funkcję, która mi wyrzuci na LCD napis.
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.
Sirtap - 16-08-2006 09:45
> 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++);
> }
> }
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
AK - 16-08-2006 23:45
Sirtap napisał(a):
>
> 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++);
> }
> }
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
zanotowane.pldoc.pisz.plpdf.pisz.plkonstruktor.keep.pl