TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: xixonplus en 23 de Septiembre de 2003, 09:38:00
-
quiero visualizar un tanto % en la lcd y la variable la tengo definida como float, el problema surje cuando el % es menor que cero entonces solo visualiza: ejem: .5%
yo quiero visualizar 0.5%.
en mi programa lo tengo definido asi
printf(LCD_PUTC, "DE METANO %2.2f%%",conce);
gracias
-
Jolin el dichoso cerito, me está llevando de cabeza. Ya he escrito el código, esta tarde lo simulo y te doy la solución si funciona.
Un saludo
-
Bueno después de jugar al juego de las patas al tajo.
El cero de los cojines me ha mareado lo suyo. Pero bueno al final salió.
Aquí te mando la solución con un ejemplo (los comentarios seguramente saldran por libre):
// LCDfloa2.c: Envio de variables decimales a la LCD y si son <1 que aparezca el 0.
#include <16f876.h> //Este programa si se hace para el 16F84 no cabe.
//El compilador saca el error: fuera de ROM,
//segmento de programa demasiado largo
#use delay(clock=4000000)
#include <lcd2.c>
main()
{
float x,n=1467;
int16 Z;
int y;
char cadena[20];
x=n/1000;
y=(int)x;
Z=(int16)(x*1000); //3 decimales, resultado:1.467
lcd_init(); // Comandos de inicialización del LCD.
lcd_enviar(LCD_COMANDO,LCD_CURSOR_BLINK); // Envía comando al LCD
while(1)
{
if (y>=1)
printf(LCD_PUTC,"x=%.3f",x);
else
{
sprintf(cadena,"0.%lu",Z); //Esto es para sacar el 0.
printf(LCD_PUTC,"%s",cadena);
}
sleep();
}
}
Si hay algo que no entiendas preguntamelo.
Un saludo
-
El programa anterior te saca 0.1467 con el cero incluido, pero si tuviese que sacar 0.01467 o 0.001467 lo hace mal (los ceros que van detrás del punto no los saca)
Este programa que te pongo sí que contempla esas posibilidades:
// LCDfloat: Envio de variables decimales a la LCD con representación del 0.
#include <16f876.h>
#use delay(clock=4000000)
#include <lcd2.c>
main()
{
float n=1467;
float x;
int16 y;
char cadena[20];
x=n/1000000;
lcd_init(); // Comandos de inicialización del LCD.
lcd_enviar(LCD_COMANDO,LCD_CURSOR_BLINK); // Envía comando al LCD
while(1)
{
if(x>=1)
printf(LCD_PUTC,"x=%4.5f",x); //5 decimales
else
{
sprintf(cadena,"%4.5f",x);
printf(LCD_PUTC,"x=0%s",&cadena[1]); //El resultado final en la LCD
//es 0.00146
}
sleep();
}
}
Un saludo