Bienvenido al foro!!
El display LCD necesita un timing especial para recibir la comunicacion (especificada por cada fabricante en su hoja de datos), por lo cual sugiero que te hagas con la hoja de datos correspondiente, antes de seguir...
La libreria LCD.c original tiene el problema de realizar las pausas necesarias para el timing en el envio de datos usando la sentencia Delay_cicles() (o algo asi se llama), que toma una pausa de N ciclos de reloj que uses en la sentencia.
Eso anda bien hasta que cambias el cristal por uno de mas velocidad, por ejemplo la libreria original segun los que entienden esta hecha para un cristal de 4 MHz, cuando lo cambias por uno de 16 MHz este tiempo de pausa baja a 1/4, dejando de respetar el timing del fabricante...
Como recomendacion te dire que reemplazes todos los Delay_cicles() por Delay_us(), respetando los valores originales de las pausas, esto hara que la libreria se compile bien si declaras correctamente el cristal que estas utilizando.
Como colorario a este comentario ahora si te daras cuenta que el hecho de declarar el cristal correcto tiene que ver con el uso de las pausas, comunicaciones seriales y otras yerbas...
Hace poco deje sin darme cuenta un cristal de 4 MHz y declare uno de 3.6864 MHz, la transmicion serial enviava hasta 68 caracteres sin perder ninguno, pero si escribia 69 ya no funcionaba, me volvio loco encontrar el defecto, pero estas cosas nos pasan a todos, para eso estamos en este foro!!
