Moderadores: 51, guest2003, brasilma
tmarchesi2 escreveu:Fala Vorh;
No seu método está economizando mais linhas, fica mais interessante programar assim. Eu só preciso entender melhor como este sprintf funciona. Eu acredito que no manual do C.V. dever ter mais parametros explicando.
Grato pela ajuda, era isso que eu estava procurando, vou tentar implementar.
Tmarchesi
// No inicio do programa declarei a variavel simbolo da seguinte forma:
// Notem que o primeiro byte da string é espaço;
char xdata simbolo[]=" C";
// Antes de formatar no buffer coloco o simbolo de grau:
simbolo[0]=223;
// Formato a string no buffer usando sprintf:
sprintf((char*)buffer,"TEMP = %.1f%s", (((float)(ADC0.channel0 * VREF) / 255) - 0.400) / 0.0195, simbolo);
// Envio para o LCD na linha 2 centralizado:
LCD_printf(buffer,LINHA2,CENTRO);
//------------------------------------------------------------------------
// Parameters:
// IN row: LCD display row (1 to 4)
// IN column: LCD display column (1 to 40)
// IN *fmt: format string
// Return: 0 if OK or -1 if error
//------------------------------------------------------------------------
int Printf_LCD(char linha, char coluna, const char *fmt,...)
{
char xdata lcdstring[DISPLAY_MAX_COLUMNS+1];
unsigned int xdata j=0;
va_list arg_ptr;
if((linha == 0) || (linha > DISPLAY_MAX_RAWS) || coluna > DISPLAY_MAX_COLUMNS)
{
return (-1);
}
va_start(arg_ptr,fmt);
j += vsprintf(lcdstring + j, fmt,arg_ptr);
LCD_goto_xy(linha, coluna);
LCD_EnviaString(lcdstring);
va_end(arg_ptr);
return 0;
}
Printf_LCD(1,3,"%02d:%02d:%02d",DateTimer.hora,DateTimer.min,DateTimer.seg);
if(Printf_LCD(1,3,"%02d:%02d:%02d",DateTimer.hora,DateTimer.min,DateTimer.seg))
ErroAoEscreverLCD();
// No exemplo de Temperatura lá no começo não precisa do sprintf fica assim:
Printf_LCD(2,1,"TEMP = %.1f%s", (((float)(ADC0.channel0 * VREF) / 255) - 0.400) / 0.0195, simbolo);
guest2003 escreveu:Vale lembrar que nem sempre menos linhas de programa equivalem a menos memoria ou melhor performance...
em alguns casos é o contrario...
Inclusive vi que você esta usando ponto flutuante, em ambiente embarcado sempre que possivel fuja disso !!
por exemplo, faça a conta com inteiros e depois ajuste a virgula...
Quer dividir um valor por 1.567 ... multiplique a entrada por 1000 e divida pelo inteiro 1567 e nao utilize ponto flutuante... vai ver que seu consumo de codigo / performance vão mudar muito... (se precisar de casa decimais, multiplique a entrada mais ainda... 10000 ou 100000)
ai na resposta voce apenas ajusta a virgula...
digamos 100 / 1.23 ... ai voce faz 100000 (100x1000) / 123 (1.23x100)
isso resulta em 813 que equivale a 81.3 ... pois temos que deslocar 1 casa na virgula (1000/100)
[]'s
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante