Grzegorz Latocha
Guest
Wed Aug 16, 2006 6:37 am
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
Guest
Wed Aug 16, 2006 6:46 am
Użytkownik "Grzegorz Latocha" <glatocha@poczta.onet.pl> napisał w wiadomości
news:ebuefj$mjj$1@news.onet.pl...
Quote:
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
Guest
Wed Aug 16, 2006 7:30 am
Quote:
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
Guest
Wed Aug 16, 2006 7:39 am
Quote:
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
Guest
Wed Aug 16, 2006 8:57 pm
Sirtap napisał(a):
Quote:
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