LCD borra caracteres al imprimir otro nuevo

#1
Gente estoy trabajando con PIC16f877 en lenguaje CCS en el cuál tengo un display lcd.
Mi idea es formar una palabra en el display caracter por caracter, con cierto tiempo entre cada letra para que se forme de a poco la palabra. Lo estoy haciendo de esta forma:
Código:
lcd_gotoxy(x,1);
lcd_putc("A");
x++; //avanza al siguiente casillero

lcd_gotoxy(x,1);
lcd_putc("B");
x++;

lcd_gotoxy(x,1);
lcd_putc("C");
x++;

etc etc etc...
esto funciona bastante bien, pero el inconveniente que al insertar un caracter nuevo borra lo que habia en el display, y no se ve la palabra completa formada.

Osea, se imprime la A, se borra la A y se imprime la B, se borra la B y se imprime la C...
Saben como puedo solucionarlo?
Gracias, saludos
 
#2
Hola, para un solo caracter es: lcd_putc('A'), creo que no es necesario utilizar lcd_gotoxy(x,1); e incrementar
 
#4
Hola, se me hace extraño que te suceda, tal vez el lcd que estas utilizando sea el del problema, acabo de hacer una pequeña prueba y simulacion con lo siguiente y funciono como lo requieres:


void main() {


lcd_init();

lcd_putc('A');

delay_ms(1000);

lcd_putc('B');

delay_ms(1000);

lcd_putc('C');

delay_ms(1000);

}
 
#5
Código:
Copié y pegue tu código antes de que empezara el mío y anda joya, despues arranca el resto del programa que hice y sigue teniendo el problema, te comento más detalladamente como trabaja que algo debo estar haciendo mal:

Las letras que son seis nada más las guardo en un array.
Dentro del main hay un for que recorre el array, 'agarrando' caracter por caracter, que los compara en un switch y dentro de cada case del switch esta la instruccion del lcd:

Código:
char text[]={'L','W','1','D','K','W',0};

lcd_putc('A'); delay_ms(1000);
lcd_putc('B'); delay_ms(1000);
lcd_putc('C'); delay_ms(1000);

void main
{

	for(a=0;text[a];a++)
		{
		switch(text[a])
			{
			case 'A':
					{
				//	lcd_gotoxy(x,1);
					lcd_putc('A');
					generate_tone(tono,di);	delay_ms(di);
					
					x++;
					break;
					}
			case 'L':
					{
				
					lcd_gotoxy(x,1);
					lcd_putc('L');
				//	printf(lcd_putc,"L");
					generate_tone(tono,di); delay_ms(di);
					
					x++;
					break;
					}
			case 'W':
					{
					lcd_gotoxy(x,1);
					lcd_putc('W');
				//	printf(lcd_putc,"W");
					
					generate_tone(tono,dat); delay_ms(di);
					x++;
					break;
					}
			case '1':
					{
					
					lcd_gotoxy(x,1);
					lcd_putc('1');
				//	printf(lcd_putc,"1");
					generate_tone(tono,di); delay_ms(di);
					
					x++;
					break;
					}
			case 'D':
					{
					
					lcd_gotoxy(x,1);
					lcd_putc('D');
				//	printf(lcd_putc,"D");
					
					generate_tone(tono,di); delay_ms(di);
					x++;
					break;
					}
			case 'K':
					{
					
					lcd_gotoxy(x,1);
				        lcd_putc('K');
				//	printf(lcd_putc,"k");
					generate_tone(tono,dat); delay_ms(di);
					
					x++;
					break;
					}
			} 		

}
También estoy simulando, todavia no pruebo en la realidad.
Gracias por tomarte el tiempo de probar y darme una mano.
 
#6
Hola yo te recomendaria utlizar otro modo de comparacion como el ciclo do-while o while para esto tendrias que cambiar la declaracion de text[]
 
#7
Amigo, sigue igual, por lo que estuve leyendo habria que probar activando y desactivando el cursor, pero para eso usa los pines b0 y b1 del display, y la libreria del pic no usa esos pines, ni estan conectados.

Igual eso lo descartaría porque tu código funciona de maravilla, asi que sospecho que el problema esta en que los caracteres esten en el array ó en el switch.

Les dejo un video de como esta funcionando ahora:

Proyecto: baliza CW LW1DKW

Saludos
 
#8
Hola Vegetal Digital

Analiza lo que adjunto, Lo encontré por aquí, solo que el Código fuente está en PICBasic (LCD.pbp).
Espero que lo puedas transcribir al lenguaje que Tú utilizas.

Analiza los archivos .bat; uno es para compilar el LCD.pbp, el Clean.bat es para borrar los archivos de respaldo que se generan al correr la simulación en ISIS de Proteus. Estos no son necesarios cuando ya todo funciona bien.

saludos
a sus ordenes
 

Adjuntos

#9
Igual eso lo descartaría porque tu código funciona de maravilla, asi que sospecho que el problema esta en que los caracteres esten en el array ó en el switch.
Hola, puedes probar lo siguiente:
-Declara de la siguiente forma el array text:char text[9]="LW1DKW0";
-Recorre el array de la siguiente forma: do{
switch(text[a]).........
............................
}while(text[a++]!='\0');
 
#10
Hola Vegetal Digital
Espero que lo puedas transcribir al lenguaje que Tú utilizas.
Gracias por los archivos, los ví y por lo que entendí la forma en la que imprime es una letra después de la otra, comotambién porpone@1024 más arriba.

Hola, puedes probar lo siguiente........
Lo probé y el resultado fué que no cambió nada. Si no le encuentro solución al método este que quiero lo hago 'a la fuerza' y listo.
Gracias por su ayuda, más ideas serán bien recibidas...
 

Temas similares

Arriba