winnie 发表于 2009-3-7 23:20:09

再热血放送ADC中关于小数的处理

void
main(void){

int HEX_ADCValue;
int BCD_ADCValue;
int volt;
int int_temp;
double temp;
double double_temp;

      PowerInitial();                                                                           //上电初始化

      while(1){
                NOP;                                                                        //便于设置断点观察
                HEX_ADCValue = ReadADC();                                    //读取AD数据
                NOP;
                temp            = (double)HEX_ADCValue;                     //double可以提高运算精度
                double_temp   = temp*VREF/1023;                           //VREF表示参考电压
                NOP;
                int_temp         = (int)(double_temp*PRECISION);      //两位精度(PRECISION)就是 * 100
                volt                = HEX2BCD(int_temp);                        //转换为BCD码,用于显示
                NOP;
      }      
}

在这条语句中,对小数点后的个数进行了定义

(PRECISION若等于10,则表示一位小数位;100则是二位小数位;1000是三位小数位)
先将所要的数,包括小数位移到整数位(也就是乘以10的倍数), 然后再取整.便可得到所需数据!

                int_temp                   = (int)(double_temp*PRECISION);      //两位精度(PRECISION)就是 * 100
页: [1]
查看完整版本: 再热血放送ADC中关于小数的处理