ADC0809和51八路NTC温度采集系统
目录
1.NTC负温度
网络上很多NTC温度转换方式,有查表之类的。由于我的这个项目对于温度准确度要求并不高,所以用一下公式转化即可满足显示要求,如需要更精确的数值,还请看看数据手册查表分析。
这里引用这位大佬的经验,转换公式也是从此的来。(所谓站在巨人肩膀上才能看的更远)感激这位大佬的分享。
https://blog.csdn.net/u013866683/article/details/79391849
2.ADC0809
仿真替代方案
proteus仿真里面用ADC0808代替ADC0809,只需要把名字给改一下就可以了,引脚也是适用的。
3.51最小系统连接图(proteus8)
4.Keil代码
这里放出关键的NTC温度转换代码
main.c
/*
const float Rp =10.0; //10K
const float Temp2 = (273.15+25.0); //T2
const float Bx = 3950.0;//B
const float Ka = 273.15;
*/
float Get_Temp(uchar channel)
{
float Rt;
float temp;
float vol;
float tempBuff=0;//返回值缓存
int showTemp;
vol = (float)(AD())*(5.04/256); //NTC电压
vol = (float)(AD())*(5.04/256); //NTC电压,ad转换要多转换一次,因为第二次读取的数才是本次使用的数值
Rt = (vol*10)/(5.04-vol); //当前温度阻值
temp = Rt/Rp;
temp = log(temp);//ln(Rt/Rp)
temp/=Bx;//ln(Rt/Rp)/B
temp+=(1/Temp2);
temp = 1/(temp);
temp-=Ka+0.5;
tempBuff = temp; //返回值缓存
if(temp<0)
{
temp = -temp; //变正取数
minFlag=1; //负值标志位
}
else
{
temp = temp;
minFlag=0;
}
showTemp = 100*temp;
disbuff[channel*4+0]=showTemp/1000; //分别取千百十个位,后面添加 '+' '-' '.';数据格式+xx.xx(-xx.xx)
disbuff[channel*4+1]=showTemp%1000/100;
disbuff[channel*4+2]=showTemp%100/10;
disbuff[channel*4+3]=showTemp%10;
return tempBuff;
}
链接:https://pan.baidu.com/s/1O64KxTIM1UwWvrY0eVqCQg
提取码:qost
如果需要代码和仿真源文件,可以留言个邮箱。
5.踩坑注意
(1)proteus8仿真ADC0809
这里我就不重复说明了,感激这位大佬的分享。简单说就是ADC0808的输出引脚序号与实际数据的高低位是相反的,即OUT8对应输出数据的最低位(LSB),OUT1对应输出数据的最高位(MSB)
https://blog.csdn.net/weixin_42098782/article/details/86503628
(2) proteus8仿真OLED
proteus器件输入LY190-128064
相应引脚接线
特此说明,由于我接的是P0口,所以用上拉电阻。