PIC and LCD Conflict on PORTC
Here can make the upper 4 bits as input and the lower 4 bits output, simply by configuring the TRISSC register.

The code is 

                      TRISC = 0xF0;


now you just send your data to the port, and only the output pins will be get changed.

You can use,

                       PORTC = data;


Now only the Lower nibble will be send to the LCD.

Writing

                        PORTC = data&gt;&gt;4;


Will send only the Upper nibble to the LCD.

Now to read the switches,

use

                        data = PORTC&gt;&gt;4;


now you will get the upper nibble of the PORTC to the lower nibble of data

otherwise you can use like this,

if(RC4) doThis(1);
else if(RC4) doThis(2);
else if(RC4) doThis(3);
else if(RC4) doThis(4);