NTC测温中经典温度查表算法--二分查法

NTC测温中经典温度查表算法--⼆分查法
01. /*******************************************
02.
03. 说明:
04.
05. ⼆分查法的优点:查速度快 1024个长度的表最长只需10次查表就能得出结果
06. 在⽤NTC测试温度的⽅案中,NTC的温度表的长度⼀般是100-200 有些达到400-500的长度
07. 在这种情况下如果⽤逐个查表⽐较的⽅法来查温度会导致查表的时间过长,影响程序的
08. 执⾏效率这⾥推出⼀个优秀的算法来取代这种最笨的做法
09.
10. 应⽤实例如下:
11.我和动物交朋友
12. #define TempSize  100 //定义表长度
13. //温度值对应的AD值的表的定义
乙烯基三乙氧基硅烷14. const int16 TabNtc_100K[TempSize]={0xf00,0xe00,oxd00,......};
15.
16. int16 *pTmp ; //定义⼀个字长的指针
17.
18. pTmp = TabNtc_100K ; //指向要温度表的地址
19. CuTemp = FineTab(pTmp,TempSize,R_NTCAD); //查表得出温度 R_NTCAD为NTC分压得出的AD值
20.
四川文理学院学报21.
22. ********************************************/
23.
01. //*************************************
02. // 函数名称:FineTab  ⼆分查算法 ->查温度表
03. // 函数功能:查数据表中对应的位置表中数据从⼤到⼩
04. // ⼊⼝参数:表地址、表长度、要查的数据
05. // 出⼝参数:⽆
06. // 返回值:数据在表中的位置
07. //*************************************
08. uint8 FineTab(uint16 *a,uint8 TabLong,uint16 data)//表中数据从⼤到⼩
09. {
10.    uint8 st,ed,m ;
11.    uint8 i ;
12.
13.    st = 0 ;
14.    ed = TabLong-1 ;
15.    i = 0  ;
16.
17. if(data >= a[st]) return st ;
18. else if(data <= a[ed]) return ed ;
19.
20. while(st < ed)
21.    {
22.        m = (st+ed)/2 ;铸轧
23.
24. if(data == a[m] ) break ;
25. if(data < a[m] && data > a[m+1]) break ;
26.
27.
28. if(data > a[m])  ed = m ;
29. else st = m ;
30.
31. if(i++ > TabLong) break ;
32.    }
33.
34. if(st > ed ) return 0 ;温州医学院王静门
35.
36. return m ;
37. }
38.
39.
40. //*************************************
41. // 函数名称:FineTab  ⼆分查算法 ->查温度表
42. // 函数功能:查数据在表中对应的位置表中数据从⼩到⼤
43. // ⼊⼝参数:表地址、表长度、要查的数据
44. // 出⼝参数:⽆
45. // 返回值:数据在表中的位置
46. //***************************************
47.
48. uint8 FineTab(uint16 *a,uint8 TabLong,uint16 dat)//表中数据从⼩到⼤
49. {
50.        uint8 st,ed,m ;
51.        uint8 i ;
52.
53.        st = 0 ;
54.        ed = TabLong-1 ;
55.        i = 0  ;
56.
57. if(dat >= a[ed]) return ed ;
58. else if(dat <= a[st]) return st ;
59.
60. while(st < ed)
61.        {
62.            m = (st+ed)/2 ;
63.
64. if(dat == a[m] ) break ;
65. if(dat < a[m+1] && dat > a[m]) break ;
66.
67.
68. if(dat > a[m]) st = m ;  //ed = m ;
69. else ed = m ;//st = m ;
70.
71. if(i++ > TabLong) break ;
72.        }
73.
74. if(st > ed ) return 0 ;
75.
76. return m ;
77.
奉化市实验小学78. }

本文发布于:2024-09-21 03:33:34,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/397729.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:第八章 查
标签:数据   查找   表中   查表   温度   地址
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议