高分求单片机温度采集系统的课程设计

作者&投稿:吁殃 (若有异议请与网页底部的电邮联系)
单片机应用技术课程设计 远程温度采集系统~

这类论文很多人写的,建议你去知网下载,不会搜的话可以去我百度空间里看看,那里有如何找论文的方法及过程

直接用DS18B20数字量的,不用AD,成本也不高
电路也非常简单,只用一个IO口控制
如果需要发消息给我,我把程序给你

DS18B20数字温度计使用

1.DS18B20基本知识

DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

1、DS18B20产品的特点

(1)、只要求一个端口即可实现通信。

(2)、在DS18B20中的每个器件上都有独一无二的序列号。

(3)、实际应用中不需要外部任何元器件即可实现测温。

(4)、测量温度范围在-55。C到+125。C之间。

(5)、数字温度计的分辨率用户可以从9位到12位选择。

(6)、内部有温度上、下限告警设置。

2、DS18B20的引脚介绍

TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。

(底视图)图1

表1 DS18B20详细引脚功能描述 序号
名称
引脚功能描述

1
GND
地信号

2
DQ
数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。

3
VDD
可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。

3. DS18B20的使用方法

由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。

DS18B20的复位时序

DS18B20的读时序

对于DS18B20的读时序分为读0时序和读1时序两个过程。

对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。

DS18B20的写时序

对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。

对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。

4. 实验任务

用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+100度之间,用8位数码管显示出来。

5. 电路原理图

6. 系统板上硬件连线

(1). 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。

(2). 把“单片机系统”区域中的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。

(3). 把DS18B20芯片插入“四路单总线”区域中的任一个插座中,注意电源与地信号不要接反。

(4). 把“四路单总线”区域中的对应的DQ端子连接到“单片机系统”区域中的P3.7/RD端子上。

7. C语言源程序
#i nclude <AT89X52.H>
#i nclude <INTRINS.h>

unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00,0x40};
unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,
25,28,31,34,38,41,44,48,
50,53,56,59,63,66,69,72,
75,78,81,84,88,91,94,97};
unsigned char displaycount;
unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};
unsigned char timecount;
unsigned char readdata[8];
sbit DQ=P3^7;
bit sflag;

bit resetpulse(void)
{
unsigned char i;

DQ=0;
for(i=255;i>0;i--);
DQ=1;
for(i=60;i>0;i--);
return(DQ);
for(i=200;i>0;i--);
}

void writecommandtods18b20(unsigned char command)
{
unsigned char i;
unsigned char j;

for(i=0;i<8;i++)
{
if((command & 0x01)==0)
{
DQ=0;
for(j=35;j>0;j--);
DQ=1;
}
else
{
DQ=0;
for(j=2;j>0;j--);
DQ=1;
for(j=33;j>0;j--);
}
command=_cror_(command,1);
}
}

unsigned char readdatafromds18b20(void)
{
unsigned char i;
unsigned char j;
unsigned char temp;

temp=0;
for(i=0;i<8;i++)
{
temp=_cror_(temp,1);
DQ=0;
_nop_();
_nop_();
DQ=1;
for(j=10;j>0;j--);
if(DQ==1)
{
temp=temp | 0x80;
}
else
{
temp=temp | 0x00;
}
for(j=200;j>0;j--);
}
return(temp);
}

void main(void)
{
TMOD=0x01;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
ET0=1;
EA=1;

while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0x44);
TR0=1;
while(1)
{
;
}
}

void t0(void) interrupt 1 using 0
{
unsigned char x;
unsigned int result;

TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
if(displaycount==2)
{
P0=displaycode[displaybuf[displaycount]] | 0x80;
}
else
{
P0=displaycode[displaybuf[displaycount]];
}
P2=displaybit[displaycount];
displaycount++;
if(displaycount==8)
{
displaycount=0;
}

timecount++;
if(timecount==150)
{
timecount=0;
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0xbe);
readdata[0]=readdatafromds18b20();
readdata[1]=readdatafromds18b20();
for(x=0;x<8;x++)
{
displaybuf[x]=16;
}
sflag=0;
if((readdata[1] & 0xf8)!=0x00)
{
sflag=1;
readdata[1]=~readdata[1];
readdata[0]=~readdata[0];
result=readdata[0]+1;
readdata[0]=result;
if(result>255)
{
readdata[1]++;
}
}
readdata[1]=readdata[1]<<4;
readdata[1]=readdata[1] & 0x70;
x=readdata[0];
x=x>>4;
x=x & 0x0f;
readdata[1]=readdata[1] | x;
x=2;
result=readdata[1];
while(result/10)
{
displaybuf[x]=result%10;
result=result/10;
x++;
}
displaybuf[x]=result;
if(sflag==1)
{
displaybuf[x+1]=17;
}
x=readdata[0] & 0x0f;
x=x<<1;
displaybuf[0]=(dotcode[x])%10;
displaybuf[1]=(dotcode[x])/10;
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0x44);
}
}

关键词:单总线; 数字温度传感器; 多点温度测控

1 前言
随着科学技术的发展,特别是现代仪器的发展,微型化、集成化、数字化正成为传感器发展的一个重要方向[1]。美国Dallas半导体公司推出的数字化温度传感器DS1820采用单总线协议,即与微机接口仅需占用一个I/O端口,无需任何外部元件,直接将温度转化成数字信号,以9位数字码方式串行输出,从而大大简化了传感器与微处理器的接口。
2 工作原理
目前大多数传感器系统都采用放大--传输--数模转换这种处理模式。这种模式一般要占用数条数
据/控制线,限制了单片机功能的扩展。而一线总线技术则很好地解决了这个问题。
一线总线技术就是在一条总线上仅有一个主系统和若干个从系统组成的计算机应用系统。由于总线上的所有器件都通过一条信号线传输信息,总线上的每个器件在不同的时间段驱动总线,这相当于把数据总线、地址总线和控制总线合在了一起。所以整个系统要按单总线协议规定的时序进行工作。为了使其它设备也能使用这条总线,一线总线协议采用了一个三态门,使得每一个设备在不传送数据时空出该数据线给
其它设备。一线总线在外部需要一个上拉电阻器,所以在总线空闲时是高电平。
挂在单总线上的器件称为单总线器件,为了区分总线上的不同器件,生产单总线器件时,厂家都刻录了一个64位的二进制ROM代码作为芯片的唯一序列号。这样通过寻址就可以把每个器件识别出来。64位ROM的结构如下:开始8位是产品类型的编号(DS1820为10H),接着是每个器件的唯一的序号,共
有48位,最后8位是前56位的CRC校验码,这也是多个DS1820可以采用一线进行通信的原因。 3 DS1820介绍
DS1820是美国Dallas半导体公司推出的第一片支持"一线总线"接口的温度传感器。它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供微机处理[2]。
DS1820的工作原理是:DS1820采用3脚PR-35封装或8脚SOIC封装,其中 GND为地;I/O为数据输入/输出端(即单线总线),该脚为漏极开路输出,常态下呈高电平;VDD是外部+5V电源端,不用时应接地;NC为空脚。图1 所示为DS1820的内部框图,它主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL解发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。

DS1820 特点如下:硬件接口简单,性能稳定,单线接口,仅需一根口线与MCU连接无需外围元件;由总线提供电源;测温范围为-55~75℃;精度为0.5℃;9位温度读数;A/D变换时间为200ms;用户自设定温度报警上下限,其值是非易失性的;报警搜索命令可识别那片DS1820超温度限。
DS1820的温度测量原理如下[3]:DS1820测量温度时使用特有的温度测量技术,其测量电路框图如图2所示。内部计数器对一个受温度影响的振荡器的脉冲计数,低温时振荡器的脉冲可以通过门电路,而当到达某一设置高温时,振荡器的脉冲无法通过门电路。计数器设置为-55℃时的值,如果计数器到达0之前,门电路未关闭,则温度寄存器的值将增加,这表示当前温度高于-55℃。同时,计数器复位在当前温度值上,电路对振荡器的温度系数进行补偿,计数器重新开始计数直到回零。如果门电路仍然未关闭,则重复以上过程。温度表示值为9bit,高位为符号位。

4 温度检测系统设计
由于每片DS1820含有唯一的硅串行数,所以在一条总线上可挂接多个DS1820芯片。从DS1820读出的信息或写入DS1820的信息,仅需要一根口线(单线接口)。读写及温度变换功率来源于数据总线,总线本身也可以向所挂接的DS1820供电,而无需额外电源。DS1820提供9位温度读数,构成多点温度检测系统而无需任何外围硬件。对DS1820的使用,多采用单片机实现数据采集。处理时,将DS1820信号线与单片机一位口线相连,单片机可挂接多片DS1820,从而实现多点温度检测系统。由于DS1820只有三个引脚,其中两根是电源线VDD和GND,另外两根用作总线DQ(Data In/Out),由于其输出和输入均是数字信号且与TTL电平兼容,因此其可以与微处理器直接进行接口,从而省去了一般传感器所必需的中间转换环节。
本设计中以DS1820为传感器、AT89C52单片机为控制核心组成的多点温度测试系统如图3所示[4]。用6只DS1820同时测控6路温度(视实际需要还可扩展通道数)。89C52单片机P1.1口接单线总线。DS1820采用寄生电源供电方式。为保证在有效的DS1820时钟周期内能提供足够的电流,图3中采用一个MOSFET管和89C52的H.0口来完成对DS1820的总线上拉。键盘扫描和动态扫描的显示共用一片可编程接口芯片8279,显示采用8位共阴极LED数码管,它可用来显示通道数、温度测量值以及TH、TL的值。

程序处理是整个系统的关键,即简洁的硬件结构是靠复杂的软件来支持的。多个器件挂在一条总线上为了识别不同的器件,在程序设计过程中一般有四个步骤:初始化命令;传送ROM命令;传送RAM命令;数据交换命令。
需要注意的是,无论是单点还是多点温度检测,在系统安装及工作之前,应将主机逐个与DS1820挂接,读出其序列号。其工作过程为:主机发出一个脉冲,待 "0"电平大于480μs后,复位DA1820,在DS1820所发响应脉冲由主机接收后,主机再发读ROM命令代码33H,然后发一个脉冲(15μs),并接着读取DS1820序列号的一位。用同样方法读取序列号的56位。另外,由于DS1820单线通信功能是分时完成的,遵循严格的时隙概念,因此,系统对DS1820和各种操作必须按协议进行,即初始化DS1820(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。系统对 DS1820操作的总体流程图如图4所示。

在正常测温情况下,DS1820的测温分辨力为0.5℃。采用下述方法可获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5℃为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25和0.75℃为进位界限的关系.

结束语
对应于传统概念,这一粒三极管一样的传感器相当于传统的温度传感器+ 数字化+ CPU+ 总线协议及接口。一线器件采用单条连线,解决了控制、通信和供电等问题,降低了系统成本,并简化了设计,为未来传感器的发展和应用开辟了新的领域。

http://www.mcublog.com/blog/blog2007/shuizhongzehui/archives/2007/22353.html
http://blog.21ic.com/user1/422/archives/2006/12900.html
有流程图,电路图和资料,不过百度上传不了


高分求单片机温度采集系统的课程设计
DS1820提供9位温度读数,构成多点温度检测系统而无需任何外围硬件。对DS1820的使用,多采用单片机实现数据采集。处理时,将DS1820信号线与单片机一位口线相连,单片机可挂接多片DS1820,从而实现多点温度检测系统。由于DS1820只有三个引脚,其中两根是电源线VDD和GND,另外两根用作总线DQ(Data In\/Out),由于其输出和输入...

单片机A\/D温度采样
10位AD采样,那范围就是0~1024.则对应于0~5V的电压。假设你的AD采集回来的数值是:200,那AD采样点的电压为:5V*(200\/1024),约等于是0.97656v.AD采样,通常都是高阻抗的,流入AD采样口的电流很小很小,可以将其忽略掉,则外部电路就是一个 R_18K R_2K R_100 Rx 串联的电路。串联电路中...

我用ADC0809做温度采集,现在换了单片机STC12C2052,好像自带温度采集...
{ unsigned int temp;unsigned char AD_finished;F_CY = 0;ADC_DATA = 0x00; \/\/清ADC_DATA ADC_CONTR = channel; \/\/选择通道 \/\/P1_ADC_EN = 0x01; \/\/设置A\/D转换输入脚 delay(1);ADC_CONTR |= 0x08; \/\/令ADC_START = 1,启动A\/D转换 AD_finished = 0;while(AD_finished ...

在单片机这门课中温度测控是怎么样采集温度的??、
温度传感器(比如DS18B20,PT100,热敏电阻,AD590,热电偶等)+ADC芯片(如ADC0809,ADS1274,TCL2543)+单片机+显示器来实现。

基于单片机的温度数据采集系统设计
基于单片机的温度数据采集系统设计 10 一.设计要求1.被测量温度范围:0~120℃,温度分辨率为0.5℃。2.被测温度点:2个,每2秒测量一次。3.显示器要求:通道号1位,温度4位(精度到小数点后一位)。显示方式为定点显示和... 一.设计要求1.被测量温度范围:0~120℃,温度分辨率为0.5℃。2.被测温度点:2个,每2...

51单片机的温度采集系统设计
配以主回路实现温度的控制。数据处理分为预处理、功能性处理、抗干扰等子功能。输出控制部分主要是数码管显示控制。第二章 确定系统基本结构及硬件设计 本单片机应用系统结构是以单片机为核心外部扩展相关电路的形式。确定了系统中的单片机、存储器分配及输入\/输出方式就可大体确定出单片机应用系统的基本组成。

单片机怎么采集温度输入信号
问题有点笼统,要看用什么样的温度传感器和什么样的单片机,数字温度传感器按传感器提供的接口连接。模拟温度传感器需要通过模拟接口连接,如果你的单片机自带AD,而且满足精度要求,则可以用单片机自带的AD采集,如果单片机不带AD,则需要扩一个AD,通过AD采集温度。

单片机温度采集
一块数据采集卡将32路或者更多的模拟信号集中处理。而数据采集卡直接插入计算机的插槽中,使用计算机直接编程控制采集卡的工作。或者就是使用RS-485总线,在每个数据采集点有独立的CPU系统将得到的温度信息转换为数据,然后通过RS-485总线传回,这样的好处是比上面那种方法更灵活,编程方法更简单。

基于单片机的2路温度采集显示系统?
基于单片机的2路温度采集显示系统,通常包括温度传感器、单片机(如51系列、AVR、ARM Cortex-M等)、显示模块(如LCD1602)、报警装置(如蜂鸣器或LED)及用户交互部件(如按键)。为了为每个通道设置具体的报警温度,你需要在系统设计中考虑以下几个关键步骤:1. 硬件连接 :• 温度传感器 :每一路...

用单片机控制DS18B20温度传感器采集温度的工作过程是不是这样?_百度知 ...
总线上只有一个传感器18B20时,时序:复位→忽略ROM匹配(0xcc)→温度转换(0x44)→延时→复位→忽略ROM匹配→读指令→分别读取温度两个字节 总线上有多个传感器18B20时,时序:复位→ROM匹配(0x55)→发送8字节ROM ID →温度转换(0x44)→延时→复位→ROM匹配→再次发送8字节ROMID→读指令→分别读取温度...

比如县18767091202: 求一个温度采集与显示的单片机课程设计程序 -
召虹乙酰: 首先明确采集温度的范围,如果范围在-20-120度以内就不需要AD采集直接使用数字温度传感器,如DS18B20等.超过该范围需要使用PT100温度探头,当然还有相应的电桥电路及放大电路.最终使用AD采集电压信号并且运用查表法换算出温度值.具体程序由于量较大不可能直接给你但有了一个思路编出此程序应该不难.

比如县18767091202: 求单片机 基于AT89C51单片机的温度采集显示系统设计
召虹乙酰: 推荐:01 基于单片机的数字报警温度计( http://ishare.iask.sina.com.cn/f/11655563.html ); 实时显示温度 ; 高于高限,低于低限,进行声光报警 ; 温度高低限可自由设定 ; 上电显示 543210 ; 读出温度后实时显示温度 ; 温度高于上限温度时,显示"HH****", 并进行声光报警 ; 温度低于下限温度时,显示"LL****", 并进行声光报警 ; 设定键 进行高低限设定 循环为 "实时温度" “L ***” “H ***” ; 可用+ -键进行修改报警值

比如县18767091202: 单片机课程设计 单片机温度的检测与显示的设计
召虹乙酰: 用18b20做很简单啊. 温度的子程序给你,,你重定义一下接口,主程序已经调用出温度了,你送到显示就行了.. /* 延时t毫秒 */ void delay(uint t) { uint i; while(t--) { /* 对于11.0592M时钟,约延时1ms */ for (i=0;i<125;i++) {} } } /* 产生复位脉冲...

比如县18767091202: 求助课程设计基于Labview的单片机温度采集系统 -
召虹乙酰: 单片机采集温度,一般用热点偶、ds18b20、热电阻做温度传感器都可以的,测量温度后通过串口(rs232)传输到电脑 labview显示.

比如县18767091202: 求助课程设计基于Labview的单片机温度采集系统 -
召虹乙酰:可以用这个采集卡,无线,labview,物联网

比如县18767091202: 基于51单片机的多路温度采集系统 -
召虹乙酰: 第一章 确定系统功能与性能 本系统的功能主要有数据采集、数据处理、输出控制.能对0~1000

比如县18767091202: 单片机温控毕业论文
召虹乙酰: 电子设计工程师课程设计 (一) 项目名称:八路温度测量检测系统 (二) 项目要求: 1.手动查询每一点的温度值 2.自动轮流显示每一点温度值 3. 可以设定每一点的温度值,超过温度 上下限时,系统自动报警 (三) 项目内容: 系统组成部分...

比如县18767091202: 基于51单片机的温控器数据采集系统设计毕业论文 -
召虹乙酰: 用单片机+温度传感器DS18B20+数码管或LCD1602就可以.

比如县18767091202: 基于单片机的多点温度测量系统的设计如何实现温度的采集 -
召虹乙酰: DS18B20是单总线数字温度传感器,可以直接采集温度,并把采集到的数据通过单总线的方式,送入单片机,单片机处理数据,送入4路数码管显示就行了,测量的精度,可以通过软件控制.一条线上是可以挂多个DS18B20了,所以可以实现多点温度采集,但是一条线上最多能连接8个18B20.18B20内部光刻ROM中的有64位序列号,可以看作是该DS18B20的地址序列码,通过这个地址序列码区分单总线上的不同器件.这个系统最主要的就是编写单总线的接口函数,这部分要参考18B20的datasheet编写.

比如县18767091202: 基于MC51单片机的热敏电阻测温显示系统课程设计 -
召虹乙酰: 通过热敏电阻的分压接ADC,单片机程序编写设置ADC出来的数字信号与温度的对应关系,其实这个跟温度传感器的原理相似,只不过被温度传感器集成而已,具体可参照温度传感器DS18B20内部结构与程序,LDE显示电路较简单,网上很多

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网