Como escribir la CGRAM es indiferente el lenguaje que uses. Ya que lo que importa es lo que le envias al LCD.
Si tu pregunta es : ¿Que funcion debo usar ?
Eso no te lo va a contestar nadie, por que no sabemos que "librerias" estas usando para manejar el LCD.
Te lo pregunte, pero no lo respondiste. Y aun asi si supiera la libreria deberia tener el codigo de la misma para saber que hace y decirte que usar. Ya que hay librerias de sobra por internet y podrias haber tomado cualquiera, o puede que venga con C18 pero aun asi no se las funciones que posee,etc.
Como escribir en la CGRAM ? es facil. Voy a suponer 2 cosas, la libreria es TUYA y de driver un HD44780
Mandas una instruccion (RS=0), que es el SET addres CGRAM, vamso a escribir por lo tanto R/W =0 tambien, la instruccion es 01aa aaaa, donde "a" es la direccion. Comenzamos en 0x00, por ende debes enviar un 0x40.
Luego de eso vas a escribir en la CGRAM, pero esta ves son datos, asi que RS = 1, el dato es de 8 bits a enviar, aunque solo se cargue una fila ( 5 bits ), recorda que cada caracter es de 5*7.
Cuando cargas el valor, automaticamente la direccion se incrementa. asi que envias uno detras de otro, ¿que enviar? este es un ejemplo de una flecha:
0 0 0 1 0 = 0x02 , 1 es el pixel en negro
0 0 1 1 0 = 0x06
0 1 1 1 0 = 0x0E
1 1 1 1 0
0 1 1 1 0
0 0 1 1 0
0 0 0 1 0
0 0 0 0 0
Son 7 datos a enviar por caracter, si es que es 5*7 obviamente.
Ya con eso grabaste tu CGRAM, luego para mostrarlo en el LCD haces lo mismo que haces siempre, seleccionas donde queres que comienze a escribir pero en ves de enviar una "a" o el simbolo por ejemplo, pedis por el valor hexadecimal "\x00" ( este seria el primer caracter de la CGRAM, \x01 el siguiente, etc), Solo tenes para almacenar 8 caracteres en la CGRAM si es de 5*7.
Si estas usando una libreria normalmente tienen algunas funciones como "enviar_instruccion" o "enviar_datos" y podrias usar eso, eso te va a llevar a leerte las librerias.