Problemas con LCD Y PIC18F4550

Hola a toda la comunidad, estoy realizando un proyecto con el PIC18F4550 y un LCD 16 X 2 el problema esta cuando se me juntan las palabras que pongo, no se borran las anteriores.

ejemplo:
al presionar el pulsador a0 y a1 deben de aparecer "posibles fallas:" pero se junta con las del inicio y no puedo lograr que funcione como quiero, dejo una imagen para que vean como queda, espero me puedan ayudar con este problema.


Código:
#include <18F4550.h>
#device ADC=8
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,VREGEN,NOPBADEN,WRTB
#use standard_io(B)
#define use_portB_lcd TRUE
#include <lcd.c>
#use standard_io(A)
#use standard_io(D)
#use standard_io(C)
 
void main()
{
lcd_init();
 delay_ms(100);
      printf(lcd_putc, "\f Iniciando.");
      delay_ms(400);
      
      printf(lcd_putc, "\f Iniciando.. ");
      delay_ms(400);
  
      printf(lcd_putc, "\f Iniciando...");
      delay_ms(400);
lcd_init();
output_low(pin_D1);
output_high(pin_D0);
while(true){
lcd_gotoxy(1,1);
lcd_putc("Estado:");
lcd_gotoxy(2,2);
lcd_putc("Excelente");


if(input(pin_a1)==1){
output_high(pin_D1);
output_low(pin_D0);
lcd_gotoxy(2,2);
lcd_putc("Tarjeta LED");
delay_ms(200);
}
else {
output_high(pin_D0);
output_low(pin_D1);
output_low(pin_D2);
}
if(input(pin_a2)==1){
output_high(pin_D1);
output_low(pin_D0);
lcd_gotoxy(2,2);
lcd_putc("Falla Display");
delay_ms(200);
}
if(input(pin_a3)==1){
output_high(pin_D1);
output_low(pin_D0);
lcd_gotoxy(2,2);
lcd_putc("Falla DMX");
delay_ms(200);
}
if(input(pin_a4)==1){
output_high(pin_D1);
output_low(pin_D0);
lcd_gotoxy(2,2);
lcd_putc("Motor Paneo");
delay_ms(200);
}
if(input(pin_a5)==1){
output_high(pin_D1);
output_low(pin_D0);
lcd_gotoxy(2,2);
lcd_putc("Motor Tildeo");
delay_ms(200);
}
if(input(pin_a5)==1){
output_high(pin_D1);
output_low(pin_D0);
lcd_gotoxy(2,2);
lcd_putc("Falla LEDS");
delay_ms(200);
}
if((input(pin_a0) == 1) && (input(pin_a1) == 1)){
output_high(pin_D1);
output_high(pin_D2);
lcd_gotoxy(1,1);
lcd_putc("Posible Falla:");
lcd_gotoxy(2,2);
lcd_putc("Voltaje");

}
}
}
 

Adjuntos

  • ciruit0.jpg
    ciruit0.jpg
    161 KB · Visitas: 16
Última edición por un moderador:
Posible solución sin estar limpiando la pantalla constantemente.
PHP:
#include <18F4550.h>
#fuses    NOFCMEN, NOVREGEN
#use delay(crystal = 20 MHz)

#define USE_PORTB_LCD    TRUE
#include <lcd.c>


void main (void)
{
    lcd_init();
    printf(lcd_putc, "\fIniciando");
    
    for(int8 x=10;x<17;x++)
    {
        lcd_gotoxy(x,1);
        lcd_putc(".");
        delay_ms(400);
    }
    
    delay_ms(500);

    output_low(pin_D1);
    output_high(pin_D0);
    
    lcd_putc("\fEstado:\nExcelente");
    
    while(true)
    {
        if(input(PIN_A1))
        {
            output_high(pin_D1);
            output_low(pin_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Tarjeta LED     ");
            while(input(PIN_A1));
        }
        else
        {
            output_high(PIN_D0);
            output_low(PIN_D1);
            output_low(PIN_D2);
        }
        
        if(input(PIN_A2))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Falla Display   ");
            while(input(PIN_A2));
        }
        
        if(input(PIN_A3))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Falla DMX       ");
            while(input(PIN_A3));
        }
        
        if(input(PIN_A4))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Motor Paneo     ");
            while(input(PIN_A4));
        }
        
        if(input(PIN_A5))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Motor Tildeo    ");
            while(input(PIN_A5));
        }
        
        if(input(PIN_C0))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Falla LEDS      ");
            while(input(PIN_C0));
        }
        
        if(input(PIN_A0) && input(PIN_A1))
        {
            output_high(PIN_D1);
            output_high(PIN_D2);
            lcd_gotoxy(1,1);
            lcd_putc("Posible Falla:  ");
            lcd_gotoxy(1,2);
            lcd_putc("Voltaje         ");
            while(input(PIN_A0));
        }
    }
}
 
Última edición:
Posible solución sin estar limpiando la pantalla constantemente.
PHP:
#include <18F4550.h>
#fuses    NOFCMEN, NOVREGEN
#use delay(crystal = 20 MHz)

#define USE_PORTB_LCD    TRUE
#include <lcd.c>


void main (void)
{
    lcd_init();
    printf(lcd_putc, "\fIniciando");
    
    for(int8 x=10;x<17;x++)
    {
        lcd_gotoxy(x,1);
        lcd_putc(".");
        delay_ms(400);
    }
    
    delay_ms(500);

    output_low(pin_D1);
    output_high(pin_D0);
    
    lcd_putc("\fEstado:\nExcelente");
    
    while(true)
    {
        if(input(PIN_A1))
        {
            output_high(pin_D1);
            output_low(pin_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Tarjeta LED     ");
            while(input(PIN_A1));
        }
        else
        {
            output_high(PIN_D0);
            output_low(PIN_D1);
            output_low(PIN_D2);
        }
        
        if(input(PIN_A2))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Falla Display   ");
            while(input(PIN_A2));
        }
        
        if(input(PIN_A3))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Falla DMX       ");
            while(input(PIN_A3));
        }
        
        if(input(PIN_A4))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Motor Paneo     ");
            while(input(PIN_A4));
        }
        
        if(input(PIN_A5))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Motor Tildeo    ");
            while(input(PIN_A5));
        }
        
        if(input(PIN_C0))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Falla LEDS      ");
            while(input(PIN_C0));
        }
        
        if(input(PIN_A0) && input(PIN_A1))
        {
            output_high(PIN_D1);
            output_high(PIN_D2);
            lcd_gotoxy(1,1);
            lcd_putc("Posible Falla:  ");
            lcd_gotoxy(1,2);
            lcd_putc("Voltaje         ");
            while(input(PIN_A0));
        }
    }
}

tienes razon con eso de no limpiar el lcd constantemente pero en tu codigo no me muestra nada el lcd
 
Armé el circuito tan solo para comprobar el funcionamiento de la pantalla y sí se ve.
Seguramente tienes algo mal conectado.

si ya funciona gracias ya no se juntan las palabras el problema esta en la siguiente sentencia if

if(input(PIN_A0) && input(PIN_A1))
{
output_high(PIN_D1);
output_high(PIN_D2);
lcd_gotoxy(1,1);
lcd_putc("Posible Falla: ");
lcd_gotoxy(1,2);
lcd_putc("Voltaje ");
while(input(PIN_A0));
}

ya que no me muestra lo que asigne si no lo del pulsador a1 lo de la "tarjeta led" no me muestra lo de "posible falla"
 
Atrás
Arriba