Autor Tema: alguna libreria de LCD 20x4 de 8bit??  (Leído 4835 veces)

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

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
alguna libreria de LCD 20x4 de 8bit??
« en: 06 de Noviembre de 2009, 02:40:06 »
hola gente, bueno ando en busca esta vez de una libreria para manejar una LCD 20x4, pero esta la quiero conectar en el puerto B de un pic en conjunto con un teclado 4x4, es por ello que pregunto si abra una libreria de estas indole de 8 bit ??????? bueno salu2s

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: alguna libreria de LCD 20x4 de 8bit??
« Respuesta #1 en: 07 de Noviembre de 2009, 14:31:10 »
Hola japifer, no necesariamente debes utilizar una librería; pues el manejo del LCD a 8 o 4 bit es simple, puedes crear una funcion que haga lo que necesitas.
Prueba con este ejemplo, modo de configuración a 4 y 8 bit

saludos

Código: [Seleccionar]
#include <16F873A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT

#byte porta=5 //Definicion de variables del pic
#byte portb=6
#byte adcon1=0x1f

#define puerto_lcd portb
#define rs1 porta,0 //Definicion de bits
#define e1 porta,1
#define rs2 porta,2
#define e2 porta,3

int i; //Variable de 8 bit

byte const tabla1[17]={"Prueba LCD 8 bit"}; //Tabla que contiene la palabra
byte const tabla2[17]={"Prueba LCD 4 bit"}; //para el LCD
byte const caracter1[8]={ 0b10000,
0b10100,
0b10010,
0b11111,
0b00010,
0b00100,
0b00000,
0b00000,};


///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void display_8b(short valor, int respaldo) //Rutina que envia al LCD una palabra de control o dirección
{
if(valor == 0)
{bit_clear(rs1);}
else
{bit_set(rs1);}

puerto_lcd = respaldo;

bit_set(e1);
delay_cycles(10);
bit_clear(e1);
delay_ms(1);
}
///////////////////////////////////////////////////////////////////////////////
void display_4b(short valor , int respaldo) //Rutina que envia al LCD una palabra de control o dirección
{
int respaldo2;

if(valor == 0)
{bit_clear(rs2);}
else
{bit_set(rs2);}

puerto_lcd &= 0x0f;
respaldo2 = respaldo & 0xf0 ;
puerto_lcd |= respaldo2;

bit_set(e2);
delay_cycles(10);
bit_clear(e2);

puerto_lcd &= 0x0f;
respaldo2 = swap(respaldo) & 0xf0 ;
puerto_lcd |= respaldo2;

bit_set(e2);
delay_cycles(10);
bit_clear(e2);

delay_ms(1);
}
///////////////////////////////////////////////////////////////////////////////
void mensa_1_4b()
{
display_4b(0 , 0x80); //Dirección donde se escribirá el mensaje

for(i=0;i<sizeof(tabla2)-1;i++) //Ciclo que envía la palabra "prueba LCD"                                                           
{
display_4b(1 , tabla2[i]);
}
display_4b(0 , 0xc8); //Dirección donde se escribirá el mensaje
display_4b(1 , 0);
}
///////////////////////////////////////////////////////////////////////////////
void mensa_1_8b()
{
display_8b(0 , 0x80); //Dirección donde se escribirá el mensaje

for(i=0;i<sizeof(tabla1)-1;i++) //Ciclo que envía la palabra "prueba LCD"                                                           
{
display_8b(1 , tabla1[i] );
}
display_8b(0 , 0xc8); //Dirección donde se escribirá el mensaje
display_8b(1 , 0);
}
///////////////////////////////////////////////////////////////////////////////
void ini_lcd_8b()
{
display_8b(0 , 0b00111000); //Codigo para display a 8 bits
display_8b(0 , 0b00001100); //Codigo que activa el display
display_8b(0 , 0b00000110); //Codigo que define el cursor para
//Que se desplace hacia la derecha
//display_8b(0 , 0b00000111)//Codigo que define el cursor para
//que desplace hacia la izquierda
display_8b(0 , 1); //Limpia el display
delay_ms(2);
}
///////////////////////////////////////////////////////////////////////////////
void ini_lcd_4b() //modo de configuracion para 4 bit
{
int i;

delay_ms(15);
bit_clear(rs2);
puerto_lcd = 0b00110000; //se envia 3 veces este binario

for(i=1;i<=3;i++)
{
delay_cycles(10);
bit_set(e2);
delay_cycles(10);
bit_clear(e2);
delay_ms(5);
}
puerto_lcd = 0b00100000;
delay_cycles(10);
bit_set(e2);
delay_cycles(10);
bit_clear(e2);
delay_ms(5);

display_4b(0 , 0b00101000); //Codigo para display a 4 bits
display_4b(0 , 0b00001100); //Codigo que activa el display
display_4b(0 , 0b00000110); //Que se desplace hacia la derecha
//display_4b(0 , 0b00000111) //Codigo que define el cursor para
//que desplace hacia la izquierda
//todo el mensaje
display_4b(0 , 1); //Limpia el display
delay_ms(2);
}
///////////////////////////////////////////////////////////////////////////////
void crear_carac_8b()
{
for(i=0x40;i<=0x48;i++)
{
display_8b(0 , i);
display_8b(1 , caracter1[i-0x40]);
}
}
///////////////////////////////////////////////////////////////////////////////
void crear_carac_4b()
{
for(i=0x40;i<=0x48;i++)
{
display_4b(0 , i);
display_4b(1 , caracter1[i-0x40]);
}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

#zero_ram //Borrado de la memoria ram

void main() //Rutina principal
{
set_tris_a(0b010000); //Configuracion de entradas y salidas del puerto A
set_tris_b(0b00000000); //Configuracion de entradas y salidas del puerto B
port_b_pullups(true); //Habilitación de las resistencias pull-ups
adcon1=(0x07); //Configuracion del tmr1

porta = 0; //Porta inicia en 0
puerto_lcd = 0; //Portb inicia en 0

delay_ms(2);
ini_lcd_4b();
ini_lcd_8b();
crear_carac_8b();
crear_carac_4b();

while(true) //Rutina general
{
delay_ms(500);
mensa_1_4b();
mensa_1_8b();
}
}
///////////////////////////////////////////////////////////////////////////////


Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: alguna libreria de LCD 20x4 de 8bit??
« Respuesta #2 en: 07 de Noviembre de 2009, 16:50:14 »
hola diego muchas gracias lo pruevo altiro. pero una pregunta, esta rutina entonces maneja LCD de 20x4, por que yo tengo una libreria la cual es LCD2 la que es para el manejo de 8bit, pero no maneja la LCD que estoy requiriendo,(bueno eso creo  :mrgreen:)

gracias ....... ATTE:
japifer

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: alguna libreria de LCD 20x4 de 8bit??
« Respuesta #3 en: 08 de Noviembre de 2009, 00:56:34 »
japifer_22, el manejo de un LCD 4x20 es igual a un LCD 2x16 lo que debes tener en cuenta son las posiciones donde vas a enviar el caracter, acá te pongo la distribución de memoria de un LCD 4x20

saludos

[img]file:///C:/Documents%20and%20Settings/usuario/Es

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: alguna libreria de LCD 20x4 de 8bit??
« Respuesta #4 en: 08 de Noviembre de 2009, 01:05:27 »

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: alguna libreria de LCD 20x4 de 8bit??
« Respuesta #5 en: 08 de Noviembre de 2009, 11:01:49 »
aa OK muchas gracias  :-/