TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Sorianito en 22 de Marzo de 2013, 21:52:43

Título: Problema al borrar caracteres en LCD16x2
Publicado por: Sorianito en 22 de Marzo de 2013, 21:52:43
Hola a todos, necesito de su ayuda.
Veran estoy utilizando el pic 16F84a y un LCD 2x16 para leer una cadena de caracteres enviados por via serial, Aqui utilizo la lectura de identificadores (por asi decirlo) para leer dicha cadena. En el display del lcd se visualizan dos textos, una en cada fila que son las de Dist: y Marc: entonces aqui es donde uso los identificadores, lo que hace el pic es tomar la cadena (de 17 digitos) y leer el primer caracter y el noveno para que posicione una parte de la cadena en Dist: y otra en Marc:, para que quede mas claro la cadena la mando de la siguiente forma: D-------M------- (donde "-" son los caracteres siguentes que siguen de los identificadores) asi es que cuando detecta la letra D los valores de esa parte las posiciona en Dist: y la M las posiciona en Marc:
Ahora ya que esta claro esto el problema es el siguiente: los valores de la cadena cambiaran constantemente asi que se enviaran valores nuevos, lo que no puedo hacer es borrar algunos caracteres de la cadena anterior, por que si mando despues de la letra D tres digitos los caracteres de la cadena anterior se quedan ahi y solo escribe los tres digitos que envie.
Por mas que ya revise el programa no encuentro el problema.
Espero me ayuden, les adjunto el programa y si a alguien le sirve lo puede utilizar de referencia para proyectos futuros.
Se me olvidaba decir que tanto en la simulacion como en la aplicacion real tiene el mismo problema.




#include <16F84A.h>
#FUSES NOWDT, XT,
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8)
#include <lcd.c>
char opcion[18];
char A[]="", B[]="";
void main()
{
  
   lcd_init();
   printf(LCD_PUTC, "\f");
   lcd_gotoxy(1,1);
   lcd_putc("DIST:");
   lcd_gotoxy(1,2);
   lcd_putc("MARC:");
  
  
    while(TRUE)
   {
   fgets(opcion);
   {
  char A='D';
  
   if (opcion[0]==A)
    {
     lcd_gotoxy(6,1);
     lcd_putc("                                ");
     lcd_gotoxy(7,1);
     printf (lcd_putc,"%c%c%c%c%c%c%c",opcion[1], opcion[2], opcion[3], opcion[4], opcion[5], opcion[6], opcion[7]);
    }
   }
   {
  char B='M';
   if (opcion[8]==B)
   {
     lcd_gotoxy(6,2);
     lcd_putc("                                                   ");
     lcd_gotoxy(7,2);                
     printf (lcd_putc,"%c%c%c%c%c%c%c",opcion[9], opcion[10], opcion[11], opcion[12], opcion[13], opcion[14], opcion[15]);
   }
   }
}

}
Título: Re: Problema al borrar caracteres en LCD16x2
Publicado por: kamisama en 22 de Marzo de 2013, 23:41:03
Hola, pero vos mandas cadenas de largo variable y sin embargo los bytes estan fijos. Quiza en lugar de rellenar la linea y luego mandar los bytes sin chequear, te convenga contar donde comienza la marca e imprimir hasta y luego recien rellenar. O bien dejar todo de largo fijo y olvidarte de usar maracdores.

Saludos.