久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1940|回復: 3
打印 上一主題 下一主題
收起左側

關于NTC溫度二分查表法的單片機程序問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:602776 發(fā)表于 2021-6-25 10:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
想問下(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);
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:808485 發(fā)表于 2021-6-25 17:50 | 只看該作者
我覺得你說的對
回復

使用道具 舉報

板凳
ID:718725 發(fā)表于 2021-6-27 14:33 | 只看該作者
做溫度檢測不錯的
回復

使用道具 舉報

地板
ID:602776 發(fā)表于 2021-6-28 15:41 | 只看該作者
這個程序還是有問題,剛才本人調試了一下,會出現(xiàn)AD_temp_data[head]等于AD_temp_data[mid]情況,但是程序沒有跑死
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 操久久 | 亚洲精品粉嫩美女一区 | 欧美日韩中文国产一区发布 | 男女羞羞视频在线免费观看 | 亚洲视频一区 | 精品国产一区二区国模嫣然 | 在线精品国产 | 日韩一区二区三区在线观看视频 | 日韩在线精品视频 | 国产一区二区三区四区五区3d | 午夜a v电影 | 九九视频在线观看视频6 | 国产男女猛烈无遮掩视频免费网站 | 中文字幕不卡在线观看 | 精品视频一区二区 | 欧美精品欧美精品系列 | 久久免费国产 | 一级二级三级黄色 | 日韩蜜桃视频 | 午夜精品福利视频 | 蜜桃视频在线观看免费视频网站www | 精品一区二区视频 | 成人国产午夜在线观看 | 亚洲国产一区二区三区 | 久久性av| 久久精品亚洲欧美日韩久久 | 久久久久久一区 | 久久久久国产精品一区二区 | 不卡的av在线 | 国产精品久久久久久亚洲调教 | 亚洲大片在线观看 | 亚洲超碰在线观看 | 97超碰人人| 国产在线精品一区二区 | 中文字幕亚洲区 | 亚洲午夜精品 | 婷婷久久一区 | 精品国产99 | 一级特黄网站 | 女同av亚洲女人天堂 | 亚洲精品v |