Hola estoy haciendo un voltímetro , amperímetro y para poder medir frecuencia con el lcd grafico y el problema que tengo que no logro hacer que deje de parpadear los dígitos, no se como cambiar la forma de mostrarlo ya que en cada refresco se mueven mucho y no se como hacer para que queden quietos si me pueden ayudar se agradece .
Código:
#include <16f887.h>
#device adc=10
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay (clock = 4MHz)
#include <HDM64GS12.c>
#include <graphics.c>
void main(){
int16 voltajeADC, voltajeADC_ant,
cpsADC,cpsADC_ant,
corrienteADC, corrienteADC_ant;
setup_adc_ports(san0|san1|san2|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
char cps[]="CPS";
char volt[]="V";
char amper[]="A";
char voltaje[9];
char minuto[9];
char corriente[9];
glcd_init(ON);
glcd_line(0, 40, 125, 40, ON);
glcd_text57(45,12,volt,1,off);
glcd_text57(105,12,amper,1,Off);
glcd_text57(105,55,cps,1,Off);
while(true){
set_adc_channel(0);
delay_us(20);
voltajeADC=read_adc();
if(voltajeADC_ant != voltajeADC){
delay_ms(150);
glcd_text57(5, 3, voltaje, 2, OFF);
delay_ms(100);
sprintf(voltaje, "%4.1f", (float)voltajeADC*50/1023.0);
voltaje[4] = '\0';
glcd_text57(5, 3, voltaje, 2, ON);
voltajeADC_ant=voltajeADC;
delay_ms(100);
}
set_adc_channel(1);
delay_us(20);
corrienteADC=read_adc();
if(corrienteADC_ant != corrienteADC){
glcd_text57(65, 3, corriente, 2, OFF);
delay_ms(10);
sprintf(corriente, "%4.1f", (float)corrienteADC*50/1023.0);
corriente[4] = '\0';
glcd_text57(65, 3, corriente, 2, ON);
corrienteADC_ant=corrienteADC;
}
set_adc_channel(2);
delay_us(20);
cpsADC=read_adc();
if(cpsADC_ant != cpsADC){
glcd_text57(30, 40, minuto, 3, OFF);
delay_ms(10);
sprintf(minuto, "%02.1f", (float)cpsADC*50/1023.0);
minuto[4] = '\0';
glcd_text57(30, 40, minuto, 3, ON);
cpsADC_ant=cpsADC;
}
}
}
Adjuntos
Última edición por un moderador: