void XLCDInit(void)
{
//PORT initialization
//4bit mode
//Upper 4-bits of the DATAPORT output
XLCD_DATAPORT_TRIS &= 0x0f;
XLCD_DATAPORT &= 0x0f;
//control port initialization
XLCD_RSPIN_TRIS =0; //make control ports output
XLCD_ENPIN_TRIS =0;
XLCD_RSPIN =0; //clear control ports
XLCD_ENPIN =0;
//initialization by instruction
// envoi 3 fois de suite 0x03H sur le quarter MSB du PORTB
XLCDDelay15ms();
// Upper nibble interface
XLCD_DATAPORT &= 0x0f; // 1ere init
XLCD_DATAPORT |= 0b00110000;
Pulse_E() ;
XLCDDelay4ms();
// Upper nibble interface
XLCD_DATAPORT &= 0x0f; // 2em ini
XLCD_DATAPORT |= 0b00110000;
Pulse_E() ;
XLCDDelay4ms();
// Upper nibble interface
XLCD_DATAPORT &= 0x0f; // 3em init
XLCD_DATAPORT |= 0b00110000;
Pulse_E() ;
XLCDDelay4ms();
//Force le mode 4 Bits 0x02H sur quartet MSB du PortB
//Function SET Commande 0 0 1 DL N F X X avec RS=0 RW=0
// Upper nibble interface
XLCD_DATAPORT &= 0x0f; // Clear upper port
XLCD_DATAPORT |= 0b00100000;
Pulse_E() ;
//Function SET Commande 0 0 1 DL N F X X avec RS=0 RW=0
//Definit la taille de l'interface (DL=0 pour mode 4 bits, DL=1 pour mode 8 bits),
// le nombre de lignes (NL=0 pour 1 ligne, N=1 pour 2 ou 4 lignes),
// et la taille des fontes (F=0 pour des cars 5x7, F=1 pour des cars 5x10).
XLCDCommand(0b00101000); // 0x28 2Line 5x8
//Display on/off control 0 0 0 0 1 D C B
// affichage (D), curseur (C), clignotement du curseur (B).
XLCDCommand(0b00001000); //display off
XLCDCommand(0b00000001); //display clear
//Entry mode setting
//Entry mode command " 0 0 0 0 0 1 ID S "
//ID =0 no cursor increment during read and write
//ID =1 cursor increment during read and write
//S =0 no display during read and write
//S =1 display shift
XLCDCommand(0b00000110); //if cursor inc and no display shift
//Display on off ,Blink ,cursor command set
//"0 0 0 0 1 D C B "
//D=1 dislay on, C=1 cursor on, B=1 blink on
XLCDCommand(0b00001111); //display on cursor on blink on
// end of initialization
return;
}