Moderadores: andre_luis, 51, guest2003, Renie
void Le_Temperatura () {
// da sub Le_Temperatura
unsigned char ch;
unsigned int adc_rd;
long tlong;
char *text;
adc_rd = ADC_Read(0); // get ADC value from 2nd channel : AN1 / RA1
LCD_Out(2,1,text); // print string a on LCD, 2nd row, 1st column
tlong = (long)adc_rd * 5000; // covert adc reading to milivolts
tlong = tlong / 1023; // 0..1023 -> 0-5000mV
ch = tlong / 1000; // extract volts digit
LCD_Chr(2,8,48+ch); // write ASCII digit at 2nd row, 9th column
ch = (tlong / 100) % 10; // extract 0.1 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point
Temp_Dez = ch; // armazena MSB temp pra monstrar 7 segmentos
ch = (tlong / 10) % 10; // extract 0.01 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point
Temp_Uni = ch; // armazena MSB temp pra monstrar 7 segmentos
LCD_Chr_CP(',');
ch = tlong % 10; // extract 0.001 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point
LCD_Chr_CP(' ');
LCD_Chr_CP('o');
LCD_Chr_CP('C');
}
marcelo campos escreveu:tenho uma abordagem prática no código abaixo, que já também separa cada dígito pra locar no LCD e nos displays de 7 segmentos do PIC CUBE:
- Código: Selecionar todos
void Le_Temperatura () {
// da sub Le_Temperatura
unsigned char ch;
unsigned int adc_rd;
long tlong;
char *text;
adc_rd = ADC_Read(0); // get ADC value from 2nd channel : AN1 / RA1
LCD_Out(2,1,text); // print string a on LCD, 2nd row, 1st column
tlong = (long)adc_rd * 5000; // covert adc reading to milivolts
tlong = tlong / 1023; // 0..1023 -> 0-5000mV
ch = tlong / 1000; // extract volts digit
LCD_Chr(2,8,48+ch); // write ASCII digit at 2nd row, 9th column
ch = (tlong / 100) % 10; // extract 0.1 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point
Temp_Dez = ch; // armazena MSB temp pra monstrar 7 segmentos
ch = (tlong / 10) % 10; // extract 0.01 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point
Temp_Uni = ch; // armazena MSB temp pra monstrar 7 segmentos
LCD_Chr_CP(',');
ch = tlong % 10; // extract 0.001 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point
LCD_Chr_CP(' ');
LCD_Chr_CP('o');
LCD_Chr_CP('C');
}
ÁgioFelipe escreveu:Pessoal, estou tendo problemas em mostrar o valor da temperatura no LCD, coloquei uma taxa de atualização do display de 60 vezes por segundo ai ele mostra a temperatura só mudando, não fica parado com um único valor. Estou usando somente 1 casa decimal, tipo:
27,5
Valeu.
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante