Sspence from Instructables.com shows how to interface a character LCD using I2C and only two IO pins.
The typical parallel LCD used with an Arduino (16×2 or 20×4) has 16 pins. Only 6 I/O pins are required on the Arduino, but what if you could get that down to two I/O pins, and still have those pins available for other devices?
The I2C interface is on pins A4 and A5 of the Arduino. These are addressable, and are therefore shareable with other I2C devices that have different addresses. Now, you can buy I2C LCD’s, and you can even find I2C LCD’s with different addresses, but they are typically two line LCD’s, and the addresses are fixed. I’m going to show you how to build your own I2C interface, select one of 8 addresses, and even be able to add up to 8 inputs or outputs, using a MCP23017 16 port expander chip.This is the same chip Adafruit uses on their I2C LCD Keypad Shield, and uses their library to talk to it. You could even have up to 16 LCD displays, or up to 128 digital I/O pins, and combinations thereof.
DIY I2C LCD Display – [Link]