51单片机利用NTC接下拉10K电阻计算当前温度值的程序
时间: 2023-12-23 07:05:45 浏览: 142
假设NTC的阻值与温度成反比例关系,可以使用下面的代码来计算当前温度值:
```
#include <reg51.h>
sbit NTC = P1^0;
unsigned int getTemperature()
{
unsigned int adcValue;
float voltage, resistance, temperature;
ADC_CONTR = 0x81; // 打开ADC,并设置输入通道为P1.0
delay(100); // 等待ADC稳定
ADC_CONTR = 0x91; // 启动ADC转换
while (!(ADC_CONTR & 0x10)); // 等待ADC转换完成
adcValue = ADC_RES; // 读取ADC结果
voltage = adcValue * 5.0 / 1024.0; // 将ADC值转换为电压值
resistance = 10000.0 * (5.0 - voltage) / voltage; // 根据电压值计算NTC电阻值
temperature = 1.0 / (1.0 / 298.15 + 1.0 / 3950.0 * log(resistance / 10000.0)); // 计算温度值
return (unsigned int)temperature;
}
void delay(unsigned int cnt)
{
unsigned int i, j;
for (i = 0; i < cnt; i++)
for (j = 0; j < 110; j++);
}
void main()
{
unsigned int temperature;
while (1)
{
temperature = getTemperature();
// 将温度值通过串口发送到上位机
// ...
delay(1000); // 每隔1s采集一次温度值
}
}
```
需要注意的几点:
1. 在计算NTC电阻值时,使用了10K的下拉电阻,因此计算公式中的分母为10000.0。
2. 在计算温度值时,使用了NTC的B值(3950),以及常温下的电阻值(298.15K)。
3. 代码中使用了定时器延时函数,可以根据实际需要调整延时时间。
阅读全文