直接發代碼,中括號被吞了。這個方法本身沒有問題,數值偏差完全在于制表。這個數組的數值只是表達意圖,不可以直接引用。就算是用對分法查表,最后還得用比較和插補,你這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;//跳出當前循環
- }
- }
- }
復制代碼 |