kann man doch, ich weiss nicht was ihr wollt.
unten ist eine eigene auf meine bedürfnisse angepasste lcd-routine mit winavr-c und rw auf masse.
port c0-c5. (daten 0-3, 5 rs, 4 en), lcd 2x16, AVR16 8mhz

die adressen können mit leichtigkeit für andere lcd ausgetauscht werden, so lernt man auch die lcd kennen, mit dem datenblatt.

Code:
#include <inttypes.h> 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h> 

#define delay_us_(us)  _delayFourCycles_( ( ( 1*(F_CPU/4000) )*us)/2005 )

void _delayFourCycles_(uint16_t z)
{
	uint16_t i;
	
    for (i=0; i<z; i++)
    asm volatile("nop");
}

void delay_ms_(uint16_t z)
{
	uint16_t i;
	
	for (i=0; i<z; i++)
    delay_us_(999);
}	

void lcd_flash_e (void)
{
	PORTC|=(1<<DDC4);		
	delay_us_(5);							
	PORTC&=~(1<<DDC4);		
	delay_us_(50);							
}

void lcd_write (uint8_t data, uint8_t rs)   
{
	uint8_t dataBits ;
  
    if (rs)    				
       dataBits=0x20;		
    else     				
       dataBits=0; 			
	
    PORTC=dataBits |(data>>4);		
	lcd_flash_e ();    
    PORTC=dataBits | (data&0x0F);	
	lcd_flash_e();
	delay_ms_(2);
}

void lcd_cls (void)   
{
	lcd_write(0x02,0);   	
	delay_ms_(2);			
	lcd_write(0x01,0);   	
	delay_ms_(2);			
}

void lcd_writechar(char zeichen)   
{
	lcd_write (zeichen,1);   
}

void lcd_writetext(char *text)    
{
	uint8_t i = 0;
	while (text[i]!=0) 
	{
		lcd_writechar(text[i]);
		i++;
	}
}

void lcd_gotoline(uint8_t zeile)    
{
	if (zeile == 1)lcd_write(0x80,0);   
	if (zeile == 2)lcd_write(0xC0,0);   
}

void lcd_gotopos (uint8_t zeile, uint8_t spalte)    
{
	if (zeile == 1)lcd_write(0x80+spalte-1,0);   
	if (zeile == 2)lcd_write(0xC0+spalte-1,0);  
}

void lcd_ini (void)
{
	DDRC = 0x3F;		
	PORTC=0x00;			

	delay_ms_(5);		

	lcd_write(0x2,0);		

	lcd_flash_e ();			

	delay_ms_(5);		

	lcd_write(0x28,0);     
	lcd_write(0x0C,0);    
	lcd_write(0x06,0);   
	
	lcd_cls();				
}

int main(void)
{
	
              char text_ausgabe[]="hallo";
	
	DDRC=0xff;
	PORTC=0;
	delay_ms_(100);
	lcd_ini();
	lcd_cls();
	
	while(1)
	{		   
              lcd_cls();
              lcd_gotopos (1, 3);
              lcd_writetext(text_ausgabe);
              delay_ms_(500);
	}
	
}