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);}如上程序所示,我當(dāng)時覺得程序有問題,因為一個float型的temp賦值給了整型adcx.其實這樣是可以的。
temp賦值給adcx,最終adcx的值是temp取整后的數(shù)值,而且temp的值不會發(fā)生改變。
賦值兼容的原則“就左不就右”
如果float a,int b;
a=2; b=2.037;
則最后的結(jié)果是a=2.000,b=2;
上述例子很好的利用了這一特性進(jìn)行了ad采樣時的顯示數(shù)據(jù)的問題。
先把采樣值temp的整數(shù)部分賦值給adcx,通過顯示函數(shù)出來
然后temp-adcx從而得到小數(shù)部分,小數(shù)部分乘以1000,變成整數(shù)從而再通過顯示函數(shù)顯示出來