Autor Tema: ayuda con el LCD 16x1  (Leído 1270 veces)

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

Desconectado mar_ing

  • PIC10
  • *
  • Mensajes: 1
ayuda con el LCD 16x1
« en: 29 de Julio de 2013, 17:05:58 »
Me estoy enseñando a utilizar el LCD 16x1 pero no escribe nada solo le puedo modificar el contraste, necesito ayuda quiero saber cual es mi error ya que sabiendo utilizar voy a poder empezar a hacer una practica, de antemano gracias.

#include <p18f4550.h>
#include <delays.h>



#define BUS PORTB
#define RS PORTEbits.RE0
#define E PORTEbits.RE1

void LCD_comand(unsigned char comando);
void LCD_dato(unsigned char dato);
void retardo_40us(unsigned int cuentas);
void LCD_PRINTSTRING(rom unsigned char *p_texto);

void LCD_ini(void)
{
   ADCON1=0x0F;
   PORTB=0xFF;
   PORTE=0;
   TRISE=0;
   TRISB=0;
   Delay10KTCYx(100);
   LCD_comand(0x30);
   Delay10KTCYx(25);
   LCD_comand(0x30);
   Delay10KTCYx(20);
   LCD_comand(0x30);
   LCD_comand(0x3C);//linea de configuracion de N y F//
   LCD_comand(0x08);//agagamos el display//
   LCD_comand(0x01);//inicializamos el display//
   LCD_comand(0x06);//elegimos corrimiento a la derecha I/D=1//nota/////////////////////////
   LCD_comand(0x0F);//prendemos el display elegimos c01 y B=1//

}

void LCD_comand(unsigned char comando)
{
   BUS=comando;
   RS=0;
   Nop(); //retardo minimo de 140 nanosegundos(la funcion nop tarda en promedio 1 microsegundo//
   E=1;   //enable//
   Nop();Nop();Nop();
   E=0;
   Nop();
   if(comando>3)
      retardo_40us(2);
   else
      Delay10KTCYx(16);
}

void LCD_dato(unsigned char dato)
{   
      
   retardo_40us(2);
   BUS=dato;
   RS=1;
   Nop();
   E=1;
   Nop(); Nop();Nop();
   E=0;
   Nop();
   retardo_40us(2);
}

void main(void)
{
   
      LCD_ini();
      LCD_dato(0x57);
      LCD_PRINTSTRING("orking");      
      LCD_comand(0xC7);
      LCD_PRINTSTRING("LCD"); //hace desplazamiento del texto
      while(1)
         {   
         //   LCD_comand(0x1C);
         //   retardo_40us(100);
         }
}

void retardo_40us(unsigned int cuentas)
{
   cuentas=cuentas*10;
   while(cuentas!=0)
   {
      cuentas--;
   }
}

void LCD_PRINTSTRING(rom unsigned char *p_texto)//entramos a la rom del programa y usando apuntador para recorrer un dato
{
   do
   {
      LCD_dato(*p_texto);      //lee el dato al que esta apuntando el apuntador, apoyandose de la funcion LCD_DATA
      p_texto++;
   }while(*p_texto);         //para llegar al final de la kadena a escribir   
}


 

anything