title: LCD library - MPLAB X
body: <p>I'm trying to understand this LCD example on Pic16F887;
  <a href="http://www.mikroe.com/chapters/view/17/chapter-4-examples/#c4v12" rel="nofollow">http://www.mikroe.com/chapters/view/17/chapter-4-examples/#c4v12</a></p>
  
  <p>but the compiler keeps showing me errors:</p>
  
  <pre><code>lcdpic16.c:32: warning: function declared implicit int
  lcdpic16.c:33: warning: function declared implicit int
  lcdpic16.c:33: error: undefined identifier "_LCD_CURSOR_OFF"
  lcdpic16.c:34: error: undefined identifier "_LCD_CLEAR"
  lcdpic16.c:36: warning: illegal conversion between pointer types
  pointer to const unsigned char -&gt; pointer to unsigned char
  lcdpic16.c:37: warning: function declared implicit int
  lcdpic16.c:38: warning: illegal conversion between pointer types
  pointer to const unsigned char -&gt; pointer to unsigned char
  lcdpic16.c:43: warning: function declared implicit int
  lcdpic16.c:45: warning: illegal conversion between pointer types
  pointer to const unsigned char -&gt; pointer to unsigned char
  lcdpic16.c:48: warning: function declared implicit int
  lcdpic16.c:54: warning: function declared implicit int
  lcdpic16.c:55: warning: function declared implicit int
  (908) exit status = 1
  make: *** [build/default/production/lcdpic16.p1] Error 1
  
  BUILD FAILED (exit value 2, total time: 22s)  
  </code></pre>
  
  <p>Source Code (lcdp16.c)</p>
  
  <pre><code>/*Header******************************************************/
  #include &lt;pic16f887.h&gt;
  
  
  // LCD module connections
  #define LCD_RS RB4
  #define LCD_RS RB4
  #define LCD_EN RB5
  #define LCD_D4 RB0
  #define LCD_D5 RB1
  #define LCD_D6 RB2
  #define LCD_D7 RB3
  #define LCD_RS_Direction TRISB4
  #define LCD_EN_Direction TRISB5
  #define LCD_D4_Direction TRISB0
  #define LCD_D5_Direction TRISB1
  #define LCD_D6_Direction TRISB2
  #define LCD_D7_Direction TRISB3
  // End LCD module connections
  
  unsigned char ch;                    //
  unsigned int adc_rd;                 // Declare variables
  char *text;                          //
  long tlong;                          //
  
  void main() {
      INTCON = 0;                      // All interrupts disabled
      ANSEL = 0x04;                    // Pin RA2 is configured as an analog input
      TRISA = 0x04;
      ANSELH = 0;                      // Rest of pins are configured as digital
  
      Lcd_Init();                      // LCD display initialization
      Lcd_Cmd(_LCD_CURSOR_OFF);        // LCD command (cursor off)
      Lcd_Cmd(_LCD_CLEAR);             // LCD command (clear LCD)
  
      text = "mikroElektronika";       // Define the first message
      Lcd_Out(1,1,text);               // Write the first message in the first line
      text = "LCD example";            // Define the second message
      Lcd_Out(2,1,text);               // Define the first message
  
      ADCON1 = 0x82;                   // A/D voltage reference is VCC
      TRISA = 0xFF;                    // All port A pins are configured as inputs
      Delay_ms(2000);
  
      text = "voltage:";               // Define the third message
  
      while (1) {
          adc_rd = ADC_Read(2);        // A/D conversion. Pin RA2 is an input.
          Lcd_Out(2,1,text);           // Write result in the second line
          tlong = (long)adc_rd * 5000; // Convert the result in millivolts
          tlong = tlong / 1023;        // 0..1023 -&gt; 0-5000mV
          ch = tlong / 1000;           // Extract volts (thousands of millivolts)
                                       // from result
          Lcd_Chr(2,9,48+ch);          // Write result in ASCII format
          Lcd_Chr_CP('.');
          ch = (tlong / 100) % 10;     // Extract hundreds of millivolts
          Lcd_Chr_CP(48+ch);           // Write result in ASCII format
          ch = (tlong / 10) % 10;      // Extract tens of millivolts
          Lcd_Chr_CP(48+ch);           // Write result in ASCII format
          ch = tlong % 10;             // Extract digits for millivolts
          Lcd_Chr_CP(48+ch);           // Write result in ASCII format
          Lcd_Chr_CP('V');
          Delay_ms(1);
      }
  }
  </code></pre>
  
  <p>Can anyone explain to me what's happening? should I create a custom LCD library so the compiler can recognize methods like <code>Lcd_Init()</code> or what?
  (Windows 7 / XC8 / MPLAB X)</p>