单片机(温度计)

合集下载

单片机基于stm32的数字温度计设计

单片机基于stm32的数字温度计设计

单片机基于stm32的数字温度计设计
数字温度计是一种用于测量环境温度的设备。

在这个问题中,我们将使用基于STM32的单片机来设计一个数字温度计。

为了设计这个温度计,我们需要以下组件和步骤:
1. STM32单片机:STM32是一种基于ARM架构的单片机,它具有强大的计算能力和丰富的外设接口,适用于各种应用。

2. 温度传感器:我们需要选择一种适合的温度传感器,常用的有数字式温度传感器,如DS18B20。

3. 连接电路:将温度传感器连接到STM32单片机。

这通常需要使用一些电子元件,如电阻、电容和连接线等来建立电路连接。

4. 编程:使用适合STM32单片机的编程语言,如C语言,来编写程序。

程序将读取温度传感器的数据,并将其转换为数字值。

5. 温度显示:将温度数据显示在合适的显示设备上,如LCD显示屏或七段数码管。

可以使用STM32单片机的GPIO口控制这些显示设备。

6. 数据处理:可以对温度数据进行进一步处理,如计算平均温度、设定警报阈值等。

以上是一个基本的数字温度计设计的流程。

具体的实现细节和代码编写可能需要根据具体的硬件和软件平台进行调整。

单片机温度计的原理及应用(一)

单片机温度计的原理及应用(一)

单片机温度计的原理及应用(一)引言概述:单片机温度计是一种用于测量温度并输出数字化结果的设备。

它利用单片机的高精度和高稳定性来实现温度的准确测量,并可以通过数字信号输出与温度值对应的数据,广泛应用于各个领域。

本文将详细介绍单片机温度计的原理及其在实际应用中的重要性。

正文:一、温度传感器的原理1.热敏电阻的基本原理2.热电偶的工作原理3.半导体温度传感器的工作原理4.红外线温度传感器的工作原理5.其他常见温度传感器的原理及特点二、单片机温度测量的基本原理1.模拟信号采集与转换2.温度校准与补偿3.数字滤波与数据处理4.温度单位切换与显示方式选择5.温度测量精度与可靠性的提高方法三、单片机温度计的应用领域1.家用电器行业中的应用2.工业自动化控制领域中的应用3.环境监测与控制系统中的应用4.医疗仪器与设备中的应用5.农业生产与研究中的应用四、常见的单片机温度计实现方案1.基于热敏电阻的温度计设计2.基于热电偶的温度计设计3.基于半导体温度传感器的温度计设计4.基于红外线温度传感器的温度计设计5.其他先进的单片机温度计设计方案介绍五、单片机温度计的优缺点及未来发展方向1.优点:高精度、高稳定性、数据准确性高2.缺点:成本较高、对环境条件要求较高3.发展方向:无线传输技术、自动化控制集成等总结:通过本文对单片机温度计的原理及应用进行详细阐述,我们可以看到单片机温度计在各行各业中发挥着重要的作用。

随着技术的不断发展和创新,单片机温度计的性能将更加出色,应用领域也将更加广阔。

相信在未来的发展中,单片机温度计将继续为我们提供更准确、可靠的温度测量解决方案。

单片机温度计课程设计报告

单片机温度计课程设计报告

单片机温度计课程设计报告摘要:本次课程设计旨在利用单片机实现一个温度计,能够实时测量环境温度并将温度值显示在数码管上。

通过该设计,能够熟悉单片机的基本原理和编程方法,并且加深对温度测量原理的理解。

1. 引言温度是我们日常生活中非常重要的一个参数,对于很多应用来说,温度的准确测量和控制是至关重要的。

而单片机作为一种常用的嵌入式系统,具有体积小、功耗低、成本低等优点,因此被广泛应用于温度测量和控制系统中。

2. 设计原理本设计采用了DS18B20温度传感器作为温度测量模块,并通过单片机的IO口与之连接。

DS18B20传感器具有精度高、体积小、响应速度快等优点,是目前市场上常用的温度传感器之一。

通过单片机与DS18B20传感器的通信,可以获取到当前环境的温度值。

3. 硬件设计本设计所需的硬件主要包括单片机、DS18B20传感器、数码管、电阻、电容等。

其中单片机负责控制和数据处理,DS18B20传感器用于测量温度,数码管则用于显示温度值。

3.1 单片机选择在本设计中,选择了常用的STC89C52单片机作为控制核心。

STC89C52是一款8051系列的单片机,具有丰富的外设资源和强大的计算能力,非常适合本次设计的要求。

3.2 传感器连接DS18B20传感器与单片机的连接采用一根三线制,其中VCC连接到单片机的电源正极,GND连接到单片机的电源负极,DATA连接到单片机的IO口。

3.3 数码管连接数码管的连接比较简单,将数码管的8个引脚分别连接到单片机的8个IO口即可。

需要注意的是,数码管的引脚顺序可能因不同厂家而异,应根据具体数码管的型号选择正确的引脚连接方式。

4. 软件设计本设计的软件主要包括单片机的初始化配置和温度测量显示功能。

4.1 单片机初始化在使用单片机之前,需要对其进行初始化配置,包括设置IO口的输入输出方向、定时器的初始化、中断的使能等。

通过这些初始化配置,可以确保单片机正常工作并准备好接收温度传感器的数据。

毕业设计 单片机温度计

毕业设计 单片机温度计

毕业设计单片机温度计毕业设计单片机温度计一、引言随着科技的发展,单片机在各个领域的应用越来越广泛。

其中,温度计作为一种常见的测量仪器,也逐渐得到了广泛的应用。

本文将介绍一种基于单片机的温度计的设计方案。

二、设计原理本设计方案采用DS18B20数字温度传感器作为温度检测元件,通过单片机进行数据采集和处理,并通过数码管显示当前的温度数值。

设计的主要原理如下:1. 温度传感器DS18B20是一种数字温度传感器,具有精确度高、体积小、接线简单等特点。

它采用单总线接口进行通信,可以直接与单片机相连。

2. 单片机本设计采用常用的51单片机作为控制核心,通过单总线协议与温度传感器进行通信。

单片机负责采集传感器的数据,并对温度数值进行处理。

3. 数码管显示为了方便用户观察温度数值,本设计采用了数码管进行显示。

通过单片机的IO 口控制数码管进行数值的显示。

三、硬件设计本设计的硬件部分主要包括传感器接口电路、单片机电路和数码管显示电路。

1. 传感器接口电路传感器接口电路主要负责将传感器的信号与单片机连接。

通过对传感器引脚的接法,实现数据的传输和通信。

2. 单片机电路单片机电路主要包括单片机的供电电路和与传感器的通信电路。

通过连接电源和接口电路,实现单片机对传感器的控制和数据采集。

3. 数码管显示电路数码管显示电路主要包括数码管的供电电路和控制电路。

通过连接电源和单片机的IO口,实现数码管的数值显示。

四、软件设计本设计的软件部分主要包括单片机的程序设计和数据处理。

1. 程序设计通过编写单片机的程序,实现与传感器的通信和数据采集。

程序中需要包括对传感器的初始化、数据读取和数据处理等功能。

2. 数据处理通过单片机对传感器采集到的温度数据进行处理,可以实现对温度数值的转换和计算。

同时,可以根据需要对数据进行滤波和校准,提高测量的准确度。

五、实验结果经过硬件和软件的设计,本设计方案成功实现了温度的测量和显示。

实验结果表明,该温度计具有较高的精确度和稳定性。

用单片机制作温度计

用单片机制作温度计
2、DS18B20 器件
单线数字温度传感器 DS18B20 就是这样一个 1-wire 器件,该器件可把温度直接转换 成串行数字信号供微机处理。由于每片 DS18B20 含有唯一的硅串行数,所以在一条总线 上可挂接任意多个 DS18B20 芯片。从 DS18B20 读出的信息或写入 DS18B20 的信息, 仅需要一根端口线,该端口线同时也可以向 DS18B20 供电,从而无需额外电源。DS18B20 提供 9~12 位温度读数,构成多点温度检测系统而无需任何外围硬件。
1.DS1820 的特性 z 单线接口:仅需一根接口线与 MCU 连接; z 无需外围元件; z 可由接口线提供能量,也可由 5V 电源供电; z 测温范围为测量温度范围为-55°C~+125°C,在-10~+85°C 范围内精度为±0.5°C; z 9~12 位温度读数; z 在使用 12 位分辨率时 A/D 变换时间为最长为 750ms,而使用 9 位分辨率时转换时
间为 93.75ms; z 用户自设定温度报警上下限,其值在断电后仍可保存; z 报警搜索命令可识别哪片 DS1820 超温度限; 2.DS18B20 引脚及功能
DS18B20 的引脚见图1(PR35 封装)。GND:地;DQ:数据输入/输出脚(单线 接口,可作寄生供电); VDD:电源电压。
图 1 DS18B20 的一种封装形式
3.DS1820 的工作原理 DS1820 的内部结构如图2所示。
图 2 DS18B20 的内部结构图
由图可知,DS1820 由三个主要数字器件组成: ①64bit 闪速 ROM;②温度传感器;③非易失性温度报警触发器 TH 和 TL。64bit
闪速 ROM 的结构如下:
图 3 DS18B20 内部 ROM 结构

51单片机数字温度计设计与实现

51单片机数字温度计设计与实现

51单片机数字温度计设计与实现温度计是一种常见的电子测量设备,用于测量环境或物体的温度。

而数字温度计基于单片机的设计与实现,能够更准确地测量温度并提供数字化的显示,具备更多功能。

一、设计原理数字温度计的设计原理基于温度传感器和单片机。

温度传感器用于感测温度,而单片机负责将传感器读取的模拟信号转化为数字信号,并进行温度计算及显示。

二、所需材料1. 51单片机2. 温度传感器(例如DS18B20)3. 数码管或液晶显示屏4. 连接线5. 电源电路电容、电阻等元件三、设计步骤1. 连接电路:按照电路原理图将51单片机、温度传感器和显示器等元件进行连接。

注意正确连接引脚,以及电源电路的设计和连接。

2. 编写程序:利用汇编语言或C语言编写51单片机的程序,实现温度读取、计算和显示功能。

3. 温度传感器设置:根据温度传感器的型号和数据手册,配置单片机相应的输入输出口、温度转换方式等参数。

4. 读取温度:通过单片机对温度传感器进行读取,获取传感器采集的温度数据。

5. 温度计算:根据传感器输出的数据和转换方法,进行温度计算,得到更准确的温度数值。

6. 数字显示:将计算得到的温度数值通过数码管或液晶显示屏进行数字显示。

可以选择合适的显示格式和单位。

7. 添加附加功能:可以根据实际需求,增加其他功能,如报警功能、数据记录、温度曲线显示等。

8. 系统测试与优化:将设计的数字温度计进行系统测试,确保其正常运行和准确显示温度。

根据测试结果进行可能的优化或改进。

四、注意事项1. 连接线应牢固可靠,避免出现松动或接触不良的情况。

2. 选择合适的温度传感器,并正确设置传感器的相关参数。

3. 程序设计时应注意算法的准确性和优化性,以确保测量的准确性和实时性。

4. 温度传感器的安装和环境选择也会影响温度计的准确性,应避免与外部环境干扰和热源过近的情况。

五、应用领域1. 家庭和工业温度监测:数字温度计可以广泛应用于室内、室外温度监测,工业生产中的温度控制等。

51单片机温度计

51单片机温度计在我们的日常生活中,准确测量温度对于许多场景都至关重要,比如室内环境的舒适度调节、工业生产中的过程控制,以及农业中的温室管理等等。

而基于51 单片机开发的温度计,以其成本低、性能可靠、易于实现等优点,在温度测量领域得到了广泛的应用。

51 单片机是一种经典的微控制器,它具有简单易用、资源丰富等特点,非常适合用于小型的电子项目开发。

在设计 51 单片机温度计时,我们首先需要选择合适的温度传感器。

常见的温度传感器有热敏电阻、热电偶和数字式温度传感器(如 DS18B20)等。

热敏电阻是一种电阻值随温度变化而变化的元件。

其优点是成本低,但缺点是精度相对较低,并且需要进行复杂的电阻温度转换计算。

热电偶则是基于两种不同金属之间的热电效应来测量温度的,它适用于高温测量,但同样需要复杂的信号调理电路和转换计算。

相比之下,数字式温度传感器 DS18B20 具有诸多优势。

它采用单总线接口,与单片机的连接非常简单,只需要一根数据线即可实现通信。

而且,DS18B20 直接输出数字信号,无需进行模拟信号到数字信号的转换,大大简化了电路设计和软件编程。

此外,它的测量精度较高,在-10℃至+85℃的范围内,精度可以达到 ±05℃。

确定了温度传感器后,接下来就是硬件电路的设计。

51 单片机的最小系统通常包括单片机芯片、晶振电路和复位电路。

对于温度计的硬件电路,还需要将温度传感器与单片机连接起来。

以 DS18B20 为例,将其数据线连接到单片机的一个 I/O 口,并加上适当的上拉电阻。

除了传感器和单片机的连接,还需要考虑显示部分。

常见的显示方式有数码管显示和液晶显示(LCD)。

数码管显示亮度高、成本低,但显示内容相对简单;LCD 显示则可以显示更多的信息,如字符、图形等,但成本相对较高。

在实际应用中,可以根据具体需求进行选择。

硬件设计完成后,就需要进行软件编程了。

在 51 单片机中,通常使用 C 语言进行编程。

基于51单片机的数字温度计

引言:数字温度计是一种基于51单片机的温度测量装置,它通过传感器感知环境的温度,并使用单片机将温度值转换为数字形式,并显示在液晶屏上。

本文将详细介绍数字温度计的设计原理、硬件连接、软件编程以及应用领域。

概述:数字温度计基于51单片机的设计理念,其基本原理是通过传感器将温度转换为电信号,然后通过ADC(模数转换器)将电信号转换为数字信号,最后使用单片机将数字信号转换为温度值。

同时,数字温度计还将温度值显示在液晶屏上,方便用户直观地了解环境温度。

正文内容:1. 硬件连接:1.1 使用温度传感器感知环境温度:常用的温度传感器有NTC热敏电阻和DS18B20数字温度传感器。

通过将传感器连接到51单片机的引脚上,可以实现对环境温度的感知。

1.2 连接ADC进行模数转换:ADC是将模拟信号转换为数字信号的关键部件。

通过将51单片机的引脚连接到ADC芯片的输入端,可以将模拟的温度信号转换为数字信号。

1.3 连接液晶屏显示温度值:通过将51单片机的引脚连接到液晶屏的控制引脚和数据引脚,可以将温度值以数字形式显示在液晶屏上。

2. 软件编程:2.1 初始化引脚和ADC:在软件编程中,需要初始化51单片机的引脚设置和ADC的工作模式。

通过设置引脚为输入或输出,以及设置ADC的参考电压和工作模式,可以确保硬件正常工作。

2.2 温度测量算法:根据传感器的工作原理和电压-温度特性曲线,可以编写相应的算法将ADC测得的电压值转换为温度值。

例如,对于NTC热敏电阻,可以使用Steinhart-Hart公式进行温度计算。

2.3 温度值显示:将温度值以数字形式显示在液晶屏上。

通过设置液晶屏的控制引脚和数据引脚,可以控制液晶屏的显示内容,并将温度值以数字形式显示在屏幕上。

3. 基于51单片机的数字温度计应用:3.1 家庭温度监测:数字温度计可以安装在家庭中的不同区域,实时监测室内温度,并通过数字显示提供直观的温度信息。

这对于家庭的舒适性和节能都有重要意义。

单片机DS18B20温度计(有程序)

;单片机DS18B20温度计C语言程序; 有程序#include<reg51.h>#include<intrins.h>#include <math.H> //要用到取绝对值函数abs()//通过DS18B20测试当前环境温度, 并通过数码管显示当前温度值, 目前显示范围: -55~ +125度sbit wela = P2^7; //数码管位选sbit dula = P2^6; //数码管段选sbit ds = P2^2;int tempValue;//0-F数码管的编码(共阳极)unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0-9数码管的编码(共阳极), 带小数点unsigned char code tableWidthDot[]={0x40, 0x79, 0x24, 0x30,0x19, 0x12, 0x02,0x78, 0x00, 0x10};//延时函数, 对于11.0592MHz时钟, 例i=10,则大概延时10ms.void delay(unsigned int i){unsigned int j;while(i--){for(j = 0; j < 125; j++);}}//初始化DS18B20//让DS18B20一段相对长时间低电平, 然后一段相对非常短时间高电平, 即可启动 void dsInit(){//对于11.0592MHz时钟, unsigned int型的i, 作一个i++操作的时间大于?us unsigned int i;ds = 0;i = 100; //拉低约800us, 符合协议要求的480us以上while(i>0) i--;ds = 1; //产生一个上升沿, 进入等待应答状态i = 4;while(i>0) i--;}void dsWait(){unsigned int i;while(ds);while(~ds); //检测到应答脉冲i = 4;while(i > 0) i--;}//向DS18B20读取一位数据//读一位, 让DS18B20一小周期低电平, 然后两小周期高电平,//之后DS18B20则会输出持续一段时间的一位数据bit readBit(){unsigned int i;bit b;ds = 0;i++; //延时约8us, 符合协议要求至少保持1usds = 1;i++; i++; //延时约16us, 符合协议要求的至少延时15us以上b = ds;i = 8;while(i>0) i--; //延时约64us, 符合读时隙不低于60us要求return b;}//读取一字节数据, 通过调用readBit()来实现unsigned char readByte(){unsigned int i;unsigned char j, dat;dat = 0;for(i=0; i<8; i++){j = readBit();//最先读出的是最低位数据dat = (j << 7) | (dat >> 1);}return dat;}//向DS18B20写入一字节数据void writeByte(unsigned char dat){unsigned int i;unsigned char j;bit b;for(j = 0; j < 8; j++){b = dat & 0x01;dat >>= 1;//写"1", 将DQ拉低15us后, 在15us~60us内将DQ拉高, 即完成写1if(b){ds = 0;i++; i++; //拉低约16us, 符号要求15~60us内ds = 1;i = 8; while(i>0) i--; //延时约64us, 符合写时隙不低于60us要求}else //写"0", 将DQ拉低60us~120usds = 0;i = 8; while(i>0) i--; //拉低约64us, 符号要求ds = 1;i++; i++; //整个写0时隙过程已经超过60us, 这里就不用像写1那样, 再延时64us 了}}//向DS18B20发送温度转换命令void sendChangeCmd(){dsInit(); //初始化DS18B20, 无论什么命令, 首先都要发起初始化dsWait(); //等待DS18B20应答delay(1); //延时1ms, 因为DS18B20会拉低DQ 60~240us作为应答信号writeByte(0xcc); //写入跳过序列号命令字Skip RomwriteByte(0x44); //写入温度转换命令字Convert T}//向DS18B20发送读取数据命令void sendReadCmd(){dsInit();dsWait();delay(1);writeByte(0xcc); //写入跳过序列号命令字Skip RomwriteByte(0xbe); //写入读取数据令字Read Scratchpad}//获取当前温度值int getTmpValue(){unsigned int tmpvalue;int value; //存放温度数值float t;unsigned char low, high;sendReadCmd();//连续读取两个字节数据low = readByte();high = readByte();//将高低两个字节合成一个整形变量//计算机中对于负数是利用补码来表示的//若是负值, 读取出来的数值是用补码表示的, 可直接赋值给int型的valuetmpvalue = high;tmpvalue <<= 8;tmpvalue |= low;value = tmpvalue;//使用DS18B20的默认分辨率12位, 精确度为0.0625度, 即读回数据的最低位代表0.0625度t = value * 0.0625;//将它放大100倍, 使显示时可显示小数点后两位, 并对小数点后第三进行4舍5入//如t=11.0625, 进行计数后, 得到value = 1106, 即11.06 度//如t=-11.0625, 进行计数后, 得到value = -1106, 即-11.06 度value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0减0.5return value;}unsigned char const timeCount = 3; //动态扫描的时间间隔//显示当前温度值, 精确到小数点后一位//若先位选再段选, 由于IO口默认输出高电平, 所以当先位选会使数码管出现乱码void display(int v){unsigned char count;unsigned char datas[] = {0, 0, 0, 0, 0};unsigned int tmp = abs(v);datas[0] = tmp / 10000;datas[1] = tmp % 10000 / 1000;datas[2] = tmp % 1000 / 100;datas[3] = tmp % 100 / 10;datas[4] = tmp % 10;if(v < 0){//关位选, 去除对上一位的影响P0 = 0xff;wela = 0;//段选P0 = 0x40; //显示"-"号dula = 1; //打开锁存, 给它一个下降沿量dula = 0;//位选P0 = 0xfe;wela = 1; //打开锁存, 给它一个下降沿量wela = 0;delay(timeCount);}for(count = 0; count != 5; count++){//关位选, 去除对上一位的影响P0 = 0xff;wela = 1; //打开锁存, 给它一个下降沿量wela = 0;//段选if(count != 2){P0 = table[datas[count]]; //显示数字}else{P0 = tableWidthDot[datas[count]]; //显示带小数点数字}dula = 0;//位选P0 = _crol_(0xfd, count); //选择第(count + 1) 个数码管wela = 1; //打开锁存, 给它一个下降沿量wela = 0;delay(timeCount);}}void main(){unsigned char i;while(1){//启动温度转换sendChangeCmd();//显示5次for(i = 0; i < 40; i++){display(tempValue);}tempValue = getTmpValue();}以下是我编的程序,可用#include <reg52.h>#include <intrins.h>//-----------------------------------------------------------sbit DQ=P1^5;//-----------------------------------------------------------unsigned char number[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};//数字0~9unsigned char wei[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //数码管位循环unsigned char Flag;unsigned char Templ,Temph;unsigned int temp;//-----------------------------------------------------------//函数声明//-----------------------------------------------------------void delay(unsigned char i); //延时程序//----------------------------------void Int18b20(void); //18b20初始化void Write18b20(unsigned char dat); //向18b20写一字节unsigned char Read18b20(void); //从18b20读一字节void Start18b20(void); //开始转换温度void Get18b20(void); //读出温度void chinT(void); //数据转换//----------------------------------void display(void); //显示程序//-----------------------------------------------------------//函数功能:延时//-----------------------------------------------------------/*************精确延时函数*****************/void delay(unsigned char i){while(--i);}/*此延时函数针对的是12Mhz的晶振delay(0); //延时518us 误差:518-2*256=6delay(1); //延时7us (原帖写"5us"是错的)delay(10); //延时25us 误差:25-20=5delay(20); //延时45us 误差:45-40=5delay(100); //延时205us 误差:205-200=5delay(200); //延时405us 误差:405-400=5*///-----------------------------------------------------------//DS18b20的相关程序//-----------------------------------------------------------//初始化//-----------------------------------------------------------void Int18b20(void){DQ=1;_nop_();_nop_();DQ=0; //拉低delay(100); //延时205usdelay(200); //延时405us //等待400~960微秒,最短为480us DQ=1;delay(1); //延时7usdelay(20); //延时45us //等待15~60微秒(等待回复)if(DQ==1) //判断初始化的情况是否成功{Flag=0; //复位失败}else{Flag=1;while(!DQ); //等待回复完成}delay(200); //延时405us //等待完成初始化}//-----------------------------------------------------------//写一字节//-----------------------------------------------------------void Write18b20(unsigned char dat){unsigned char i;for(i=0;i<8;i++){DQ=1;_nop_();DQ=0;delay(1); //延时7us //拉低后延时小于15usif(dat&0x01){DQ=1;}else{DQ=0;}dat=dat>>1;delay(20); //延时45usdelay(10); //延时25us //延时大于60usDQ=1;delay(1); //延时7us //延时大于1us}}//-----------------------------------------------------------//读一字节//-----------------------------------------------------------unsigned char Read18b20(void){unsigned char i,dat=0;for(i=0;i<8;i++){DQ=1;_nop_();DQ=0;delay(1); //延时7usdat=dat>>1;DQ=1;delay(1); //延时7us //确保在15us后60us前读数据if(DQ){dat|=0x80;}delay(20); //延时45us //确保读时续大于60us}return dat;}//-----------------------------------------------------------//开始转换温度//-----------------------------------------------------------void Start18b20(void){Int18b20();Write18b20(0xcc); //跳过ROM指令Write18b20(0x44); //温度转换指令}//-----------------------------------------------------------//读出温度//-----------------------------------------------------------void Get18b20(void){Int18b20();Write18b20(0xcc); //跳过ROM指令Write18b20(0xbe); //读暂存器指令Templ=Read18b20();Temph=Read18b20();}//-----------------------------------------------------------//数据转换//-----------------------------------------------------------void chinT(void){float Tt;temp=Temph; //先把高八位有效数据赋于temptemp=(temp<<8); //将数据从temp低八位移到高八位temp=temp|Templ; //将两字节合成一个整型变量Tt=temp*0.0625; //得到真实十进制温度值(因为DS18B20可以精确到0.0625度) temp=Tt*10+0.5; //放大十倍(将小数点后一位变成个位,个位变成十位,十位变成百位,并四舍五入)}//-----------------------------------------------------------//显示程序//-----------------------------------------------------------void display(void){unsigned int i;unsigned char A1,A2,A3;A1=temp/100; //百位(温度的十位)A2=temp%100/10; //十位(温度的个位)A3=temp%10; //个位(温度的小数点后一位)for(i=0;i<20;i++){P0=0x00;P2=0x00;P0=number[A1];P2=wei[0];delay(220);P0=0x00;P2=0x00;P0=number[A2];P2=wei[1];delay(220);P0=0x00;P2=0x00;P0=number[A3];P2=wei[2];delay(220);P0=0x00;P2=0x00;P0=0x80;P2=wei[1];delay(220);}}//-----------------------------------------------------------//----------------------------------------------------------- void main(void){while(1){Int18b20();if(Flag){Start18b20(); //开始转换温度Get18b20(); //得到温度chinT(); //数据转换display(); //显示}else P3=0x01;}}。

51单片机数字温度计的设计与实现

51单片机数字温度计的设计与实现温度计是一种广泛使用的电子测量仪器,它能够通过感知温度的变化来提供精准的温度数值。

本文将介绍如何使用51单片机设计并实现一款数字温度计。

一、硬件设计1. 采集温度传感器温度传感器是用来感知环境温度的关键器件。

常见的温度传感器有DS18B20、LM35等。

在本次设计中,我们选择DS18B20温度传感器。

通过电路连接将温度传感器与51单片机相连,使51单片机能够读取温度传感器的数值。

2. 单片机选型与连接选择适合的51单片机型号,并根据其引脚功能图对单片机进行合理的引脚连接。

确保温度传感器与单片机之间的数据传输通畅,同时保证电源和地线的正确连接。

3. 显示模块选型与连接选择合适的数字显示模块,如数码管、液晶显示屏等。

将显示模块与51单片机相连,使温度数值能够通过显示模块展示出来。

4. 电源供应为电路提供稳定的电源,保证整个系统的正常运行。

选择合适的电源模块,并根据其规格连接电路。

二、软件设计1. 温度传感器读取程序编写程序代码,使用单片机GPIO口将温度传感器与单片机连接,并通过相应的通信协议读取温度数值。

例如,DS18B20采用一线制通信协议,需要使用单总线协议来读取温度数值。

2. 数字显示模块驱动程序编写程序代码,通过单片机的GPIO口控制数字显示模块的数码管或液晶显示屏进行温度数值显示。

根据显示模块的规格,编写合适的驱动程序。

3. 温度转换算法将温度传感器读取到的模拟数值转换为实际温度数值。

以DS18B20为例,它输出的温度数值是一个16位带符号的数,需要进行相应的转换操作才能得到实际的温度数值。

4. 系统控制程序整合以上各部分代码,编写系统控制程序。

该程序通过循环读取温度数值并进行数据处理,然后将处理后的数据送到数字显示模块进行实时显示。

三、实现步骤1. 硬件连接按照前文所述的硬件设计,将温度传感器、51单片机和数字显示模块进行正确的连接。

确保连接无误,并进行必要的电源接入。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计报告数字温度计专业班级电信083姓名第八组王爽曾智袁永华罗朝霞徐艳茹时间 14 周~ 15 周指导教师李川老师2009 年 12 月 12 日1设计要求■基本范围-55℃-128℃■精度误差小于0.625℃■LED数码直读显示2 扩展功能■可以任意设定温度的上下限报警功能目录1 引言 (4)2 总体设计方案 (4)2.1数字温度计设计方案论证 (4)2.2方案二的总体设计框图 (5)2.3 DS18B20温度传感器与单片机的接口电路 (7)2.4 系统整体硬件电路 (8)3系统软件算法分析 (8)3.1主程序 (9)3.2读出温度子程序 (9)3.3温度转换命令子程序 (10)3.4 计算温度子程序 (10)3.5 显示数据刷新子程序 (10)4总结与体会 (11)数字温度计电信083 单片机第八组摘要:随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。

关键词:单片机,数字控制,温度计,DS18B20,A T89S511 引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。

本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机A T89S51,测温传感器使用DS18B20,用3位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。

2 总体设计方案2.1数字温度计设计方案论证2.1.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。

2.1.2 方案二进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。

2.2方案二的总体设计框图温度计电路设计总体设计方框图如图1所示,控制器采用单片机A T89S51,温度传感器采用DS18B20,用3位LED数码管以串口传送数据实现温度显示。

图1总体设计方框图2.2.1 主控制器单片机A T89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

2.2.2 显示电路显示电路采用3位共阳LED数码管,从P3口RXD,TXD串口输出段码。

2.2.3温度传感器DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

DS18B20的性能特点如下:●独特的单线接口仅需要一个端口引脚进行通信;●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;●无须外部器件;●可通过数据线供电,电压范围为3.0~5.5V;●零待机功耗;●温度以9或12位数字;●用户可定义报警设置;●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2所示。

图2 DS18B20内部结构64位ROM 的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC 检验码,这也是多个DS18B20可以采用一线进行通信的原因。

温度报警触发器TH和TL,可通过软件写入户报警上下限。

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM 。

高速暂存RAM 的结构为8字节的存储器,结构如图3所示。

头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。

第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。

DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。

该字节各位的定义如图3所示。

低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。

TM R11R01111....图3 DS18B20字节定义由表1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。

因此,在实际应用中要将分辨率和转换时间权衡考虑。

高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。

第9字节读出前面所有8字节的CRC 码,可用来检验数据,从而保证通信数据的正确性。

当DS18B20接收到温度转换命令后,开始启动转换。

转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。

单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB 形式表示。

当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。

表2是一部分温度值对应的二进制温度数据。

表1 DS18B20温度转换时间表R0R1000101119101112分辨率/位温度最大转向时间/ms 93.75187.5375750....DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。

若T>TH 或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。

因此,可用多只DS18B20同时测量温度并进行报警搜索。

在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。

主机ROM的前56位来计算CRC 值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。

DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。

器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。

计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。

其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。

表2 一部分温度对应值表另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。

系统对DS18B20的各种操作按协议进行。

操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

2.3 DS18B20温度传感器与单片机的接口电路DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。

另一种是寄生电源供电方式,如图4 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。

采用寄生电源供电方式时VDD端接地。

由于单线制只有一根线,因此发送接口必须是三态的。

2.4 系统整体硬件电路2.4.1 主板电路系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等,如图5 所示。

2.4.2 显示电路显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用p3口的RXD,和TXD,串口的发送和接收,四只数码管采用74LS164右移寄存器驱动,显示比较清晰。

图5 单片机主板电路3系统软件算法分析系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。

3.1主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。

这样可以在一秒之内测量一次被测温度,其程序流程见图7所示。

图7 主程序流程图图8读温度流程图3.2读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。

其程序流程图如图8示图9 温度转换流程图3.3温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。

温度转换命令子程序流程图如上图,图9所示3.4 计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图10所示。

3.5 显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。

程序流程图如图11。

4总结与体会经过将近三周的单片机课程设计,终于完成了我的数字温度计的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来,高兴之余不得不深思呀!在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事。

相关文档
最新文档