Holas marco.
Bienvenido al C
Las funciones SET_TRIS_x están definidas e implementadas en el fichero 16f876.h.Todas las funciones y declaraciones que contiene dicho fichero podrán ser usadas por tí en tu programa ya que has incluído correctamente una invocación al mismo con "include <16f876.h>.
Además del contenido de tu programa principal,el contenido de este fichero,y también el contenido del fichero lcd.c al cual también invocas,serán compilados por completo.
En el código del fichero lcd.c,si buscas un poco,encontrarás alguna que otra LLAMADA a esa función SET_TRIS_D que te está provocando el error.Y dicho error te lo da porque esa función no está declarada en ningún lugar entre los ficheros que estás usando.En el momento de compilar,si el compilador se encuentra una llamada a una función o cualquier otra cosa (etiqueta,constante,etc...) que no esté declarada previamente tirará un error de identificador como el que te da a ti.
¿Y como es que no está declarada la dichosa función en el fichero 16f876.h? Pues este micro no tiene puerto D,por lo que no tendría sentido incluir en dicho fichero una rutina de configuración para el puerto D.
La solución más sencilla es que justo antes de la llamada a lcd.c incluyas esta línea:
#define use_portb_lcd TRUE
Con eso ya te debería compilar.
Si quieres entender un poco que es lo que cambia con lo que has añadido,abre el fichero lcd.c y echale un vistazo a las primeras líneas.
Resumiendo un poco...las rutinas del fichero lcd.c te dan la opción de hacer funcionar el lcd conectado al puerto B ó al puerto D.Por defecto,las rutinas funcionan para el puerto D.Añadiendo la línea que te dije,cambias al puerto B.
Un saludo