Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
printf(lcd_caracter,"Valor flotante = %f",valor);
char *hex2dec(unsigned HEX)
{
char U, D, C, M, CH[4], NZ;
strcpy(CH,"***");
NZ=0; // Asume como el puntero al primer dígito no nulo
if (HEX <= 999)
{
C = HEX/100; // Digito de las centenas
D = (HEX - C*100) /10; // Digito de las decenas
U = (HEX - C*100 - D*10); // Digito de las unidades
CH[0] = 48+C; //48 es el código del "0"
CH[1] = 48+D;
CH[2] = 48+U;
CH[3] = 0;
if (C==0) // Para que no ponga ceros a la izquierda
{
CH[0] = 32; //32 es el código del " "
//NZ=1; // para recostar a izquierda (*)
if (D==0)
{
CH[1] = 32;
//NZ=2; // para recostar a izquierda (*)
}
}
}
return &CH[NZ];
}
// * Descomentariarlas si se quiere recostar a izquierda (devuelve el puntero al primer dígito no nulo)
char *hex2dec(unsigned HEX)
{
char U, D, C, M, N, CH[6],NZ;
strcpy(CH,"*****");
NZ=0; // Asume como el puntero al primer dígito no nulo
// Digito de las decenas de mil
N = HEX/10000;
// Digito de las unidades de mil
M = HEX/1000 - N*10;
// Digito de las centenas
C = HEX/100 - M*10 - N*100;
// Digito de las decenas
D = HEX/10 - C*10 - M*100 - N*1000;
// Digito de las unidades
U = HEX - D*10 - C*100 - M*1000 - N*10000;
CH[0] = 48+N; //48 es el código del "0"
CH[1] = 48+M;
CH[2] = 48+C;
CH[3] = 48+D;
CH[4] = 48+U;
CH[5] = 0;
if (N==0) // Para que no ponga ceros a la izquierda
{
CH[0] = 32; //32 es el código del " "
//NZ=1; // para recostar a izquierda (*)
if (M==0)
{
CH[1] = 32;
//NZ=2; // para recostar a izquierda (*)
if (C==0)
{
CH[2] = 32;
//NZ=3; // para recostar a izquierda (*)
if (D==0)
{
CH[3] = 32;
//NZ=4; // para recostar a izquierda (*)
}
}
}
}
return &CH[NZ];
}
// * Descomentariarlas si se quiere recostar a izquierda (devuelve el puntero al primer dígito no nulo)
//==============================================================
// Convierte VALOR en un CHAR[8] de hasta 6 digitos (más el punto y el cero final)
//
char *DESCOMP(float VALOR)
{
unsigned ENTE, DECI;
char CHENTE[4], CHDECI[4];
float BUFFER;
// Separación de parte entera y decimales
ENTE = VALOR; // Retiene la parte entera
BUFFER = ENTE;
DECI = 1000. * (VALOR - BUFFER); // Retiene los primeros 3 dígitos de la parte decimal
// Armado de cada cadena por separado
strcpy(CHENTE,sprint(ENTE,0)); // Pone blancos a izquierda
strcpy(CHDECI,sprint(DECI,1)); // Pone ceros a izquierda
// Encadenado final
strcpy(TXT,CHENTE); // Copia los 3 primeros digitos
strcat(TXT,"."); // Pome el punto
strcat(TXT,CHDECI); // Agrega los 3 dígitos decimales siguientes
return TXT; // Formato: ABC.DEF, recostado a derecha
// Pone blancos a izquierda (A hasta B) y ceros a derecha.
}
//==============================================================
// Guarda en un arreglo hasta 3 dígitos decimales de una variable 'int'
// Si ZEROSOK=0 Pone blancos a izquierda
// Si ZEROSOK=1 Pone ceros a izquierda
//
char *sprint(int HEXA, char ZEROSOK)
{
char NZ, CEN,DEC,UNI, CH[6];
strcpy(CH,"***"); // Ocupa los 3 digitos
NZ=0; // Puntero a devolver
// Obtiene los decimales
CEN = HEXA /100;
DEC = (HEXA - 100 * CEN) /10;
UNI = HEXA - 100 * CEN - 10 * DEC;
CH[0] = 48 + CEN; // Genera los caracteres ASCII
CH[1] = 48 + DEC; // 48 es el ASCII de "0"
CH[2] = 48 + UNI;
CH[3] = 0; // y pone el fin de cadena
if(!ZEROSOK) // Si ZEROSOK = 0, en lugar de ceros pone blancos a izquierda
{
if(CEN==0)
{
CH[0] = 32; // 32 es el ASCII de " " (blanco)
// NZ =1; // Descomentariar para recostar a izquierda
if(DEC==0)
{
CH[1] = 32;
// NZ =2; // Descomentariar para recostar a izquierda
}
}
}
return (&CH[NZ]);
}
Las instrucciones del tipo "printf" admiten argumentos donde se especifica ese tipo de cosas:jaiser dijo:Saludos, soy nuevo en el foro y tengo el mismo problema, uso CCS, la diferencia es que escribo lcd_putc para enviar a la pantalla y no se como limito el numero de decimales que se muestran en la pantalla? Alguien puede decirme.