Autor Tema: la libreria lcd2 es amigable con la lcd 4x20 8bit ?? o alguna otra ?? por aqui ?  (Leído 1953 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
hola otra vez  :mrgreen:. estoy asiendo una aplicación en el cual me e quedado corto de pines del micro, y es por eso que quería saber que si la LCD 4x20 tiene una aplicación de 8bit para ahorrarme estos, para así poder manejarlo en conjunto con el teclado. por otro lado, tengo la librería lcd2.c..... esta maneja este tipo de lcd ????, bueno probé de todas formas esta librería pero el punto es que no me corre en esta aplicación en particular, yo creo por que en el puerto A del pic (16f877a) tengo activadas 2 entradas análogas para medir unos voltaje, y esto le puede estar causando problemas. ósea creo yo  :mrgreen:. también pensé que si se podría cambiar los pines de la librería lcd2 del puerto A al puerto C del micro, pero usando los C5, C6 y C7 solamente ya que tengo ocupados los otros pines con un par de señales PWM y otras cosas.
bueno para que queden claras mis dudas se las punteo
1º como se podría modificar esta librería para emigrar del puerto A al C del micro ??
2º esta librería me aguanta la LCD de 4x20 ????? ó como se podría modificar ésta para que me aguante esta LCD de 4x20????
3º alguien tiene una librería de manejo de LCD 4x20 de 8bit distinta de la lcd2.c ????

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: la libreria lcd2 es amigable con la lcd 4x20 8bit ?? o alguna otra ?? por aqui ?
« Respuesta #1 en: 22 de Noviembre de 2009, 08:31:08 »
creo que te esta haciendo un lio, con eso de ahorrar pines, busca en el Foro LCD y encontrara de 4Bit y 8Bit, en este Subforo de C ya se hablo muchos de estos, te aconsejo que use el Buscador

Saludo

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: la libreria lcd2 es amigable con la lcd 4x20 8bit ?? o alguna otra ?? por aqui ?
« Respuesta #2 en: 22 de Noviembre de 2009, 15:04:13 »
hola stk500, bueno tengo una libreria que es lcd2.c y me e dado cuenta que me funciona y es de 8bit el cual mescla el puerto A y B del uC, pero esta me daproblema cuando le adiero el codigo para el ADC el cual son 2 pines del puerto A, abra forma de modificar esta libreria ?? solo los pines del puerto A y emigrarlo al C por ejemplo ??

bueno la libreria es esta:
Código: [Seleccionar]
// Funciones para la gestion del display LCD de la MicroPIC Trainer.

//  lcd_init()   Debe ser llamada antes que las otras funciones.
//
//  lcd_putc(c)  Visualiza c en la siguiente posición del display.
//               Caracteres especiales de control:
//                      \f  Borrar display
//                      \n  Saltar a la segunda linea
//                      \b  Retroceder una posición.
//
//  lcd_gotoxy(x,y) Selecciona la nueva posicion de escritura en el display.
//                  (la esquina superior izquierda es 1,1)
//
//  lcd_getc(x,y)   Devuelve el caracter de la posicion x,y del display.


#bit  lcd_enable = 5.2
#bit  lcd_rw     = 5.1
#bit  lcd_rs     = 5.0
#byte lcd_a = 5
#byte lcd_b = 6

#define LCD_LINEA2 0x40    // Direccion de memoria para la segunda linea
#define LCD_DATO    1
#define LCD_COMANDO 0

#define LCD_CLEAR        0x01
#define LCD_HOME    0x02

#define LCD_DISPLAY_OFF  0x08
#define LCD_DISPLAY_ON   0x0C
#define LCD_CURSOR_ON    0x0E
#define LCD_CURSOR_BLINK 0x0F

#define LCD_CURSOR_SHIFT_RIGHT  0x10
#define LCD_CURSOR_SHIFT_LEFT   0x14
#define LCD_DISPLAY_SHIFT_RIGHT 0x18
#define LCD_DISPLAY_SHIFT_LEFT  0x1C


int lcd_leer()
{
  int valor;

  set_tris_a(0x18);
  set_tris_b(0xFF);

  lcd_rw = 1;
  delay_cycles(1);
  lcd_enable = 1;
  delay_cycles(1);
  valor = lcd_b;
  lcd_enable = 0;
  delay_us(40);

  set_tris_b(0x00);
  return valor;
}


void lcd_enviar(int dir, int valor)
{
  set_tris_a(0x00);
  set_tris_b(0x00);

  lcd_rs = 0;
  while( bit_test(lcd_leer(),7) );
  lcd_rs = dir;
  delay_cycles(1);

  lcd_rw = 0;
  delay_cycles(1);
  lcd_enable = 0;
  lcd_b = valor;
  delay_cycles(1);
  lcd_enable = 1;
  delay_us(2);
  lcd_enable = 0;
  delay_us(40);
}


void lcd_init()
{
  int i;

  set_tris_a(0x18);
  set_tris_b(0x00);

  lcd_enable = 0;
  lcd_rw = 0;
  lcd_rs = 0;
  delay_ms(15);

  for(i=0; i<3; i++)
  {
    lcd_enviar(LCD_COMANDO,0x38);
    delay_ms(5);
  }
  lcd_enviar(LCD_COMANDO,LCD_DISPLAY_ON);
  lcd_enviar(LCD_COMANDO,0x06);
  lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  lcd_enviar(LCD_COMANDO,LCD_HOME);
}


void lcd_gotoxy( byte x, byte y) {
   byte dir;

   if(y!=1)
     dir=LCD_LINEA2;
   else
     dir=0;
   dir+=x-1;
   lcd_enviar(LCD_COMANDO,0x80|dir);
}


void lcd_putc( char c) {
   switch (c) {
     case '\f'   : lcd_enviar(LCD_COMANDO,0x01);
                   delay_ms(2);
                   break;
     case '\n'   : lcd_gotoxy(1,2);               break;
     case '\b'   : lcd_enviar(LCD_COMANDO,0x10);  break;
     default     : lcd_enviar(LCD_DATO,c);        break;
   }
}


char lcd_getc( int x, int y) {
   char valor;

    lcd_gotoxy(x,y);

    lcd_rs = 1;
    valor = lcd_leer();
    lcd_rs = 0;

    return valor;
}
me podrian decir como cambiar el puerto A al C y que este puerto ocupe los ultimos 3 pines del puerto C ??