想問下(AD_temp_data[head]-AD_temp_data[mid])中mid不是賦值給到head,AD_temp_data[head]應該等于AD_temp_data[mid]才對啊,想請教一下大神們
*********************************************************************************************************
* 函 數(shù) 名: AD_Value_To_Temperature
* 功能說明: 折半法查表將AD值轉換為溫度值,精確到小數(shù)點后一位
* 形 參:AD采樣值
* 返 回 值: 溫度
*********************************************************************************************************
*/
const INT16U AD_temp_data[182]= //-20℃~70℃ 0.5一格
{
2792, 2784, 2776, 2768, 2761, 2752, 2744, 2736, 2727, 2718,
2710, 2700, 2691, 2682, 2672, 2663, 2653, 2643, 2632, 2622,
2612, 2601, 2590, 2579, 2568, 2556, 2545, 2533, 2521, 2509,
2497, 2484, 2472, 2459, 2446, 2433, 2420, 2407, 2393, 2379,
2364, 2350, 2336, 2322, 2307, 2293, 2278, 2263, 2248, 2233,
2218, 2202, 2187, 2171, 2156, 2140, 2124, 2108, 2092, 2076,
2061, 2044, 2027, 2010, 1993, 1977, 1960, 1943, 1926, 1909,
1893, 1876, 1859, 1842, 1825, 1807, 1790, 1773, 1756, 1739,
1722, 1705, 1687, 1670, 1653, 1636, 1619, 1602, 1585, 1568,
1551, 1534, 1517, 1500, 1484, 1467, 1450, 1434, 1417, 1401,
1385, 1368, 1352, 1336, 1320, 1304, 1288, 1273, 1257, 1241,
1226, 1211, 1195, 1180, 1165, 1150, 1135, 1121, 1106, 1092,
1078, 1064, 1049, 1036, 1022, 1008, 994 , 981 , 968 , 955 ,
942 , 929 , 916 , 904 , 891 , 879 , 866 , 854 , 842 , 829 ,
816 , 806 , 796 , 785 , 774 , 763 , 752 , 741 , 731 , 720 ,
710 , 700 , 689 , 680 , 670 , 660 , 650 , 641 , 632 , 622 ,
613 , 604 , 596 , 587 , 578 , 570 , 562 , 553 , 545 , 537 ,
529 , 522 , 514 , 506 , 499 , 492 , 484 , 477 , 470 , 463 ,
456 , 450
};
INT16U AD_Value_To_Temperature(INT16U AD_Value)
{
INT16U head, mid, tail;
INT32U Temp=0;
if((AD_Value<=2364)&&(AD_Value>450)) //正值 0-70
{//在檢測范圍內
head=40;
tail=181;
while(head<tail)
{
if((tail-head)!=1)
{//尚未在兩個相鄰范圍內
mid=(head+tail)/2;
if(AD_Value==AD_temp_data[mid])
{//AD剛好在邊界點上
Temp = (mid-40)*10/2;
break;
}
else if(AD_Value<AD_temp_data[mid])
{
head=mid;
}
else if(AD_Value>AD_temp_data[mid])
{
tail=mid;
}
}
else
{
if(AD_Value<AD_temp_data[mid]) //倍率為10
{
Temp = (head-40)*10/2;
Temp += ((AD_temp_data[head] -AD_Value)*5)/(AD_temp_data[head]-AD_temp_data[mid]); //????
}
else if(AD_Value>AD_temp_data[mid])
{
Temp = (mid-40)*10/2;
Temp += ((AD_temp_data[mid] -AD_Value)*5)/(AD_temp_data[mid]-AD_temp_data[tail]);
}
break;
}
}
}
else if((AD_Value<=2989)&&(AD_Value>2364)) //負值
{
head=0;
tail=39;
while(head<tail)
{
if((tail-head)!=1)
{//尚未在兩個相鄰范圍內
mid=(head+tail)/2;
if(AD_Value==AD_temp_data[mid])
{//AD剛好在邊界點上
Temp = 200-(5*mid);
break;
}
else if(AD_Value > AD_temp_data[mid])
{
tail=mid;
}
else if(AD_Value < AD_temp_data[mid])
{
head=mid;
}
}
else
{
if(AD_Value < AD_temp_data[mid]) //倍率為10 1度的偏移
{
Temp = 200-(5*mid);
Temp -= ((AD_temp_data[mid] - AD_Value)*5)/(AD_temp_data[mid] - AD_temp_data[tail]);
Temp += 10;
}
else if(AD_Value > AD_temp_data[mid])
{
Temp = 200-(5*head);
Temp -= ((AD_temp_data[head] -AD_Value)*5)/(AD_temp_data[head]-AD_temp_data[mid]);
Temp +=10;
}
//取補碼加1
Temp =(~Temp);
Temp +=1;
break;
}
}
}
return (Temp&0xFFFF);
}
|