В .h файловете се слагат декларациите на функциите. В .c файловете - дефинициите им.
void LCD_STROBE(void); // Tова е декларацията
А това дефиницията на LCD_STROBE():
void LCD_STROBE(void){
LCD_EN = 1;
asm("nop");
asm("nop");
LCD_EN = 0;
}
В твоя случай грешката идва от това че си декларирал:
static bit LCD_EN @ ((unsigned)&PORTB*8+6); // Enable
static bit LCD_RS @ ((unsigned)&PORTB*8+4); // Register select
static bit LCD_RW @ ((unsigned)&PORTB*8+5); // Register select
след като си написал:
#include "LCD.h"
Понеже в LCD.h неправилно си сложил дефинициите там не можеш да използваш LCD_EN, LCD_RS и LCD_RW. Които декларираш по-късно.
Въобще заформил си една малка боза.
Направи така:
Съдържание на LCD.h
Съдържание на LCD.c
След това където искаш да използваш функциите за LCD просто пишеш
#include "LCD.h"
Разбира се в началото на файла преди да си използвал още някоя от функциите.