Ever since I got my first LCD up and running those devices have become my obsession. For year and a half I manager to acquire all sorts of LCDs. Some of them I got working with different microcontrollers, some of them are still waiting for the right configuration of the stars and Segway scooters.
The first LCD I got running was a 16x2 character panel, made by Optrex with the classic HD44780 controller. I got it from a local surplus store and started researching how can I make it work. Well I found the spec on the Optrex web site and it did not look horribly complicated thing to do. At that time I only had a couple of PIC microcontrollers and one MSP430.
I never put myself to understand the gotchas of PIC assembly, so those chips are still sitting on my shelf. The MSP430 had great IDE and an in-circuit debugger, unfortunately it was 3.3v device, which presented a challenge to interface with the 5v LCD controller.
Luckily a friend of mine got one Philips P89C668 microcontroller, which was a derivative of 8051with build-in flash and RAM memory. Actually it turned to be quite a nice part. So one night we plugged the CPU into a socket, connected the corresponding pins to one MAX232 and fired the IDE to write come code in C. I remember I found a library written in 8051 assembly for the HD44780 and I ported that to plain C code. We programmed the microcontroller, connected the display on two of the general purpose parallel ports and fired the program - nothing, absolutely nothing. The screen would not even blink.
Well all things considered, that this was one of the first programs I have written for microcontrollers, it was not entirely unexpected. After some debugging - YES debugging - the Philips part also had in-circuit debugging capability - we discovered slight miscalculation in the delay function and after we fixed it - there was a blinking cursor in the top left corner of the display.
This was how I discovered one of the most common problem with the HD47780 based displays - timing is critical, when communicating with the LCD controller. You can drive the controller as slow as you want but do not try to push it beyond the 1-2 MHz limit (depending on the actual model).
There are may types of LCD modules you can find. Probably the simples ones are with custom patterns - like the ones found in some electronic multi meters, clocks radios etc. Personally I have no idea how to drive such a module, most of them are controlled by custom ICs. Probably the most used for hobby microcontroller projects seem to be the character LCD modules based on HD44780 controller. These modules can display text with fixed font (usually 5x7 dots) on one or two lines.
For more information how to interface character LCDs click here.
Another type of LCD modules, although not as popular, are the STN mono graphics displays.For more information how to interface graphics LCDs click here.
Color LCDs are really hard to control. I have not yet managed get one working, but here are my 2 cents.