单片机实验13:用热敏电阻和ADC实现测量温度

本文详细描述了一次使用XPT2046芯片的实验过程,涉及数据读写、温度测量及数码管显示的实现。作者分享了实验中的困难、解决方案,以及对无符号整型处理的反思和改进措施。

实验中使用的芯片为XPT2046,点击了解XPT2046

实验源代码:

  • XPT2046.h
#include <reg52.h>				
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char

sbit DIN = P3^4;		 	
sbit ADCS = P3^5;
sbit DCLK = P3^6;
sbit DOUT = P3^7;
				 
sbit led2 = P2^2;
sbit led3 = P2^3;
sbit led4 = P2^4;

void WRITE_AD(uchar dat);	//写入数据函数声明
uint READ_AD();				//读取数据函数声明
uint LOAD_AD(uchar cmd);	//载入数据函数声明
  • XPT2046.C
#include "XPT2046.h"	   //引入头文件

void WRITE_AD(uchar dat)   //写入数据函数定义
{
   
   
	uchar i;
	DCLK = 0;
	for(i=0; i<8; i++)	   //对8位数据进行操作
	{
   
   
		DIN = dat >> 7;	   //将dat右移7位,将最高位置于数据读取位	
		dat <<= 1;		   //再将dat左移一位,这时dat本身才发生变化
		DCLK = 0;			
		DCLK = 1;
	}
}

uint READ_AD()			   //读取数据函数定义
{
   
   
	uint i, dat=0;
	DCLK = 0;
	for(i=0; i
51单片机实现NTC热敏电阻ADC电压测量时,原理基于NTC热敏电阻的阻值随温度变化的特性,通过电阻分压将温度变化转化为电压变化,再由单片机的AD采样口采集电压值,最后推算出温度值。 在方法上,首先要设计NTC热敏电阻的采样电路,使用最简的电阻分压电路,把热敏电阻一个10K电阻串联分压,将得到的电压值直接送到单片机的AD采样口。由于热敏电阻阻值随温度变化,送入单片机口的电压值也会随之改变,这样就能通过单片机AD口采样的电压值来推算当前温度值 [^1]。 利用AT89C51作为主控,74HC573作为数码管驱动芯片,六位共阴数码管用于显示。借助独立按键实现用户交互,可进行温度/电压二者之间的转换。利用8位LED进行状态显示,通过IIC驱动PCF8591进行ADC获取数值DAC模拟输出,最终通过NTC热敏电阻的特性转换成温度值。通过ADC转换进行电压输入模拟输出,实现测量电压越高,输出电压越高 [^3]。 在获取温度值时,可通过网上查找所选用NTC对应的R - T对照表(温度阻值对照表)。根据R - T表绘制的曲线图可知其为非线性曲线,较难求解。此时采用曲线拟合的方法,将其划分成很多个区间,每个区间可近似看作一段小直线,类似于分段函数,区间划分得越多结果越精确。只要知道NTC的阻值,找到对应的区间,带入一元一次方程求解就能计算出对应的温度值。NTC的阻值可通过单片机ADC采集100K电阻两端电压,再根据电阻分压算出 [^5]。 以下为示例代码(仅示意,实际可能需根据情况调整): ```c #include <reg51.h> // 假设这里定义ADC采集函数,函数返回值为采集到的电压对应的数字量 unsigned int ADC_Read() { // 这里省略实际的ADC读取代码 return 0; // 示意返回值 } // 假设这里是根据采集到的数字量计算温度的函数 float Calculate_Temperature(unsigned int adc_value) { // 这里省略根据R-T表曲线拟合计算温度的代码 return 0.0; // 示意返回值 } void main() { unsigned int adc_value; float temperature; while(1) { adc_value = ADC_Read(); temperature = Calculate_Temperature(adc_value); // 这里可以添加显示温度的代码 } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值