Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
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.
Would help if you posted your schematic.
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
As you're using the internal oscillator, you can happily use OSC2 as a serial output, check my tutorials for tried and tested software serial routines.
Is it a hardware serial or software serial? Thanks.. i will look at it...