u16 adcx;float temp;while(1)
{ adcx=Get_Adc(ADC_CH0);LCD_ShowNum(156,130,adcx,4,16);//显示ADC的值temp=(float)adcx*(3.3/4096);adcx=temp;LCD_ShowNum(156,150,adcx,1,16);//显示电压值temp-=adcx;temp*=1000;LCD_ShowNum(172,150,temp,3,16);LED0=!LED0;delay_ms(250);}如上程序所示,我当时觉得程序有问题,因为一个float型的temp赋值给了整型adcx.其实这样是可以的。
temp赋值给adcx,最终adcx的值是temp取整后的数值,而且temp的值不会发生改变。
赋值兼容的原则“就左不就右”
如果float a,int b;
a=2; b=2.037;
则最后的结果是a=2.000,b=2;
上述例子很好的利用了这一特性进行了ad采样时的显示数据的问题。
先把采样值temp的整数部分赋值给adcx,通过显示函数出来
然后temp-adcx从而得到小数部分,小数部分乘以1000,变成整数从而再通过显示函数显示出来
站长资讯网