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); }


