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
}