text: // -------------------------------------------------
  // LCD functions
  
  void Lcd_Port(char a)
  {
  	if(a & 1)
  		D4 = 1;
  	else
  		D4 = 0;
  
  	if(a & 2)
  		D5 = 1;
  	else
  		D5 = 0;
  
  	if(a & 4)
  		D6 = 1;
  	else
  		D6 = 0;
  
  	if(a & 8)
  		D7 = 1;
  	else
  		D7 = 0;
  }
  
  int retard=10; //4
  void Lcd_Cmd(char a)
  {
  	RS = 0;             // => RS = 0
  	Lcd_Port(a);
  	EN  = 1;             // => E = 1
          __delay_ms(retard);
          EN  = 0;             // => E = 0
  }
  
  void Lcd_Clear()
  {
  	Lcd_Cmd(0);
  	Lcd_Cmd(1);
  }
  
  void Lcd_Set_Cursor(char a, char b)
  {
  	char temp,z,y;
  	if(a == 1)
  	{
  	  temp = 0x80 + b - 1;
  		z = temp>>4;
  		y = temp & 0x0F;
  		Lcd_Cmd(z);
  		Lcd_Cmd(y);
  	}
  	else if(a == 2)
  	{
  		temp = 0xC0 + b - 1;
  		z = temp>>4;
  		y = temp & 0x0F;
  		Lcd_Cmd(z);
  		Lcd_Cmd(y);
  	}
  }
  
  void Lcd_Init()
  {
    Lcd_Port(0x00);
     __delay_ms(20);
    Lcd_Cmd(0x03);
  	__delay_ms(5);
    Lcd_Cmd(0x03);
  	__delay_ms(11);
    Lcd_Cmd(0x03);
  
    Lcd_Cmd(0x02);
    Lcd_Cmd(0x02);
    Lcd_Cmd(0x08);
    Lcd_Cmd(0x00);
    Lcd_Cmd(0x0C);
    Lcd_Cmd(0x00);
    Lcd_Cmd(0x06);
  }
  
  void Lcd_Write_Char(char a)
  {
     char temp,y;
     temp = a&0x0F;
     y = a&0xF0;
     RS = 1;             // => RS = 1
     Lcd_Port(y>>4);             //Data transfer
     EN = 1;
     __delay_us(40);
     EN = 0;
     Lcd_Port(temp);
     EN = 1;
     __delay_us(40);
     EN = 0;
  }
  
  void Lcd_Write_String(char *a)
  {
  	int i;
  	for(i=0;a[i]!='\0';i++)
  	   Lcd_Write_Char(a[i]);
  }
  
  void Lcd_Shift_Right()
  {
  	Lcd_Cmd(0x01);
  	Lcd_Cmd(0x0C);
  }
  
  void Lcd_Shift_Left()
  {
  	Lcd_Cmd(0x01);
  	Lcd_Cmd(0x08);
  }
  
  
  // Functions haut niveau
  
  
  char buffer[20];
  char line1[20];
  char line2[20];
  
  
  
  void printLcd()
  {
      printf("----------------\n");
      printf("%s\n",line1);
      printf("%s\n",line2);
      printf("----------------\n)");
  }
  
  void clearLcd()
  {
      Lcd_Clear();  
      strcpy(line1,"");
      strcpy(line2,"");
      printLcd();
  }
  
  void dispLine1(char *s)
  {
      Lcd_Set_Cursor(1,1);
      Lcd_Write_String(s);
      strcpy(line1,s);
      printLcd();
  }
  
  
  void dispLine2(char *s)
  {
      Lcd_Set_Cursor(2,1);
      Lcd_Write_String(s);
      strcpy(line2,s);
      printLcd();
  }
  
  
  
  void msgCrt(char *m)
  {
      Lcd_Set_Cursor(2,14);
      Lcd_Write_String(m);
       __delay_ms(1000);
  }
  
  void msg(char *m)
  {
      Lcd_Set_Cursor(2,1);
      Lcd_Write_String(m);
      strcpy(line2,m);
      printLcd();
  }
  
  void writeError(char *m1, char *m)
  {
      Lcd_Set_Cursor(1,1);
      Lcd_Write_String(m1);
      strcpy(line1,m1);
       Lcd_Set_Cursor(2,1);
      Lcd_Write_String(m);
      strcpy(line2,m);
      printLcd();
      __delay_ms(1000);
  }
  
  void menu(int n, char *s)
  {
      Lcd_Set_Cursor(2,2+(n-1)*5);
      Lcd_Write_String(s);
  }
  
  
  
  
  
  
  