1 #include "led.h" 2 #include "delay.h" 3 #include "key.h" 4 #include "sys.h" 5 #include "lcd.h" 6 #include "usart.h" 7 #include "adc.h" 8 #include "stdio.h" 9 10 11 int main(void) 12 { 13 14 u16 adcx,adcy,adcz; 15 float temperature; 16 delay_init(); 17 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 18 uart_init(115200); 19 LED_Init(); 20 Adc_Init(); 21 while(1) 22 { 23 temperature=Get_Adc_Average(ADC_Channel_15,1); 24 25 printf("\r\nAD值:%f\r\n\r\n",temperature); 26 //LCD_ShowxNum(156,130,adcx,4,16,0); 27 temperature=(float)temperature*(3.3/4096)+0.05;//這個0.05可能是因為之前單片機上一直顯示這個電壓值,當除去
//那兩個電阻時,結果電壓卻少了0.05,因此就加上了0.05了 28 29 printf("\r\n電壓值:%f\r\n\r\n",temperature); 30 temperature=(1.43-temperature)/0.0043+25; 31 adcx=temperature; 32 printf("\r\n溫度值:%d\r\n\r\n",adcx); 33 //LCD_ShowxNum(156,150,adcx,1,16,0);34 //temp-=adcx; 35 //temp*=1000; 36 //LCD_ShowxNum(172,150,temp,3,16,0X80); 37 LED2=!LED2; 38 delay_ms(1000); 39 } 40 } 41 42
最后的結果為:
在對着NTC溫度表示,你會感到詫異,我現在在的環境是室內。對照表結果只有AD值比較符合現在的環境溫度。
可能是我上面的計算溫度出了問題。然后我百度查了下說非線性的是不能通過計算得到結果的,因此只能查表了。
但對於AD值和電壓值是沒有錯的,不過溫度傳感器的電阻怎么變化,電壓值都能對應得上。對於配置ADC就不用
多說吧。不懂得話可以多看下有關ADC的資料。