I am using 4 bit modes LCD, 2 for RS and E, then 4 for the data buses....Most LCD's can be run in 4 bit mode, which would free up some of your used I/O lines, modifying the code for 4 bit vs 8 bit mode is not complex.
Sorry, actually I am trying to built this project from other author.The 16F88 has a hardware serial port on RB2 & RB5. RA2 can be internally tied to GND so that's a free I/O pin, same with RA6 (no need to tie it to GND) Moving S1 to port B allows use of the internal pullup and may also allow for interrupt on change (PORTB4..7)
Don't tie MCLR to GND but instead a 10K resistor to VDD (else this can cause problems if you enable MCLR & INTOSC for some programmers)
You could also use a spare I/O for R/W on the LCD (this will allow you to test the busy flag and run the LCD as fast as it can go)
ifdef __16F88 __config _CONFIG1,_BODEN_OFF&_WDT_OFF&_LVP_OFF&_MCLR_OFF&_PWRTE_ON&_INTRC_IO