• Jueves 28 de Marzo de 2024, 23:54

Autor Tema:  Lcd 20x4  (Leído 6599 veces)

farmada

  • Miembro activo
  • **
  • Mensajes: 62
    • Ver Perfil
Lcd 20x4
« en: Martes 5 de Septiembre de 2006, 16:15 »
0
Gente. ya estuve trabajando con displays de 16x2 sin problemas, pero en este momento tengo que trabajar con un display 20x4 y tengo el problema de que no lo puedo o no se como inicializarlo. En los 16x2 lo inicializo con 0x38, pero no se como hacerlo con estos. Si alguien me puede dar una mano se los agradezco.

El LCD que estoy usando es el WH2004L

farmada

  • Miembro activo
  • **
  • Mensajes: 62
    • Ver Perfil
Re: Lcd 20x4
« Respuesta #1 en: Martes 5 de Septiembre de 2006, 18:53 »
0
Cita de: "farmada"
Gente. ya estuve trabajando con displays de 16x2 sin problemas, pero en este momento tengo que trabajar con un display 20x4 y tengo el problema de que no lo puedo o no se como inicializarlo. En los 16x2 lo inicializo con 0x38, pero no se como hacerlo con estos. Si alguien me puede dar una mano se los agradezco.
El LCD que estoy usando es el WH2004L

farmada

  • Miembro activo
  • **
  • Mensajes: 62
    • Ver Perfil
Re: Lcd 20x4
« Respuesta #2 en: Jueves 7 de Septiembre de 2006, 16:52 »
0
Gente muchas gracias igualmente pero ya lo solucione modificando la libreria LCD2.h.
Les paso una version nueva de la LCD2.h para trabajar con Displays de 4x20 ( solo le agregue un Switch-Case.
Espero que les sea de utilidad

#use fast_io(B)
#use fast_io(D)

#define LCD_LINEA2 0xC0 // Direccion de memoria para la segunda linea
#define LCD_LINEA3 0x94 // Direccion de memoria para la tercera linea
#define LCD_LINEA4 0xD4 // Direccion de memoria para la cuarta linea

#define LCD_DATO  1
#define LCD_COMANDO 0

#define LCD_CLEAR 0x01
#define LCD_HOME 0x02
#define LCD_MOVCURSO 0x06
#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_b(0x00);
set_tris_d(0xFF);

output_high(PIN_B0);  // ( R/W )
delay_cycles(1);
output_high(PIN_B1);  // ( E )
delay_cycles(1);
valor = input_d();
output_low(PIN_B1);
delay_us(40);

set_tris_b(0x00);
set_tris_d(0x00);

return valor;
}


void lcd_enviar(int dir,int valor)
{
set_tris_b(0x00);
set_tris_d(0x00);
output_low(PIN_B1);
delay_ms (1);

output_low(PIN_B2);
output_bit(PIN_B2, dir);
delay_ms (1);
output_d(valor);
delay_ms (1);
output_high(PIN_B1);
delay_cycles(1);
output_low(PIN_B1);
delay_ms (1);
}


void lcd_init()
{
int i;

set_tris_b(0x00);
set_tris_d(0x00);

output_low(PIN_B1);
output_low(PIN_B0);
output_low(PIN_B2);
delay_ms(15);

for(i=0; i<3; i++)
{
lcd_enviar(LCD_COMANDO,0x38);
delay_ms(5);
}
lcd_enviar(LCD_COMANDO,LCD_DISPLAY_ON);
delay_ms(5);
lcd_enviar(LCD_COMANDO,LCD_CLEAR);
delay_ms(5);
lcd_enviar(LCD_COMANDO,LCD_MOVCURSO);
delay_ms(5);
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_gotoxy( byte x, byte y) {
byte dir;
dir=0;
Switch (y) {

       case 1 : dir=0x80; break;
       case 2 : dir=0xc0; break;
       case 3 : dir=0x94; break;
       case 4 : dir=0xd4; break;
   }
   dir+=x-1;
   lcd_enviar(LCD_COMANDO,0x80|dir);
}

void lcd_putc( char c) {
switch © {
case '\f' : lcd_enviar(LCD_COMANDO,0x80);
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);

output_high(PIN_B2);
valor = lcd_leer();
output_low(PIN_B2);

return valor;
}

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Lcd 20x4
« Respuesta #3 en: Viernes 8 de Septiembre de 2006, 13:37 »
0
Si la libreria funciona y tienes ganas te pido que la publiques en el subforo de Soluciones de Hard y Soft http://foros.solocodigo.com/index.php?showforum=156 .. aqui se iran poniendo las rutinas verificadas y toda la info util a la hora de programar.. Saludos :)
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

cahak

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Lcd 20x4
« Respuesta #4 en: Jueves 14 de Septiembre de 2006, 18:26 »
0
Hola, si a alguien le interesa aqui se venden lcd's de bastantes tipos y el vendedor es muy majo:

http://www.electronicca.com/Stock1/STOCK1.html


trdperez

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Lcd 20x4
« Respuesta #5 en: Sábado 20 de Diciembre de 2008, 23:55 »
0
Hola Farmada,

Estoy usando el WH2004A sin problemas, pero cuando quise pasar a el WH2004L cuya hoja de datos parece idéntica, no pude activarlo.
El A prende el backlight y pone las líneas 1 y 3 en gris desde el comienzo, cuando lo saco y pongo el L, nada pasa, no backlight ni lineas, y el código que tengo y funciona con el A no hace nada con el L. Pense que el L estaba quemado y me dieron otro pero pasa lo mismo, no logro inicializarlo. Podras darme alguna idea? Apenas lo conectas se enciende el backlight como con el A? Gracias!!!