void adc_isr(void)
{
ADMUX =0x46;//选择内部AVCC为基准
temp_single=ADC&0x3ff;//temp_single数据类型unsigned int
temp_single=(unsigned long)((unsigned long)(temp_single*50/0x3ff)-24);//VREF定义为50,参考电压为5V,直流偏置为2.4V。
temp_sum = temp_sum + temp_single*temp_single;//temp_sum数据类型unsigned long。
if(flag==64)
{
adc_rel=(unsigned int)((unsigned long)(sqrt((temp_sum)/64))*750);
flag = 0;
temp_sum = 0;
}
}
电路图如左边,功能是实现实时显示市电的电压。 问题:数码管一直显示225.0V不会动,用万用表测限流电阻端电压为0.299~0.302之间变换,我感觉是数据处理temp_single=(unsigned long)((unsigned long)(temp_single*50/0x3ff)-24);这句的问题。我感觉是只能采集3的整型数据,怎么才能处理成2.99~3.02这样的小数点后面两位,求大神指导。
|