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,变成整数从而再通过显示函数显示出来