Merci JPL du conseil
Alors voici danc le bout de code C dont je dispose.
Code:
.
.
.

#define PORT_AFFICHEUR PORTA
#define val_bit(bit) (1<<bit)
#define set_bit(port,bit) port|=(1<<bit)
#define clear_bit(port,bit) port&=(~(val_bit(bit)))

/* Définitions utilisées pour gérer l'afficheur LCD (PORT_AFFICHEUR) */
#define BIT_ENABLE 1
#define BIT_RS 0
.
.
.

/********** Routines de gestion de l'afficheur ************************************/

void lcd_delay (unsigned int t)
{
	unsigned int i;

	for (i = 0;  i < t;  i++);
}

void lcd_ready (void)
{
	clear_bit (PORT_AFFICHEUR, BIT_RS);			/* Mode commande */
	lcd_delay (1000);
}

/* Routine d'écriture d'un quartet (mode 4 bits) */
void lcd_write_nibble (unsigned char data)
{
	PORT_AFFICHEUR = data;
	set_bit (PORT_AFFICHEUR, BIT_ENABLE);			/* Impulsion sur le bit EN */
	lcd_delay (5);
	clear_bit (PORT_AFFICHEUR, BIT_ENABLE);
	lcd_delay (5);
}

/* Routine d'écriture d'une donnée ou 
 * d'une commande. (Dépend du bit RS) */
void lcd_write_data (unsigned char data)
{
	unsigned char d;
	
	d=PORT_AFFICHEUR & 3;
	
	/* Ecriture du quartet de poids fort */
	lcd_write_nibble ((data & 0xF0) | d);
	
	/* Ecriture du quartet de poids faible */
	data &= 0x0F;
	data = data << 4;
	lcd_write_nibble ((data & 0xF0) | d);
}

/* Positionnement du curseur à un emplacement donné */
void lcd_gotoXY (unsigned char x, unsigned char y)
{
	unsigned char base_y[2] = { 0x80, 0xC0 };

	lcd_ready ();
	lcd_write_data (x + base_y[y]);
	lcd_x = x;
	lcd_y = y;
}

/* Effacement de l'afficheur */
void lcd_clear (void)
{
	lcd_ready ();
	lcd_write_data (0x0C);
	lcd_ready ();
	lcd_write_data (1);
	lcd_ready ();
	lcd_x = lcd_y = 0;
}

/* Ecriture d'un caractère */
void lcd_putchar (unsigned char c)
{
	if (c == 10)
		goto newline;
	++lcd_x;
	if (lcd_x > 16)
	{
newline:
		++lcd_y;
		lcd_gotoXY (0, lcd_y);
		if (c == 10)
			return;
	}
	lcd_ready ();
	set_bit (PORT_AFFICHEUR, BIT_RS);	/* Mode donnée */
	lcd_write_data (c);
}

/* Ecriture d'une chaîne de caractères */
void lcd_puts (unsigned char * str)
{
	while (* str)
	{
		lcd_putchar (* str);
		str++;
	}
}

/* Initialisation de l'afficheur */
void lcd_init (void)
{
	lcd_ready ();
	lcd_write_data (0x28);	/* Bus de données 4 bits, 2 lignes valides */
	lcd_ready ();
	lcd_write_data (0x28);	/* Envoi de la commande une seconde fois (ne fonctionne pas toujours sinon ?) */
	lcd_ready ();
	lcd_write_data (6);		/* Déplacement du curseur vers la droite */
	lcd_clear ();
	lcd_ready ();
}

void delay_ms (unsigned int ms)
{
	unsigned int i, j, k;

	for (i = 0;  i < ms;  i++)
	{
		for (j = 0;  j < 28;  j++)
		{
			for (k = 0;  k < 2500;  k++)
				;	// Boucle de 36 us 
		}
	}
}

void aff_ligne0 (char * m)
{
		lcd_gotoXY (0, 0);
		lcd_puts (m);
}

void aff_ligne1 (char * m)
{
		lcd_gotoXY (0, 1);
		lcd_puts (m);
}