|
|
View previous topic :: View next topic |
Author |
Message |
ccmcca Guest
|
bad CHARACTER |
Posted: Thu Nov 04, 2004 3:53 pm |
|
|
Why apear extrange character at the end of the line???
Please help me...
#include <16F877.h>
#device *=16
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <HDM64GS12.c>
#include <graphics.c>
void main()
{
int i;
CHAR const my_string[]="hola amigos";
CHAR const my_string2[]="aca estoy";
CHAR const my_string3[]="todo lison";
CHAR const my_string4[]="entrar aqui";
char buffer[];
glcd_init(ON);
for (i=0;i<=20;i++)
buffer[i]=my_string[i];
glcd_text57(5, 1,buffer, 1, ON);
for (i=0;i<=20;i++)
buffer[i]=my_string2[i];
glcd_text57(5, 9,buffer, 1, ON);
for (i=0;i<=20;i++)
buffer[i]=my_string3[i];
glcd_text57(5, 17,buffer, 1, ON);
for (i=0;i<=20;i++)
buffer[i]=my_string4[i];
glcd_text57(5, 25,buffer, 1, ON);
#ifdef FAST_GLCD
glcd_update();
#else
delay_ms(100); // Reduces flicker by allowing pixels to be on
// much longer than off
} |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Thu Nov 04, 2004 4:15 pm |
|
|
You didn't declare the size of buffer[].
I guess the "glcd_text57()" function checks for a NULL. We don't know what the parameters are. |
|
|
Humberto
Joined: 08 Sep 2003 Posts: 1215 Location: Buenos Aires, La Reina del Plata
|
|
Posted: Fri Nov 05, 2004 10:33 am |
|
|
Thatīs because the display is showing you all the variables in the
boundaries of your stored string.
To display the string[]="hola amigos" you use
for (i=0;i<=20;i++)
where the string "pointer" has a range i<= 20
while your message is only 10 characters long.
Try putting a null at the end of your string and
break the for cycle when detected.
HTH
Humberto |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Fri Nov 05, 2004 10:38 am |
|
|
Quote: | CHAR const my_string[]="hola amigos"; |
This should put a NULL on the end of the string.
Quote: | Thatīs because the display is showing you all the variables in the
boundaries of your stored string.
|
He is indeed copying more than needed but hopefully the printing routine checks for the NULL as it should. Doesn't really matter if he copies more data so long as he is not overwriting other vars. |
|
|
Humberto
Joined: 08 Sep 2003 Posts: 1215 Location: Buenos Aires, La Reina del Plata
|
|
Posted: Fri Nov 05, 2004 11:45 am |
|
|
Mark,
I know that but he didnīt post the function definition for
glcd_text57(5, 1,buffer, 1, ON);
so we didnīt know for sure if he is looking for a NULL as end of char string recognition.
Humberto |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Fri Nov 05, 2004 12:34 pm |
|
|
Didn't I already say that?
Quote: | I guess the "glcd_text57()" function checks for a NULL. We don't know what the parameters are. |
Regardless, a NULL is in there from the declaration so there is no need to
Quote: | Try putting a null at the end of your string |
Quote: | break the for cycle when detected.
|
All this will do is save a little time doing the copying. It still does not address the problem at hand. Now if you said to use a counter in there and break on NULL and pass the length to the function, then I'd agree with you. I am pretty sure that the function checks for a NULL. If not, that is where the problem is. However, not declaring the size of buffer[] is a definite problem since he is copying data into it. Any variables adjacent to it will overwrite the data and cause him problems not to mention the copying into buffer[] will most likely overwrite other variables as well. |
|
|
Humberto
Joined: 08 Sep 2003 Posts: 1215 Location: Buenos Aires, La Reina del Plata
|
|
Posted: Fri Nov 05, 2004 12:56 pm |
|
|
Mark,
I know what the problem is and how to solve it. FYI it is not my inquiry,
it is a thread posted by ccmcca and I just put the spot on the subject
I think the problem is and I hope this were solved by ccmcca.
Quote: |
Now if you said to use a counter in there and break on NULL and pass the length to the function, then I'd agree with you.
|
Yes, I mean that. Sorry if the post wasn't clear enough.
Quote: |
I am pretty sure that the function checks for a NULL
|
Iīm not pretty sure for that.
Anyway I would like to listen to our common friend ccmcca
Humberto |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Fri Nov 05, 2004 1:06 pm |
|
|
Actually this is CCS driver file
Code: | /////////////////////////////////////////////////////////////////////////
// Purpose: Write text on a graphic LCD
// Inputs: (x,y) - The upper left coordinate of the first letter
// textptr - A pointer to an array of text to display
// size - The size of the text: 1 = 5x7, 2 = 10x14, ...
// color - ON or OFF
/////////////////////////////////////////////////////////////////////////
#ifdef LARGE_LCD
void glcd_text57(int16 x, int16 y, char* textptr, int8 size, int1 color)
#else
void glcd_text57(int8 x, int8 y, char* textptr, int8 size, int1 color)
#endif
{
int8 j, k, l, m; // Loop counters
int8 pixelData[5]; // Stores character data
for(; *textptr != '\0'; ++textptr, ++x)// Loop through the passed string
{
if(*textptr < 'S') // Checks if the letter is in the first font array
memcpy(pixelData, FONT[*textptr - ' '], 5);
else if(*textptr <= '~') // Check if the letter is in the second font array
memcpy(pixelData, FONT2[*textptr - 'S'], 5);
else
memcpy(pixelData, FONT[0], 5); // Default to space
// Handles newline and carriage returns
switch(*textptr)
{
case '\n':
y += 7*size + 1;
continue;
case '\r':
x = 0;
continue;
}
if(x+5*size >= GLCD_WIDTH) // Performs character wrapping
{
x = 0; // Set x at far left position
y += 7*size + 1; // Set y at next position down
}
for(j=0; j<5; ++j, x+=size) // Loop through character byte data
{
for(k=0; k < 7; ++k) // Loop through the vertical pixels
{
if(bit_test(pixelData[j], k)) // Check if the pixel should be set
{
for(l=0; l < size; ++l) // These two loops change the
{ // character's size
for(m=0; m < size; ++m)
{
glcd_pixel(x+m, y+k*size+l, color); // Draws the pixel
}
}
}
}
}
}
}
#endif
|
|
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|