  | 
	  | 
		 
	 
	
		| 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
  
		 |