设计与开发

基于单片机的温度测量 使用单片机进行温度测量

小编 2024-10-13 设计与开发 23 0

使用单片机进行温度测量

要实现温度监测,首先需要连接温度传感器到单片机,并读取传感器输出的模拟信号。通常使用的温度传感器是模拟输出的,可以选择使用模拟输入引脚(比如ADC引脚)来读取传感器信号。

以下是一个示例程序,演示如何在8051单片机上通过ADC读取温度传感器的模拟信号,并将其转换为温度值进行显示:

```c

#include <8051.h>

// 函数声明

void delay_ms(unsigned int milliseconds);

void init_adc();

unsigned char read_adc();

// 延时函数,单位为毫秒

void delay_ms(unsigned int milliseconds) {

while (milliseconds) {

unsigned int count = 12000; // 根据实际情况调整循环次数

while (count) {

count--;

}

milliseconds--;

}

}

// 初始化ADC

void init_adc() {

ADCON0 = 0x41; // 设置ADC转换时钟频率和通道

ADCON1 = 0x80; // 设置ADC数据格式和引用电压

}

// 读取ADC值

unsigned char read_adc() {

ADCON0 |= 0x04; // 启动ADC转换

while (ADCON0 & 0x04); // 等待ADC转换完成

return ADRESH; // 返回高字节数据

}

// 主函数

void main(void) {

unsigned char adc_value;

float temperature;

init_adc(); // 初始化ADC

while (1) {

adc_value = read_adc(); // 读取ADC值

// 转换为温度值(示例使用线性关系进行转换)

temperature = (adc_value * 0.48875) - 50;

// 显示温度值(通过串口、LCD等方式进行显示)

// 延时一段时间

delay_ms(1000);

}

}

```

在上面的示例中,我们定义了`init_adc`函数用于初始化ADC,`read_adc`函数用于读取ADC值。主函数中,我们通过调用`init_adc`函数来初始化ADC,然后在一个循环中不断读取ADC值并进行温度转换。

请注意,这只是一个示例程序,温度转换部分使用了简单的线性关系进行转换,具体的转换公式需要根据你所使用的温度传感器的特性而定。

另外,你可能需要根据实际情况将温度值以适当的方式进行显示,比如通过串口通信输出到计算机,或者连接液晶显示屏进行显示。

希望这个示例对你有帮助。如果还有其他问题,请随时提问。

51单片机温度测量系统Proteus仿真

串行扩展应用:

利用 DS18B20 和 LED 数码管实现单总线温度测量系统。DS18B20的测量范围是-5℃~128℃。由于只接有两个 LED数码管,所以显示的数值只能在 00~~99 之间。

硬件图

Proteus仿真图:

(2)软件设计

#include<reg51.h>#include"intrins.h"#define uchar unsigned char#define uint unsigned int#define out P0sbit smg1=out^4;sbit smg2=out^5;sbit DQ=P3^7;void delay5(uchar);void init_ds18b20(void);uchar readbyte(void);void writebyte(uchar);uchar retemp(void);

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。

点击这里找小助理0元领取: 加微信领取资料

void main(){uchar i,temp;delay5(1000);while(1){temp=retemp();for(i=0;i<10;i++){out=(temp/10)&0x0f;smg1=0;smg2=1;delay5(1000);out=(temp%10)&0x0f;smg1=1;smg2=0;delay5(1000);}}}

void delay5(uchar n){do{nop();nop();nop();n–;}while(n);}

void init_ds18b20(void){uchar x=0;DQ=0;delay5(120);DQ=1;delay5(16);delay5(80);}

uchar readbyte(void){uchar i=0;uchar date=0;for(i=8;i>0;i–){DQ=0;delay5(1);DQ=1;date>>=1;if(DQ)date|=0x80;delay5(11);}return(date);}

void writebyte(uchar dat){uchar i=0;for(i=8;i>0;i–){DQ=0;DQ=dat&0x01;delay5(12);DQ=1;dat>>=1;delay5(5);}}

uchar retemp(void){uchar a,b,tt;uint t;init_ds18b20();writebyte(0xcc);writebyte(0x44);init_ds18b20();writebyte(0xcc);writebyte(0xbe);a=readbyte();b=readbyte();t=b;t<<=8;t=t|a;tt=t*0.0625;return(tt);}

效果图

上图,仿真运行状态①(未操作温度)。

上图,仿真运行状态②(未操作温度)。

上图,仿真运行状态③(ds18b20按钮按下,温度增加)。

上图,仿真运行状态④(ds18b20按钮按下,温度增加)。

实验结论及分析

1.程序的核心思想

①DS18B20与传统的热敏电阻不同,DS18B20 可直接将被测温度转换为串行数字信号,供单片机处理。通过对 DS18B20 编程可以实现 9~12 位的温度读数,并可分别在 93.75ms 和 750ms 内完成 9 位和 12 位的数字量。其测温范围-55℃~+125℃,最大分辨率为 0.0625℃,在一10℃~+85℃范围内其测温准确度为±0.5℃。

②DS18B20也可以看作一个小的单片机系统,它将温度信息采集到自己的内存中,然后通过一定的节拍将温度信息一位一位地传入at89c51单片机中进行二位数码管的显数。

2.实验中遇到的问题

①lcd1602输入信息时要记得初始化,否则不会显数。

②注意DS18B20的温度信息一位一位地传入at89c51单片机中时严格把控节拍,节拍不正确将影响数据传输。

③at89c51单片机的时钟频率要设置成11.0592mhz。

原文链接:https://mp.weixin.qq.com/s/A9QS6xlYd9XKk8IHtJGffA

转载自:STM32嵌入式开发

原文链接:51单片机温度测量系统Proteus仿真

本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

相关问答

基于单片机 温度 、电流、电阻,只用一块显示屏可以显示这三种参数吗?

根据提问者的意思,一块显示屏能否可以全部显示单片机采集的温度、电流、电阻这三种参数?完全可以,根据自己的要求选择一块合适的显示屏即可!显示屏有很多种...

基于单片机 数字 温度测量 仪需要用到热敏电阻吗?

是的,基于单片机的数字温度测量仪通常需要使用热敏电阻。热敏电阻是一种温度敏感的电阻器件,其电阻值随温度的变化而变化。通过测量热敏电阻的电阻值,可以推算...

单片机 热敏电阻怎么检测他的 温度的 ?

如果是最老式的电饭锅(某宝上50元以内就能买一个),就那个开关通过杠杆连着一个磁体,你按下去的时候会吸住,开始加热,然后这种磁体在105度的时候磁性会突然...

DS18B20 温度 传感器如何与 单片机 相连接_汽配人问答

[最佳回答]1、DS18B20温度传感器与单片机的一个IO口连接。2、温度传感器(temperaturetransducer)是指能感受温度并转换成可用输出信号的传感器。温度传感器...

单片机温度 和热电偶的接法?

热电偶加一个上拉电阻,直接接到单片机的A/D脚就行了,不需要放大了,每种热电偶都有计算公式的。测量电压的基准就用电源电压就可以了,想精度高就用专门的基准...

单片机温度 传感器作用?

温度传感器的作用:用物质各种物理性质随温度变化的规律把温度转换为电量。温度传感器是温度测量仪表的核心部分,品种繁多。按测量方式可分为接触式和非接触式...

c51 单片机温度 报警器灯不亮?

是致命错误。问题原因:编译工具及相关库文件在KEIL的tool.ini初始化文件指定的路径不存在或者指定的路径下的文件找不到。解决方案,有两种:1、安装KEIL...

肿么通过蓝牙模块把DS18B20 温度 传感器在 单片机 上显示的 温度 ...

51单片机直接用串口把数据发给蓝牙串口模块,模块就可以把数据发给电脑。卖模块...另一种方法是利用蓝牙模块作为中继,将DS18B20采集的温度信息传给一个能与电脑...

单片机 火灾报警用什么 温度 传感器?

单片机火灾报警中使用的温度传感器一般是热敏电阻(thermistor)或热电偶(thermocouple)。热敏电阻是一种能够随着温度变化而改变其电阻值的传感器,其具有灵敏...

单片机温度 传感器和红外线接收器作用?

红外线传感器就是利用红外线的物理性质来进行测量的传感器。红外线又被叫做红外光,它包含有反射、折射、散射、干涉、吸收等性质。红外传感器的这种性质使得它...

猜你喜欢