51 ADC0809八路NTC温度采集系统(代码+仿真,OLED SPI)

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口,所以用上拉电阻。
在这里插入图片描述
在这里插入图片描述

5.效果演示图

在这里插入图片描述

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
### 回答1: NTC温度采集模块是一种使用热敏电阻作为温度传感器的模块,它可以在不同的环境温度采集到相应的电阻值,并通过微控制器进行转换,最终转化为温度值。下面是一份NTC温度采集模块的源代码,可以供参考: ``` #include <stdio.h> //定义一些必要的变量 float ADC_voltage; //定义模拟输入电压变量 float ADC_resolution = 5.0/1024; //定义ADC分辨率,单位为V/bit float ref_R = 10000; //定义电路中的参考电阻为10kΩ float R1 = 10000; //定义NTC串联电阻为10kΩ //函数-读取模拟电压 float read_ADC_voltage() { int ADC_value; //定义模拟输入值变量 float ADC_voltage; //定义模拟输入电压变量 ADC_value = analogRead(A0); //从A0模拟口读取模拟输入值 ADC_voltage = ADC_value * ADC_resolution; //将模拟输入值转换成电压 return ADC_voltage; //返回模拟输入电压 } //函数-计算NTC阻值 float calc_R_ntc(float Vout) { float R_ntc; //定义NTC电阻变量 R_ntc = (Vout * R1) / (5 - Vout); //计算NTC电阻值 return R_ntc; //返回NTC电阻值 } //函数-计算NTC温度 float calc_T_ntc(float R_ntc) { float T_ntc; //定义NTC温度变量 float k = 3950; //定义NTC热敏参数为3950 T_ntc = 1 / ((1/298.15) + (1/k) * log(R_ntc/ref_R)); //计算NTC温度 return T_ntc; //返回NTC温度 } void setup() { Serial.begin(9600); //初始化串口通讯 } void loop() { ADC_voltage = read_ADC_voltage(); //读取模拟输入电压 float R_ntc = calc_R_ntc(ADC_voltage); //计算NTC电阻值 float T_ntc = calc_T_ntc(R_ntc); //计算NTC温度值 Serial.print("NTC电阻值:"); //输出NTC电阻值 Serial.print(R_ntc); Serial.print("Ω,NTC温度值:"); //输出NTC温度值 Serial.print(T_ntc); Serial.println("℃"); delay(1000); //延时1秒,间隔采集 } ``` 这份代码主要通过模拟口A0读取模拟输入电压,并通过计算得到NTC电阻值和NTC温度值,最终通过串口输出给上位机。在使用过程中,需要注意电路中的参考电阻和NTC串联电阻的数值,以及NTC热敏参数的正确设置,才能得到准确的温度采集结果。 ### 回答2: NTC温度采集模块源代码通常由两部分组成:硬件驱动代码温度采集控制代码。 硬件驱动代码主要是针对硬件进行操作的代码,包括IO口的配置、定时器的设置、ADC模块的初始化和配置等等。在这部分代码中,需要根据具体的硬件类型和接口规范进行编写,以确保能够与NTC温度采集模块正常通讯。 温度采集控制代码主要是针对NTC温度传感器进行操作的代码。这部分代码一般包含了温度转换函数、温度采集周期控制函数、温度算法函数等。温度转换函数用于将传感器采集到的电压值转换为具体的温度值,采集周期控制函数用于控制温度采集的频率和间隔时间,温度算法函数则用于进行温度补偿、温度校准等处理。 在具体编写NTC温度采集模块源代码时,需要根据实际采集场景考虑相应的硬件和软件设计方案,以确保温度数据的准确性和稳定性。同时,还需要进行充分的测试和验证,以保证源代码的可靠性和稳定性。 ### 回答3: NTC温度采集模块是一种应用广泛的温度测量设备,其源代码通常由C语言编写。下面是一段可能的NTC温度采集模块源代码: ```c #include <stdio.h> #include <math.h> float calculate_ntc_temperature(float Rntc, float Rref, float B) { // Calculate temperature using Steinhart-Hart equation float T0 = 25.0; // Reference temperature float K0 = 273.15; // Absolute zero temperature float r_inf = Rref * exp(-B / T0); // Resistance at reference temperature float t = (B / log(Rntc / r_inf)) - K0; // Temperature in Celsius return t; } int main() { float Rntc = 1000.0; // NTC resistance in ohms float Rref = 10000.0; // Reference resistance in ohms float B = 3950.0; // Beta value for NTC float temperature = calculate_ntc_temperature(Rntc, Rref, B); printf("NTC temperature: %.2f C\n", temperature); return 0; } ``` 该程序定义了一个名为calculate_ntc_temperature的函数,该函数的输入参数是NTC电阻值Rntc、参考电阻值Rref和Beta值B,输出参数为计算得到的温度值。该函数的计算方法基于Steinhart-Hart方程,旨在将给定电阻值转换为温度值。main函数则定义了一些用于测试calculate_ntc_temperature函数的变量,并将计算得到的温度值输出到控制台窗口。需要注意的是,实际使用中,该源代码将会与其他代码一起编写为一个完整的程序,并通过外部硬件设备读取NTC电阻值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值