CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

GLCD + TEXT ROUTINE

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Guest








GLCD + TEXT ROUTINE
PostPosted: Thu Aug 17, 2006 9:14 am     Reply with quote

Hi forum.

What’s the best way to send text to graphic lcd? If I could do a matrix and simple read the correspondent line to a specific character would be great. Anybody have any idea?

Thanks.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Aug 17, 2006 1:43 pm     Reply with quote

Quote:
What’s the best way to send text to a graphic lcd ?

Look at the glcd_text57() function in these two CCS driver files:
c:\program files\picc\drivers\glcd.c
c:\program files\picc\drivers\graphics.c
manoel_filho
Guest







PostPosted: Fri Aug 18, 2006 10:11 am     Reply with quote

Ok, I already know these files, the problem is that its a little bit confuse to me. In fact I did a routine very simple that works fine, but i have to send byte by byte to each character I want, and its becomes very big of course. I just want to understand how I can make a matrix and pick the five bytes of a specific line, and send it to my routine. I will reduce the memory space a lot, because there are several characters that I didn't use.

Like this:

const BYTE TEXT [n][m] =
{0x00, 0x00, 0x00, 0x00, 0x00, // SPACE
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x04, 0x02, 0x7F, 0x00, 0x00, // 1
0x42, 0x61, 0x51, 0x49, 0x46, // 2
0x22, 0x41, 0x49, 0x49, 0x36, // 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x3E, 0x49, 0x49, 0x49, 0x32, // 6
0x01, 0x01, 0x71, 0x09, 0x07, // 7
0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x26, 0x49, 0x49, 0x49, 0x3E, // 9
0x00, 0x36, 0x36, 0x00, 0x00, // :
0x7E, 0x09, 0x09, 0x09, 0x7E, // A
0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x7F, 0x41, 0x41, 0x41, 0x3E, // D
0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x7F, 0x09, 0x09, 0x09, 0x01, // F
AND SO ON……

So I address this matrix and pick for example the letter “A” and send the five bits to my routine, that’s all.

In these examples I couldn’t understand the function of the matrix, because it seams to me that at the end of routine it sends the data do each pixel of the display, I think it’s become much slow and much difficult to “guess” every address of the every start point of the text, and my application use a lot of fast transitions on the numbers.

Thanks.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Fri Aug 18, 2006 1:40 pm     Reply with quote

You can have a shorter font table which just has a subset of the
characters that CCS has in the example file. You can then subtract
the proper offset from the ASCII character, before using it as an index
into the font array. Also, you can do some tests on the ASCII character
value, to see which font array is the proper one to use.

If you look at the code at the start of the glcd_text57() function, you
can see that CCS does this already. For example, CCS doesn't have
font data for any of the character values that are less than an ASCII
space (these are called "control characters"). So CCS subtracts the
offset for a space (' ' or 0x20) from the index. Suppose that you
want to display a '$' character. Its ASCII value is 0x24. But the
font array only starts at the ASCII space (0x20). So you can't use
0x24 as an index into the array. You would get the wrong font bytes.
So you need to adjust the index by subtracting 0x20 from it. This
give a value of 4, and if you look at the font table in GLCD.C, you will
see that for an index of 4, you will get the bytes to make a '$' character.

Also, there is a limitation in the CCS compiler for the size of a constant
array. For this reason, the example file splits the font data into two
arrays. Then code must be added so check the character index and
make sure that the proper array is used to get the font data. You can
see how CCS does this in their code below:
Code:
if(textptr[i] < 'S') // Checks if the letter is in the first text array
   memcpy(pixelData, TEXT[textptr[i]-' '], 5);
else if(textptr[i] <= '~') // Check if the letter is in the second array
   memcpy(pixelData, TEXT2[textptr[i]-'S'], 5);
else
   memcpy(pixelData, TEXT[0], 5);   // Default to space
manoel_filho
Guest







PostPosted: Tue Aug 22, 2006 9:24 am     Reply with quote

Ok, I see. Now I want to do some thing with my variables, like a clock. So I have my variables, like seconds for example. How can I show this variables on LCD?

Thanks.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Aug 22, 2006 3:51 pm     Reply with quote

Look in this CCS example file:
c:\program files\picc\examples\ex_glcd.c

It has three examples of calling the glcd_text57() function. These are
near the start of the file. Note that a pointer to a RAM array must
be passed to the glcd_text57() function. A string can be assigned to
the array at compile time (in the array declaration statement) or it
can be put into the array at run-time with sprintf() or strcpy().
The EX_GLCD.C file has examples of both of these methods.
manoel_filho
Guest







PostPosted: Wed Aug 23, 2006 5:31 am     Reply with quote

OK,

void displayVoltage(int adc) {
char voltage[9]; //is this necessary?
sprintf(voltage, "%f", (float)adc * .01960784);
voltage[4] = '\0'; //is this necessary?
}

This 0.1960784 What does it means ?

I think I will do something like:

int seconds=0;

void clock()
{
.
.
.//here I send some comands to positioning LCD
.
.
sprintf(seconds, "%2u");
}

is that correct?

Thanks.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Aug 23, 2006 12:22 pm     Reply with quote

No it's not correct.
You need to study the C language, with regard to arrays and strings.
You need to get a book or take a class on C.
manoel_filho
Guest







PostPosted: Thu Aug 24, 2006 5:03 am     Reply with quote

That’s correct, but I already made this, in fact I read 5 books and I didn’t understudy this part of C language. But thanks anyway, I will go back and use my old LCD 16 x 4, it’s more easy to me.

Later, when I fully understand this part of C I come back to use it.

Thank´s
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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