Autor Tema: LCD 4 bits  (Leído 1422 veces)

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

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
LCD 4 bits
« en: 04 de Mayo de 2007, 20:59:36 »
Hola gente, hasta hoy estaba usando el LCD con todas sus patas y ahora prentendia hacerlo con solo el puerto B. Estoy usando el pic 18F452, quice modificar las primeras 3 lineas que eran las que direccionaban rs, rw y re al puerto D solo cambie eso para que ahora apuente al puerto B pero no me funciono.
Si alguien se da cuenta del error por favor ayudeme.

Muchas gracias.
Pablo


#bit lcd_rs = 0xF81.0
#bit lcd_rw = 0xF81.1
#bit lcd_enable = 0xF81.2
#byte lcd_b = 0xF81

#define LCD_LINEA1 0x80 // Direccion de memoria para la 1 linea
#define LCD_LINEA2 0xc0 // Direccion de memoria para la 2 linea
#define LCD_LINEA3 0x94 // Direccion de memoria para la 3 linea
#define LCD_LINEA4 0xd4 // Direccion de memoria para la 4 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_b(0x00);
lcd_rw = 1;
delay_cycles(1);
lcd_enable = 1;
delay_cycles(1);
valor = lcd_b;
lcd_enable = 0;
delay_us(40);

return valor;
}


void lcd_enviar(int dir, int valor)
{
lcd_rs = 0;
while( bit_test(lcd_leer(),7) );
lcd_rs = dir;
delay_us(1);
lcd_rw = 0;
delay_us(1);
lcd_enable = 0;
lcd_b = valor;
delay_us(1);
lcd_enable = 1;
delay_us(2);
lcd_enable = 0;
delay_us(40);
}


void lcd_init()
{
int i;
delay_cycles(1);

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_LINEA1;
else if(y == 2)
   dir=LCD_LINEA2;
else if(y == 3)
   dir=LCD_LINEA3;
else if(y == 4)
   dir=LCD_LINEA4;

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;
}

void lcd_enabled() {
   lcd_enable = 1;
}

void lcd_disabled() {
   lcd_enable = 0;
}




Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: LCD 4 bits
« Respuesta #1 en: 04 de Mayo de 2007, 21:06:07 »
Creo que usas CCS, buscate la flexlcd.c de CCS también, en el buscador podrás encontrarla.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: LCD 4 bits
« Respuesta #2 en: 04 de Mayo de 2007, 23:25:35 »
Muchas gracias, la probe en el proteus y funciona perfecta.

Gracias
Pablo


 

anything