|
|
View previous topic :: View next topic |
Author |
Message |
salgulsen
Joined: 16 Sep 2009 Posts: 21
|
Adding new characters to graphics.c |
Posted: Wed Feb 10, 2010 7:17 am |
|
|
Hi,
I want to add a custom/new character to graphics.c file. How can i do that?
I've added a new line to the second array and made it one line bigger:
const int8 FONT2[45][5]
the character is :
0x08, 0x14, 0x2A, 0x14, 0x22, // «
But i couldnt find out where does this comparison occur. How does this "for" loop compares the array of chars with the character entered? :
Code: |
#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
[b]
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
[/b]
// 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
}
}
}
}
}
}
} |
Everything works fine except the new character.
And also how do i add a custom character of 5x7 to the graphics.c file?
Thanks for your help... |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Feb 10, 2010 5:26 pm |
|
|
The text57 code compares the input string characters to the tilde '~'
character. The tilde is the last character in the FONT2 array in the
graphics.c file. The ASCII hex value for the tilde character is 0x7E.
I've marked in bold the code that does the test for the tilde character:
Quote: |
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 |
You have added one new character to the end of the FONT2 array.
Therefore, its code will be 0x7F. To use the new character, you need
to modify that line so it tests for the new maximum character in the
array, as shown below. Use 0x7F instead of '~' (0x7E):
Quote: |
else if(*textptr <= 0x7F)
|
|
|
|
salgulsen
Joined: 16 Sep 2009 Posts: 21
|
|
Posted: Thu Feb 11, 2010 7:47 am |
|
|
Ok! It worked like a charm! I've also modified the main program to make this work :
char message1[20];
switch (menustat){
case 0: message1="Sy=20cc ";
message1[13]=0x7F; //to call the custom character
Thank you for your help PCM Programmer... |
|
|
|
|
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
|