直接发代码,中括号被吞了。这个方法本身没有问题,数值偏差完全在于制表。这个数组的数值只是表达意图,不可以直接引用。就算是用对分法查表,最后还得用比较和插补,你这5度进阶已经无精度可言。代码补充完整如下:
- u16 Tepmi=0;//AD采样值
- u8 Tempera=0;//得出温度值
- u16 code T_value[27]={
- 868 ,// 25
- 832 ,// 30
- 792 ,// 35
- 748 ,// 40
- 700 ,// 45
- 650 ,// 50
- 598 ,// 55
- 547 ,// 60
- 496 ,// 65
- 447 ,// 70
- 400 ,// 75
- 357 ,// 80
- 317 ,// 85
- 281 ,// 90
- 248 ,// 95
- 218 ,// 100
- 192 ,// 105
- 169 ,// 110
- 149 ,// 115
- 131 ,// 120
- 116 ,// 125
- 102 ,// 130
- 90 ,// 135
- 80 ,// 140
- 71 ,// 145
- 63 ,// 150
- 51 };
- void Tems_otk(void)
- {
- u8 i;
- for(i=0;i<25;i++)
- {
- if(Tepmi>=T_value[0])
- {
- Tempera=25;
- break;//跳出当前循环
- }
- else if(Tepmi<=T_value[i] && Tepmi>=T_value[i+1])
- {
- Tempera=i*5+25;
- break;//跳出当前循环
- }
- }
- }
复制代码 |