I recently picked up this 16x2 character LCD and button shield from DealExtreme. It is similar to the Hitachi based shields and displays sold elsewhere, but with a slightly different pin-out. It still fits right onto the Uno or Duemilanove. For only $6 it's almost a must in any project toolkit. What's more, it's compatible with the LiquidCrystal Arduino library, and very easy to get started with. Just note the modified pin connections, and you're set to go.

The sketch below will display "hello world", a counter, and the value of the button presses on the screen. Furthermore, you can use the up and down button to adjust the back-light brightness. Just an example; I'm sure there are unlimited uses for this screen.

Please note, the button values was what I read from my shield, through the analog pin. Although it seems very consistent, other shields might give different readings. It's probably a good idea to shift off the two least significant bits to allow for some leeway.

// Code under GPL; please see full file for details.

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
  pinMode(10, OUTPUT);  // for backlight adjustment
  
  lcd.begin(16, 2);

  lcd.print("Hello World!");
}

int button_value;

int light = 100;

void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
  
  button_value = analogRead(A0);
  
  if (button_value == 132)
    light = min(light + 1, 255);
    
  if (button_value == 306)
    light = max(light - 1, 0);
  
  analogWrite(10, light);  

  String tmp = " ";
  tmp += light;
  tmp += " ";
  tmp += button_value;
  tmp += "   ";  // erase previous digits

  lcd.setCursor(4, 1);  
  lcd.print(tmp);
}