再热血放送ADC中关于小数的处理
voidmain(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]