Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

03/02/2012 #1

Avatar de Vegetal Digital

LCD borra caracteres al imprimir otro nuevo
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
03/02/2012 #2


Hola, para un solo caracter es: lcd_putc('A'), creo que no es necesario utilizar lcd_gotoxy(x,1); e incrementar
03/02/2012 #3

Avatar de Vegetal Digital

Hola, gracias por responder.
El poner 'A' no cambio nada, y al sacar el gotoxy imprimió todas las letras en la primera posición...
Saludos
03/02/2012 #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);

}
04/02/2012 #5

Avatar de Vegetal Digital

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.
04/02/2012 #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[]
07/02/2012 #7

Avatar de Vegetal Digital

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
07/02/2012 #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
Archivos Adjuntos
Tipo de Archivo: zip LCD.zip (11,5 KB (Kilobytes), 15 visitas)
08/02/2012 #9


Vegetal Digital dijo: Ver Mensaje
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');
13/02/2012 #10

Avatar de Vegetal Digital

MrCarlos dijo: Ver Mensaje
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 porpone1024 más arriba.

1024 dijo: Ver Mensaje
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...
13/02/2012 #11


Hola, prueba agregando un retardo despues de cada lcd_putc( );
13/02/2012 #12


Supongo que al llamar a la rutina de escribir_ byte debes estar enviando el comando limpiar pantalla antes por eso borra el caracter anteriormente...
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.