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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:602776 發表于 2021-6-25 10:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
想問下(AD_temp_data[head]-AD_temp_data[mid])中mid不是賦值給到head,AD_temp_data[head]應該等于AD_temp_data[mid]才對啊,想請教一下大神們

*********************************************************************************************************
*        函 數 名: AD_Value_To_Temperature
*        功能說明: 折半法查表將AD值轉換為溫度值,精確到小數點后一位
*        形    參: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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产一区二区三区四区在线 | 欧美精品一区在线观看 | 欧美日韩一区二区在线观看 | 一区二区免费在线观看 | 国产午夜精品视频 | 国产精品久久久久久久白浊 | 日韩三级在线 | 精品久久久久久久久久久久久 | 日韩精品成人av | 不卡一区| 久久一区二区三区四区五区 | 91视视频在线观看入口直接观看 | 一区二区三区在线播放 | 91成人精品 | 一区二区三区免费 | 91精品国产日韩91久久久久久 | 欧美乱码精品一区二区三区 | 欧美精品一区二区三区一线天视频 | 午夜噜噜噜| 欧美日韩中文在线观看 | 久久中文字幕一区 | 欧洲精品一区 | 日韩欧美在线视频 | 99在线精品视频 | 国产精品欧美一区二区 | 激情黄色在线观看 | 99精品视频免费在线观看 | 日本免费一区二区三区视频 | 国产区一区二区三区 | 看真人视频一级毛片 | 成人三级av | 男女污网站| 久久精品国产久精国产 | 一道本不卡视频 | 免费在线观看毛片 | 最近中文字幕免费 | 国产一区二区三区在线 | av香港经典三级级 在线 | 国产福利视频 | 欧美综合一区 | 国产精品精品久久久久久 |