基于STC12C5A60S2系列1T 8051单片机的数码管显示模数芯片ADC0832采样NTC热敏电阻传感器电压推算NTC热敏电阻传感器电阻实现NTC热敏电阻传感器电阻对比温度进行测温

本文介绍了如何利用STC12C5A60S2系列1T 8051单片机配合模数转换芯片ADC0832,通过采集NTC热敏电阻传感器电压,计算电阻值,并根据预设的B值表格推算出对应温度,从而实现温度测量。详细探讨了不同阻值和B值的NTC热敏电阻在25℃下的电阻-温度关系。
摘要由CSDN通过智能技术生成

STC12C5A60S2系列1T 8051单片机管脚图

在这里插入图片描述在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置

在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍

在这里插入图片描述在这里插入图片描述

模数芯片ADC0832介绍

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

通过数码管显示模数芯片ADC0832采样NTC热敏电阻传感器电压推算NTC热敏电阻传感器电阻实现NTC热敏电阻传感器电阻对比温度进行测温功能

NTC热敏电阻传感器不同阻值不同B值下的电阻阻值与温度对应表

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

Rp(25℃下的阻值))= 5K Bx(B值) = 3470

在这里插入图片描述

Rp(25℃下的阻值))= 5K Bx(B值) = 3950

在这里插入图片描述在这里插入图片描述

Rp(25℃下的阻值))= 10K Bx(B值) = 3380

在这里插入图片描述

Rp(25℃下的阻值))= 10K Bx(B值) = 3435

在这里插入图片描述

Rp(25℃下的阻值))= 10K Bx(B值) = 3950

在这里插入图片描述

Rp(25℃下的阻值))= 15K Bx(B值) = 3950

在这里插入图片描述

Rp(25℃下的阻值))= 20K Bx(B值) = 3950

在这里插入图片描述

Rp(25℃下的阻值))= 50K Bx(B值) = 3950

在这里插入图片描述

Rp(25℃下的阻值))= 100K Bx(B值) = 3950

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
main.c

#include "STC12C5A60S2.h"
#include "Timer0.h"
//#include "Timer1.h"
//#include "Key.h"
#include "Digitron.h"
#include "ADC0832.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint
//uchar AnalogDataResult = 0;//定义模拟量数字结果变量为0 即模拟量转十进制数变量
//uchar AnalogSamplingCount = 0;//定义模拟采样计数变量为0
//uint OutPutVoltage = 0;//定义输出电压变量为0
//uint AnalogFilterVoltage = 0;//定义模拟滤波电压变量为0
//uint AnalogFilterOutPutVoltage = 0;//定义模拟滤波后输出电压变量为0
  void main(void)//主函数
{
   
   Timer0Init();//定时器0初始化函数
//   Timer1Init();//定时器1初始化函数  
//	 ADC0832Init();//ADC0832初始化函数
   DigitronBootDisplay();//数码管开机显示函数
   while(1)//主循环
 {
   	
//	  AnalogDataResult = ADC0832Change();//ADC0832转化函数转化的模拟量十进制数赋给模拟量数字结果变量 即模拟量转十进制数变量
//    OutPutVoltage = (AnalogDataResult * 1.0 * 5 / 255) * 1000;//输出电压计算公式 5是基准电压5V 255是模数芯片ADC0832内部八位模拟转换寄存器储存的最大数值 为啥乘以1000? 由于输出电压是用四位数码管来显示 需要乘以1000来把输出电压变成四位数在四位数码管上分解显示出来
    DigitronDisplayDataSplit();//数码管显示数据分解函数
//    DigitronDisplayData();//数码管显示数据函数
//    KeyScan();//按键扫描函数 该函数放在定时器定时2ms的中断函数中扫描
//	  KeyScanResult();//按键扫描结果函数
//    AnalogFilterVoltage = AnalogFilterVoltage + OutPutVoltage;//模拟滤波电压变量
//    AnalogSamplingCount++;//模拟采样计数变量自加1
//    if(AnalogSamplingCount >= 8)//模拟采样计数变量计8次
//  {
   
//     AnalogFilterOutPutVoltage = AnalogFilterVoltage >> 3;//模拟滤波电压变量右移三位 表示模拟滤波电压变量除以8取平均滤波后的输出电压
//     AnalogSamplingCount = 0;//模拟采样计数变量清0
//     AnalogFilterVoltage = 0;//模拟滤波电压变量清0  
//    }
   }
  }

NTC10KB3435.c

#include "NTC10KB3435.h"
#include "ADC0832Filter.h"
#include "ADC0832.h"
#include "math.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uin
uchar AnalogDataResult = 0;//定义模拟量数值变量
float Rt = 0,NTCTemperature = 0,NTCOutPutVoltage = 0;//定义NTC当前阻值变量、NTC当前温度变量、NTC当前电压变量
float Rp = 10000;//定义NTC在25℃的阻值 这里是10K
float Bx = 3435;//定义NTC的B值
float T3 = 273.15;//定义开尔文温度 等于273.15+NTC当前摄氏度T
float T4 = 273.15+25;//定义开尔文温度 等于273.15+摄氏度25
 float GetNTCTemperature()//获取NTC温度函数
{
   
  AnalogDataResult = ADC0832Change();//ADC0832转化函数转化的模拟量十进制数赋给模拟量数字结果变量 即模拟量转十进制数变量
//	AnalogDataResult = FliterMiddle();//模拟量数值取中间值滤波采样
  NTCOutPutVoltage = (float)(AnalogDataResult) * (5.0 / 255.0);//模拟量转化成数字量 即电压模拟量转化成电压数字量 NTCOutPutVoltage = (float)(AnalogDataResult) * (5.0 / 255.0)是咋么算的?根据电压数字量 / 模拟量数值 = 5V电压 / 5V电压分成255份来算的 即NTCOutPutVoltage / AnalogDataResult = 5.0 / 255 转化后可得NTCOutPutVoltage = (float)(AnalogDataResult) * (5.0 / 255.0)
  Rt = NTCOutPutVoltage * 1000 / (5.0 -  NTCOutPutVoltage);//Rt = NTCOutPutVoltage * 1000 / (5.0 -  NTCOutPutVoltage)是咋么算的?其中1000是NTC串联的电阻1K 5是基准电压5V 根据NTC与串联电阻串联电流相等 即(基准电压-NTC当前电压) / 串联电阻阻值 = NTC当前电压 / NTC当前阻值 基准电压取5V 串联电阻阻值取1k 由此可得(5. 0 - NTCOutPutVoltage) / 1000 = NTCOutPutVoltage / Rt 转化可得Rt = NTCOutPutVoltage * 1000 / (5.0 - NTCOutPutVoltage)
  NTCTemperature = 1 / (1 / T4 + log( Rt / Rp) / Bx) - T3 - 2;//减2是为了减少温度误差 由NTC当前阻值与NTC当前温度计算公式:Rt = Rp * EXP(Bx * ( 1 / T3 - 1 / T4))转换可得T1 = 1 /(ln(Rt / Rp )/ Bx + 1 / T4) 其中Rt是NTC在T3温度下的阻值 Rp是NTC常温下标称阻值 EXP是e的n次方 Bx是NTC的B值 T3是开尔文温度273.15 + NTC当前摄氏度T T4是开尔文温度等于273.15 + 摄氏度25 其中T3 = 273.15 + NTC当前摄氏度T T4 = 273.15 + 摄氏度25 由此可换算成273.15 + T = 1 /(ln(Rt / Rp )/ Bx + 1 / T4)进一步转换成T = [ 1 /(ln(Rt / Rp )/ Bx + 1 / T4)] - 273.15 再次转换可得T = [ 1 /(log(Rt / Rp )/ Bx + 1 / T4)] - 273.15 代入数据可得T = [1 / (log(Rt / 10000)/ 3950 + 1 / (273.15 + 25))] - 273.15
  return NTCTemperature;//返回NTC温度变量值
 }

NTC10KB3435.h

#ifndef __NTC10KB3435_H__
#define __NTC10KB3435_H__
#include "STC12C5A60S2.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值