- 说明:
- 二分查找法的优点:查找速度快 1024个长度的表最长只需10次查表就能得出结果
- 在用NTC测试温度的方案中,NTC的温度表的长度一般是100-200 有些达到400-500的长度
- 在这种情况下如果用逐个查表比较的方法来查温度 会导致查表的时间过长,影响程序的
- 执行效率 这里推出一个优秀的算法来取代这种最笨的做法
- 应用实例如下:
- #define TempSize 100 //定义表长度
- //温度值对应的AD值的表的定义
- const int16 TabNtc_100K[TempSize]={0xf00,0xe00,oxd00,……};
- int16 *pTmp ; //定义一个字长的指针
- pTmp = TabNtc_100K ; //指向要温度表的地址
- CuTemp = FineTab(pTmp,TempSize,R_NTCAD); //查表得出温度 R_NTCAD为NTC分压得出的AD值
- ********************************************/
-
- //*************************************
- // 函数名称:FineTab 二分查找算法 ->查温度表
- // 函数功能:查找数据在表中对应的位置 表中数据从大到小
- // 入口参数:表地址、表长度、要查找的数据
- // 出口参数:无
- // 返 回 值:数据在表中的位置
- //*************************************
- uint8 FineTab(uint16 *a,uint8 TabLong,uint16 data)//表中数据从大到小
- {
- uint8 st,ed,m ;
- uint8 i ;
- st = 0 ;
- ed = TabLong-1 ;
- i = 0 ;
- if(data >= a[st]) return st ;
- else if(data <= a[ed]) return ed ;
- while(st < ed)
- {
- m = (st+ed)/2 ;
- if(data == a[m] ) break ;
- if(data < a[m] && data > a[m+1]) break ;
- if(data > a[m]) ed = m ;
- else st = m ;
- if(i++ > TabLong) break ;
- }
- if(st > ed ) return 0 ;
- return m ;
- }
- //*************************************
- // 函数名称:FineTab 二分查找算法 ->查温度表
- // 函数功能:查找数据在表中对应的位置 表中数据从小到大
- // 入口参数:表地址、表长度、要查找的数据
- // 出口参数:无
- // 返 回 值:数据在表中的位置
- //***************************************
- uint8 FineTab(uint16 *a,uint8 TabLong,uint16 dat)//表中数据从小到大
- {
- uint8 st,ed,m ;
- uint8 i ;
- st = 0 ;
- ed = TabLong-1 ;
- i = 0 ;
- if(dat >= a[ed]) return ed ;
- else if(dat <= a[st]) return st ;
- while(st < ed)
- {
- m = (st+ed)/2 ;
- if(dat == a[m] ) break ;
- if(dat < a[m+1] && dat > a[m]) break ;
- if(dat > a[m]) st = m ; //ed = m ;
- else ed = m ;//st = m ;
- if(i++ > TabLong) break ;
- }
- if(st > ed ) return 0 ;
- return m ;
- }
NTC测温中 经典温度查表算法--二分查找法
原文作者:查找算法
原文地址: https://blog.csdn.net/wzk456/article/details/78963678
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/wzk456/article/details/78963678
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。