Code

LCD 1x16

#include "lcd.h"
int main()
{
/*Connect RS->PB0, RW->PB1, EN->PB2 and data bus to PORTB.4 to PORTB.7*/
LCD_SetUp(PB_0,PB_1,PB_2,P_NC,P_NC,P_NC,P_NC,PB_4,PB_5,PB_6,PB_7);
LCD_Init(1,16);
LCD_DisplayString("Explore Lcd 1x16");
while(1);
return (0);
}

LCD 2x16

#include "lcd.h"
int main()
{
/*Connect RS->PB0, RW->PB1, EN->PB2 and data bus to PORTB.4 to PORTB.7*/
LCD_SetUp(PB_0,PB_1,PB_2,P_NC,P_NC,P_NC,P_NC,PB_4,PB_5,PB_6,PB_7);
LCD_Init(2,16);
LCD_DisplayString("Explore Embedded");
LCD_DisplayString("Lcd 4-bit Mode");
while(1);
return (0);
}

LCD 4x20

#include "lcd.h"
int main()
{
/*Connect RS->PB0, RW->PB1, EN->PB2 and data bus to PORTB.4 to PORTB.7*/
LCD_SetUp(PB_0,PB_1,PB_2,P_NC,P_NC,P_NC,P_NC,PB_4,PB_5,PB_6,PB_7);
LCD_Init(4,20);
LCD_DisplayString("Explore Embedded\n");
LCD_DisplayString("LCD 4-bit Mode\n");
LCD_DisplayString("20 x 4 \n");
LCD_DisplayString(":) :O");
while(1);
return (0);
}

=Demo

The images below shows 16x2, 16x1 and 20x4 LCD's interfaced with starter AVR.
Pic16f877a 1x16 LCD.JPG