ntc测温,采集回来的ad值,网上的公式很多,但是看不懂,自己做了一个仅作抛砖引玉给大家提供点思路,不喜勿喷!!!
/**************************************************/
void wendu_jisuan() //温度计算
{
unsigned int js_a1;
temp_a1 =0; //温度整数
temp_a2 =0; //温度小数
js_a1 =0;
//ntc_neibu(); //切换到内部ntc(ad通道8)
//adc_start; //启动ADC
//while(!adc_eoc){;;} //等待转换完成
js_a1 =ADCVH;
js_a1 <<=4;
js_a1 |=ADCVL>>4;
if(js_a1 <343) //小于-10无法显示
{temp_a1 =-10;}
if(js_a1 <555) //-1--9℃,每度2.1
{
js_a1 -=343;
js_a1 *=10; //放大10倍
temp_a1 =js_a1/210; //整数
temp_a1 =~temp_a1; //取反变负数
temp_a2 =(js_a1%210)/21; //小数
return;
}
if(js_a1 <831) //0-9.9℃,每度2.8
{
js_a1 -=555;
js_a1 *=10; //放大10倍
temp_a1 =js_a1/280; //整数
temp_a1 +=0; //补偿
temp_a2 =(js_a1%280)/28; //小数
return;
}
if(js_a1 <1179) //10-19.9℃,每度3.5
{
js_a1 -=831;
js_a1 *=10; //放大10倍
temp_a1 =js_a1/350; //整数
temp_a1 +=10; //补偿
temp_a2 =(js_a1%350)/35; //小数
return;
}
if(js_a1 <1587) //20-29.9℃,每度4
{
js_a1 -=1179;
js_a1 *=10; //放大10倍
temp_a1 =js_a1/400; //整数
temp_a1 +=20; //补偿
temp_a2 =(js_a1%400)/40; //小数
return;
}
if(js_a1 <2005) //30-39.9℃,每度4.1
{
js_a1 -=1587;
js_a1 *=10; //放大10倍
temp_a1 =js_a1/410; //整数
temp_a1 +=30; //补偿
temp_a2 =(js_a1%410)/41; //小数
return;
}
if(js_a1 <2405) //40-49.9℃,每度4
{
js_a1 -=2005;
js_a1 *=10; //放大10倍
temp_a1 =js_a1/400; //整数
temp_a1 +=40; //补偿
temp_a2 =(js_a1%400)/40; //小数
return;
}
if(js_a1 <2760) //50-59.9℃,每度3.5
{
js_a1 -=2405;
js_a1 *=10; //放大10倍
temp_a1 =js_a1/350; //整数
temp_a1 +=50; //补偿
temp_a2 =(js_a1%350)/35; //小数
return;
}
if(js_a1 <3072) //60-69.9℃,每度3.1
{
js_a1 -=2760;
js_a1 *=10; //放大10倍
temp_a1 =js_a1/310; //整数
temp_a1 +=60; //补偿
temp_a2 =(js_a1%310)/31; //小数
return;
}
if(js_a1 <3305) //70-79.9℃,每度2.3
{
js_a1 -=3072;
js_a1 *=10; //放大10倍
temp_a1 =js_a1/230; //整数
temp_a1 +=70; //补偿
temp_a2 =(js_a1%230)/23; //小数
return;
}
if(js_a1 <3483) //80-89.9℃,每度1.8
{
js_a1 -=3305;
js_a1 *=10; //放大10倍
temp_a1 =js_a1/180; //整数
temp_a1 +=80; //补偿
temp_a2 =(js_a1%180)/18; //小数
return;
}
if(js_a1 <3627) //90-99.9℃,每度1.4
{
js_a1 -=3483;
js_a1 *=10; //放大10倍
temp_a1 =js_a1/140; //整数
temp_a1 +=90; //补偿
temp_a2 =(js_a1%140)/14; //小数
return;
}
if(js_a1 >=3627) //大于100℃无法显示
{
temp_a1 =100;
temp_a2 =0;
}
}
/**************************************************/ //内部ntc