欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2246|回復(fù): 3
收起左側(cè)

關(guān)于NTC溫度二分查表法的單片機(jī)程序問題

[復(fù)制鏈接]
ID:602776 發(fā)表于 2021-6-25 10:41 | 顯示全部樓層 |閱讀模式
想問下(AD_temp_data[head]-AD_temp_data[mid])中mid不是賦值給到head,AD_temp_data[head]應(yīng)該等于AD_temp_data[mid]才對啊,想請教一下大神們

*********************************************************************************************************
*        函 數(shù) 名: AD_Value_To_Temperature
*        功能說明: 折半法查表將AD值轉(zhuǎn)換為溫度值,精確到小數(shù)點(diǎn)后一位
*        形    參: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
                       
    {//在檢測范圍內(nèi)
        head=40;
        tail=181;
        while(head<tail)
        {
            if((tail-head)!=1)
            {//尚未在兩個(gè)相鄰范圍內(nèi)
                mid=(head+tail)/2;
                if(AD_Value==AD_temp_data[mid])
                {//AD剛好在邊界點(diǎn)上
                    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))  //負(fù)值
    {
        head=0;
        tail=39;
        while(head<tail)
        {
            if((tail-head)!=1)
            {//尚未在兩個(gè)相鄰范圍內(nèi)
                mid=(head+tail)/2;
                if(AD_Value==AD_temp_data[mid])
                {//AD剛好在邊界點(diǎn)上
                    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;

                }
                //取補(bǔ)碼加1
                Temp =(~Temp);
                Temp +=1;
                break;
            }
        }
    }

    return (Temp&0xFFFF);
}



回復(fù)

使用道具 舉報(bào)

無效樓層,該帖已經(jīng)被刪除
ID:808485 發(fā)表于 2021-6-25 17:50 | 顯示全部樓層
我覺得你說的對
回復(fù)

使用道具 舉報(bào)

ID:718725 發(fā)表于 2021-6-27 14:33 | 顯示全部樓層
做溫度檢測不錯(cuò)的
回復(fù)

使用道具 舉報(bào)

ID:602776 發(fā)表于 2021-6-28 15:41 | 顯示全部樓層
這個(gè)程序還是有問題,剛才本人調(diào)試了一下,會(huì)出現(xiàn)AD_temp_data[head]等于AD_temp_data[mid]情況,但是程序沒有跑死
回復(fù)

使用道具 舉報(bào)

6#
無效樓層,該帖已經(jīng)被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表