Here is the code in C18 : lcd_counter.c
RA1: Read/Write
RA2: Enable
RA7: Register Select
RB0~7 was hooked up to DB0~7
Looking back at how much work I actually did, making the LCD work wasn't too bad. Most of the bugs that I ran into were really silly (like pins burning out).
I will put up a tutorial on my website on how to set the LCD up. Here is the link: LCD.