TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Mikro-77 en 17 de Abril de 2013, 16:56:25

Título: como modificar libreria lcd420.c ??
Publicado por: Mikro-77 en 17 de Abril de 2013, 16:56:25
hola queria saber como se puede modificar la libreria lcd420.c porque tengo todo el programa echo y listo para funcionar y el circuito tambien pero al cambiar el lcd de 20x2 a 20x4 el puerto por el que escribe la libreria es el portB y me aria falta que salga por el portD si no es mucha molestia amigos o por lo menos indicarme que tengo que cambiar en la libreria, soy muy pichon en esto!

me olvide de dejar la libreria... esta es la estandar lcd240.c de ccs

struct lcd_pin_map {                 // This structure is overlayed
           BOOLEAN enable;           // on to an I/O port to gain
           BOOLEAN rs;               // access to the LCD pins.
           BOOLEAN rw;               // The bits are allocated from
           BOOLEAN unused;           // low order up.  ENABLE will
           int     data : 4;         // be pin B0.
        } lcd;

#locate lcd = getenv("SFR:PORTB")                        // This puts the entire structure
                                     // on to port B

#define lcd_type 2           // 0=5x7, 1=5x10, 2=2 lines


BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
                             // These bytes need to be sent to the LCD
                             // to start it up.


                             // The following are used for setting
                             // the I/O port direction register.

struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in


BYTE lcdline;

BYTE lcd_read_byte() {
      BYTE low,high;

      set_tris_b(LCD_READ);
      lcd.rw = 1;
      delay_cycles(1);
      lcd.enable = 1;
      delay_cycles(1);
      high = lcd.data;
      lcd.enable = 0;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(1);
      low = lcd.data;
      lcd.enable = 0;
      set_tris_b(LCD_WRITE);
      return( (high<<4) | low);
}


void lcd_send_nibble( BYTE n ) {
      lcd.data = n;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(2);
      lcd.enable = 0;
}


void lcd_send_byte( BYTE address, BYTE n ) {

      lcd.rs = 0;
      while ( bit_test(lcd_read_byte(),7) ) ;
      lcd.rs = address;
      delay_cycles(1);
      lcd.rw = 0;
      delay_cycles(1);
      lcd.enable = 0;
      lcd_send_nibble(n >> 4);
      lcd_send_nibble(n & 0xf);
}


void lcd_init() {
    BYTE i;

    set_tris_b(LCD_WRITE);
    lcd.rs = 0;
    lcd.rw = 0;
    lcd.enable = 0;
    delay_ms(15);
    for(i=1;i<=3;++i) {
       lcd_send_nibble(3);
       delay_ms(5);
    }
    lcd_send_nibble(2);
    for(i=0;i<=3;++i)
       lcd_send_byte(0, LCD_INIT_STRING);
}


void lcd_gotoxy( BYTE x, BYTE y) {
   BYTE address;

   switch(y) {
     case 1 : address=0x80;break;
     case 2 : address=0xc0;break;
     case 3 : address=0x94;break;
     case 4 : address=0xd4;break;
   }
   address+=x-1;
   lcd_send_byte(0,address);
}

void lcd_putc( char c) {
   switch (c) {
     case '\f'   : lcd_send_byte(0,1);
                   lcdline=1;
                   delay_ms(2);
                                           break;
     case '\n'   : lcd_gotoxy(1,++lcdline);        break;
     case '\b'   : lcd_send_byte(0,0x10);  break;
     default     : lcd_send_byte(1,c);     break;
   }
}

char lcd_getc( BYTE x, BYTE y) {
   char value;

    lcd_gotoxy(x,y);
    lcd.rs=1;
    value = lcd_read_byte();
    lcd.rs=0;
    return(value);
}


saludos!
Título: Re: como modificar libreria lcd420.c ??
Publicado por: KALLITOS en 17 de Abril de 2013, 17:26:34

#locate lcd = getenv("SFR:PORTB")                        // This puts the entire structure



Hola, prueba cambiando PORTB por PORTD, nunca use esa libreria, la que si su he usado bastante es la flex_lcd la que modifique para que funcione con display de 4 lineas.

saludos
Título: Re: como modificar libreria lcd420.c ??
Publicado por: Mikro-77 en 18 de Abril de 2013, 09:47:45
Hola si he visto por ahi en algunos sitios que esta esa libreria, yo simplemente no la use xq al leer que era para flex no pense que funcionaria en mi caso! gracias por tu ayuda!
Título: Re: como modificar libreria lcd420.c ??
Publicado por: T.E.I en 16 de Agosto de 2013, 23:08:15
tengo una librería para lcd 4x20 para el puerto D
si te interesa y no has solucionado el problema deja el coreo
Título: Re: como modificar libreria lcd420.c ??
Publicado por: Roos21 en 01 de Octubre de 2014, 16:57:11
Hola T.E.I puedes ayudarme a modificar la librería LCD420 para el puerto D? Te lo agradecería mucho