I use a graphical display on my '12' project. It's not hard to do, but you have to keep organized.
I put my character set in flash in a 'permanent' area, and then defined the starting point. One thing you'll have to decide right up front is your character set layout. Do you want to do it by 'scan lines'? That is, top to bottom as it appears on the display where you send each horizontal line to the display. Or do you want to do it as 'left to right', sending vertical lines. Each way has it's advantages and disadvantages.
Anyway, keep a 'dot position' in memory. Every time you write a character, kick the 'dot position' by the character width, which is easy if you are fixed widths and not proportional. Use that 'dot position' as your 'cursor'. (This can get hairy if you use a 'segmented' display that works by zones and characters cross boundaries.)
The individual character routine should be concerned with JUST one character. Use the ASCII code as your table lookup offset then just place the data on the LCD. If you have a segmented display, then you're going to have to make sure the individual 'write column' or 'write row' does the increment and handles zone writes.
It's not hard work, just a lot of simple things to keep track of.
One thing... Early on, make sure you have an 'xor' with an external byte built into the datawrite to the display. You may never need it, but later on if you want to do highlighting or reverse video, it's nice to just set a byte to do it. You could even have TWO xors built in. One that resets every character, and one that resets every 'line'. That will make future 'pretty work' really easy to implement.
Stuff like doublesize characters is not as easy to plan for up-front, but don't forget that you may want stuff like that as well in the future.
Mike