基于51单片机的多点温度测量系统设计.docx

上传人:b****8 文档编号:8961402 上传时间:2023-05-16 格式:DOCX 页数:24 大小:201.74KB
下载 相关 举报
基于51单片机的多点温度测量系统设计.docx_第1页
第1页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第2页
第2页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第3页
第3页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第4页
第4页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第5页
第5页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第6页
第6页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第7页
第7页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第8页
第8页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第9页
第9页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第10页
第10页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第11页
第11页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第12页
第12页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第13页
第13页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第14页
第14页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第15页
第15页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第16页
第16页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第17页
第17页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第18页
第18页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第19页
第19页 / 共24页
基于51单片机的多点温度测量系统设计.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机的多点温度测量系统设计.docx

《基于51单片机的多点温度测量系统设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的多点温度测量系统设计.docx(24页珍藏版)》请在冰点文库上搜索。

基于51单片机的多点温度测量系统设计.docx

基于51单片机的多点温度测量系统设计

第一章摘要…………………………………………………………………2

第二章引言…………………………………………………………………2

第三章DS18B20温度传感器相关介绍……………………………………3

3.1DS18B20的特点………………………………………………3

3.2DS18B20工作过程及时序……………………………………3

3.3DS18B20结构图………………………………………………5

第四章LED数码管介绍……………………………………………………8

第五章硬件的设计……………………………………………………10

5.1温度采集模块………………………………………………11

5.2温度显示模块………………………………………………11

第六章软件的设计…………………………………………………………12

6.1读18B20的ROM系列号程序………………….……..……12

6.2温度的转换与读取程序………………………………………17

6.3温度在数码管显示的程序……………………………………23

第七章心得体会……………………………………………………………26

参考资料……………………………………………………………27

 

第一章摘要

本次课程设通过基于MCS-51系列单片机SST80C51和DS18B20温度传感器检测温度,熟悉芯片的使用,温度传感器的功能,LED数码管的使用,汇编语言的设计;并且把我们这一年所学的数字和模拟电子技术、检测技来掌握相关知识。

第二章引言

在人类的生活环境中,温度扮演着极其重要的角色。

无论你生活在哪里,从事什么工作,无时无刻不在与温度打着交道。

自18世纪工业革命以来,工业发展对是否能掌握温度有着绝对的联系。

在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说几乎80%的工业部门都不得不考虑着温度的因素。

温度对于工业如此重要,由此推进了温度传感器的发展。

进入21世纪后,温度传感器正朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。

在工农业生产中,温度检测及其控制占有举足轻重的地位,随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测和显示系统已经应用于诸多领域。

要达到较高的测量精度需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差等问题,使温度检测复杂化。

单片机以其功能强、体积小、可靠性高、造价低和开发周期短等优点,成为自动化和各个测控领域中必不可少且广泛应用的器件,尤其在日常生活中也发挥越来越大的作用。

采用单片机对温度采集进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控数据的技术指标,从而能够大大提高产品的质量和数量。

 

第三章DS18B20温度传感器相关介绍

3.1DS18B20的特点:

(1)独特的单线接口方式:

DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

(2)在使用中不需要任何外围元件。

(3)可用数据线供电,电压范围:

+3.0~+5.5V。

(4)测温范围:

-55-+125℃。

固有测温分辨率为0.5℃。

(5)通过编程可实现9-12位的数字读数方式。

(6)用户可自设定非易失性的报警上下限值。

(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温.

(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。

3.2DS18B20工作过程及时序

DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。

高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。

初始时,计数器1预置的是与-55℃相对应的一个预置值。

以后计数器1每一个循环的预置数都由斜率累加器提供。

为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。

计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需要的计数个数。

DS18B20内部的比较器以四舍五入的量化方式确定温度寄存器的最低有效位。

在计数器2停止计数后,比较器将计数器1中的计数剩余值转换为温度值后与0.25℃进行比较,若低于0.25℃,温度寄存器的最低位就置0;若高于0.25℃,最低位就置1;若高于0.75℃时,温度寄存器的最低位就进位然后置0。

这样,经过比较后所得的温度寄存器的值就是最终读取的温度值了,其最后位代表

0.5℃,四舍五入最大量化误差为±1/2LSB,即0.25℃。

温度寄存器中的温度值以9位数据格式表示,最高位为符号位,其余8位以二进制补码形式表示温度值。

测温结束时,这9位数据转存到暂存存储器的前两个字节中,符号位占用第一字节,8位温度数据占据第二字节。

DS18B20测量温度时使用特有的温度测量技术。

DS18B20内部的低温度系数振荡器能产生稳定的频率信号;同样的,高温度系数振荡器则将被测温度转换成频率信号。

当计数门打开时,DS18B20进行计数,计数门开通时间由高温度系数振荡器决定。

芯片内部还有斜率累加器,可对频率的非线性度加以补偿。

测量结果存入温度寄存器中。

一般情况下的温度值应该为9位,但因符号位扩展成高8位,所以最后以16位补码形式读出。

DS18B20工作过程一般遵循以下协议:

初始化——ROM操作命令——存储器操作命令——处理数据

初始化

单总线上的所有处理均从初始化序列开始。

初始化序列包括总线主机发出一复位脉冲,接着由从属器件送出存在脉冲。

存在脉冲让总线控制器知道DS1820在总线上且已准备好操作。

ROM操作命令

一旦总线主机检测到从属器件的存在,它便可以发出器件ROM操作命令之一。

所有ROM操作命令均为8位长。

这些命令列表如下:

ReadROM(读ROM)[33h]此命令允许总线主机读DS18B20的8位产品系列编码,唯一的48位序列号,以及8位的CRC。

此命令只能在总线上

仅有一个DS18B20的情况下可以使用。

如果总线上存在多于一个的从属器件,那么当所有从片企图同时发送时将发生数据冲突的现象(漏极开路会产生线与的结果)。

MatchROM(符合ROM)[55h]此命令后继以64位的ROM数据序列,允许总线主机对多点总线上特定的DS18B20寻址。

只有与64位ROM序列严格相符的DS18B20才能对后继的存贮器操作命令作出响应。

所有与64位ROM序列不符的从片将等待复位脉冲。

此命令在总线上有单个或多个器件的情况下均可使用。

SkipROM(跳过ROM)[CCh]在单点总线系统中,此命令通过允许总线主机不提供64位ROM编码而访问存储器操作来节省时间。

如果在总线上存在多于一个的从属器件而且在SkipROM命令之后发出读命令,那么由于多个从片同时发送数据,会在总线上发生数据冲突(漏极开路下拉会产生线与的效果)。

SearchROM(搜索ROM)[F0h]当系统开始工作时,总线主机可能不知道单线总线上的器件个数或者不知道其64位ROM编码。

搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。

AlarmSearch(告警搜索)[ECh]此命令的流程与搜索ROM命令相同。

但是,仅在最近一次温度测量出现告警的情况下,DS18B20才对此命令作出响应。

告警的条件定义为温度高于TH或低于TL。

只要DS18B20一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值或者改变TH或TL的设置,使得测量值再一次位于允许的范围之内。

贮存在EEPROM内的触发器值用于告警。

存储器操作命令

WriteScratchpad(写暂存存储器)[4Eh]这个命令向DS18B20的暂存器中写入数据,开始位置在地址2。

接下来写入的两个字节将被存到暂存器中的地址位置2和3。

可以在任何时刻发出复位命令来中止写入。

ReadScratchpad(读暂存存储器)[BEh]这个命令读取暂存器的内容。

读取将从字节0开始,一直进行下去,直到第9(字节8,CRC)字节读完。

如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。

ConvertT(温度变换)[44h]这条命令启动一次温度转换而无需其他数据。

温度转换命令被执行,而后DS18B20保持等待状态。

如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于做时间转换的话,DS18B20将在总线上输出“0”,若温度转换完成,则输出“1”。

如果使用寄生电源,总线控制器必须在发出这条命令后立即起动强上拉,并保持500ms。

处理数据:

DS18B20的高速暂存存储器由9个字节组成,其分配如图3所示。

当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。

单片机可通过单线接口读到该数据,读取时低位在前,高位在后。

           

            

 

DS18B20温度数据表

上表是DS18B20温度采集转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于或等于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

温度转换计算方法举例:

例如当DS18B20采集到+125℃的实际温度后,输出为07D0H,则:

实际温度=07D0H╳0.0625=2000╳0.0625=1250C。

例如当DS18B20采集到-55℃的实际温度后,输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作为计算),则:

实际温度=370H╳0.0625=880╳0.0625=550C。

3.3DS18B20结构图

 

图1管脚排列图

在TO-92和SO-8的封装中引脚有所不同,具体差别请查阅PDF手册,在TO-92封装中引脚分配如下:

1(GND):

2(DQ):

单线运用的数据输入输出引脚

3(VDD):

可选的电源引脚

第四章LED数码管的介绍

LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。

这些段分别由字母a,b,c,d,e,f,g,dp来表示。

当数码管特定的段加上电压后,这些特定的段就会发亮。

一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。

发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。

常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。

图2数码管引脚定义图

八段LED数码显示管原理和结构:

数码管分为共阳型和共阴型,共阳极型就是发光管的正极都连在一起,作为一条引线,负极分开。

八段数码发光管就是8个发光二极管组成的,在空间排列成为8字型带个小数点,只要将电压加在阳极和阴极之间相应的笔画就会发光。

8个发光二极管的阳极并接在一起,8个阴极分开,因此称为共阳八段数码管。

相反则为共阴八段数码管。

共阴极八段译码管显码表:

(输入为sp、g、f、e、d、c、b、a)

输入

输出

输入

输出

3FH

0

7FH

8

06H

1

6FH

9

5BH

2

77H

A

4FH

3

7CH

B

66H

4

39H

C

6DH

5

5EH

D

7DH

6

79H

E

07H

7

71H

F

动态显示驱动:

数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制。

当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码

管就不会亮。

 透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

第五章硬件的设计

温度采集系统的硬件部分主要是由温度采集模块、MSC51处理模块、温度显示模块组成:

图3系统硬件框图

 

5.1温度采集模块:

图4温度采集模块电路原理图

两个18B20的输入/输出端口接在同一根总线上,GND接地,VCC端口接+5V电源,DQ端口接单片机的P2.0口

5.2温度显示模块:

图5温度显示模块电路原理图

51单片机通过CH452驱动八共阴极数码管显示,其中CH452的SCL输入端口接单片机的P2.2,SDA输入输出端口接P2.1口。

第六章软件的设计

程序的编写主要分为读18B20的ROM系列号的程序,温度的转换与读取程序,温度在数码管显示的程序。

6.1读18B20的ROM系列号的程序

在编写读18B20的ROM系列号的程序的过程中需要分为几个子程序如:

初始化,写时序,读时序,读ROM系列号等过程

图6读ROM序列号流程图

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharbusf[8];

sbitDQ=P2^0;

/*22.11484MHz时微秒级延时*****************/

voiddelayus(ucharus)

{

while(us--);

}

/*22.11484MHz时毫秒级延时*****************/

voiddelayms(uintxms)

{

uintx,y;

for(x=xms;x>0;x--)

for(y=229;y>0;y--);

}

voidDQ_Init(void)

{

DQ=1;

_nop_();_nop_();

DQ=0;

delayus(150);//492us

DQ=1;

delayus(30);//103us

while(DQ==1);

delayus(150);//492us

}

ucharDQ_read(void)

{

uchari,rdata;

for(i=0;i<8;i++)

{

rdata=rdata>>1;

DQ=1;

_nop_();_nop_();

_nop_();_nop_();

DQ=0;

_nop_();_nop_();

_nop_();_nop_();

DQ=1;

delayus

(2);

if(DQ==1)

{

rdata=rdata|0x80;

}

else

{

rdata=rdata&0x7F;

}

delayus(12);//45us

}

DQ=1;

returnrdata;

}

voidDQ_write(ucharsdata)

{

uchari;

for(i=0;i<8;i++)

{

DQ=1;

_nop_();_nop_();

_nop_();_nop_();

DQ=0;

_nop_();_nop_();

_nop_();_nop_();

if((sdata&0x01)==1)

DQ=1;

else

DQ=0;

delayus(17);//60+us

sdata=sdata>>1;

}

DQ=1;

}

voidget_num()

{

uchari;

DQ_Init();

DQ_write(0x33);

for(i=0;i<8;i++)

{

busf[i]=DQ_read();

}

}

voidmain()

{

delayms(1000);

while

(1)

{

get_num();

delayms(1000);

P0=busf[0];

}

}

6.2温度的转换与读取程序

二.温度的读取与相应转换程序中主要包括初始化,跳过ROM,温度转换,匹配ROM,写入指令读暂存器温度,温度值的转换成实际温度等过程。

图7温度读取与转换流程图

#include

#include"C_Delay.h"

#include"PIN.h"

#include"DS18B20.h"

ucharTH,TL;

uintTEMP;

/*18b20的ROM地址:

单个连接读取*/

unsignedcharrom1[8]={0x28,0xfe,0x97,0x4a,0x03,0x00,0x00,0x86};

unsignedcharrom2[8]={0x28,0xe6,0x7b,0x79,0x02,0x00,0x00,0xec};

/*1-wire通信初始化***********************/

voidDQ_Init(void)

{

DQ=1;

_nop_();_nop_();

DQ=0;

delayus(150);//492us

DQ=1;//释放总线

delayus(30);//103us

while(DQ==1);//等到18B20

delayus(150);//492us

}

/*1-wire通信读1字节***********************/

ucharDQ_read(void)

{

uchari,rdata;

for(i=0;i<8;i++)

{

rdata=rdata>>1;

DQ=1;

_nop_();_nop_();

_nop_();_nop_();

DQ=0;

_nop_();_nop_();

_nop_();_nop_();

DQ=1;

delayus

(2);//12us,加上前面DQ之后的时间,大约14-15us

if(DQ==1)

{

rdata=rdata|0x80;

}

else

{

rdata=rdata&0x7F;

}

delayus(12);//45us

}

DQ=1;

returnrdata;

}

/*1-wire通信写1字节***********************/

voidDQ_write(ucharsdata)

{

uchari;

for(i=0;i<8;i++)

{

DQ=1;

_nop_();_nop_();

_nop_();_nop_();

DQ=0;

_nop_();_nop_();

_nop_();_nop_();

if((sdata&0x01)==1)

DQ=1;

else

DQ=0;

delayus(17);//60+us

sdata=sdata>>1;

}

DQ=1;//释放总线

}

uintget_Temp(ucharon)

{uchari;

DQ_Init();

DQ_write(0xcc);//跳过ROM

DQ_write(0x44);//开始转换温度

delayms(750);

DQ_Init();

DQ_write(0x55);//matchROM

if(on==1)

{

for(i=0;i<8;i++)

{

DQ_write(rom1[i]);

}

}

if(on==2)

{

for(i=0;i<8;i++)

{

DQ_write(rom2[i]);

}

}

DQ_write(0xBE);

TL=DQ_read();

TH=DQ_read();

TEMP=TH;

TEMP=(TEMP<<8)|TL;

TEMP=(unsignedint)(TEMP*0.0625*100+0.5);

returnTEMP;

},

6.3温度在数码管显示的程序

三.温度显示部分程序主要包括初始化,通过CH452进行温度—代码的转换,通过按键逐一显示在LED数码管上等过程。

图8温度显示流程图

#include

#include

#include"CH452CMD.h"

#include"C_Delay.h"

//#include"DS1302.h"

#include"DS18b20.h"

//#include"AD_TLC549.h"

#include"PIN.h"

#defineuintunsignedint

#defineucharunsignedchar

//位定义

//sbitLED=P0^0;

//sbitLED1=P0^1;

//sbitFMQ=P3^3;

//全局变量定义

ucharkeyValue;//键值

//bitisRTCSet=0;//1302是否调时模式

//ucharTimeOn;

//显示缓冲区

ucharDISBUF[8]={0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10};

//DS1302时间缓冲区

ucharDATETIME[7]={0,0x27,0x21,0x19,0x08,0x02,0x11};

//显示数据类型

enumRTCMode{

time=0,

date=1

}RTC_Display=time;

/*CH452显示程序*****************************************/

voidCH452_Fresh_Display(void)

{//配置CH452:

采用BCD译码方式,8个数码管

CH452_Write(CH452_SYSON2);

CH452_Write(CH452_BCD);//BCD译码,8个数码管

CH452_Write(CH452_DIG7|DISBUF[4]);

CH452_Write(CH452_DIG6|DISBUF[5]);

CH452

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2