数字温度计带温度报警.docx

上传人:b****4 文档编号:11721753 上传时间:2023-03-31 格式:DOCX 页数:20 大小:104.15KB
下载 相关 举报
数字温度计带温度报警.docx_第1页
第1页 / 共20页
数字温度计带温度报警.docx_第2页
第2页 / 共20页
数字温度计带温度报警.docx_第3页
第3页 / 共20页
数字温度计带温度报警.docx_第4页
第4页 / 共20页
数字温度计带温度报警.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数字温度计带温度报警.docx

《数字温度计带温度报警.docx》由会员分享,可在线阅读,更多相关《数字温度计带温度报警.docx(20页珍藏版)》请在冰豆网上搜索。

数字温度计带温度报警.docx

数字温度计带温度报警

\系统功能要求

1.能够监测电脑工作温度,并实时显示;

2.可以根据需要设定温控范围;

3.根据传感器传输的数据实时启动制冷芯片的工作;

4.电脑工作温度降到正常工作范围后停止制冷。

2.功能分析及主要元器件确定

从系统功能要求可知,此系统的难度不大,系统主要任务可以归纳为几项:

实时温度检

测内容显示,按键设置,制冷单元启动。

下面针对各项功能进行分析设计并选定主要元器件。

1.单片机选择

本设计是一个电脑用只能降温系统,系统运行环境较好,有交流电源,没有强电磁干扰,

系统功能对单片机性能要求不高,常见单片机AT89C51/52即可满足要求。

2.制冷功能设计

利用温度传感器输出信号作为制冷模块的控制信号,当环境温度超出预设温

度上限时启动制冷模块,实现对环境温度的控制。

3.温度检测功能设计

温度检测的原理有模拟检测和精密数字检测。

家庭环境温度适宜且范围较窄,采用数字

温度传感器更适合。

精密数字温度传感器也有多种型号,常用的DS18B20数字温度传感器,

采用一线总线,且在一线总线上可以挂接多个传感器,能检测-55〜+125C范围内温度,在

-10〜85C范围内检测精度0.5C。

因而采用DS18B20数字温度传感器。

3.主要元器件性能介绍

1.AT89C51单片机

AT89C51提供以下标准功能:

4k字节Flash闪速存储器,128字节内部RAM32个I/O

口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振

荡器及时钟电路。

同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

VCC

p慎0/two]

Pi>.

PO.2/MD2)

Pl),J;代D計PH/(A[MI

PX5/(AD?

)Pftb;(AIMIFi>/(.wn

Fa/vpp

mu

ECU知MS⑷

fflIAT89C5I的创出排的

2.DS18B20数字温度传感器

1)主要特性

一线总线,只需要一线与MCU!

信。

一线总线上可挂接多个芯片构成分布式温度传感器网络。

每个芯片都有一个唯一的64位序列号,挂接在一线上的多个芯片依据序列号区别。

检测温度范围-55〜+125C,在-10〜85C范围内检测精度0.5C。

温度转换分辨率9位到12位可编程。

12位分辨率A/D转换时间最大750ms。

待机模式0功率消耗。

电源电压3.0〜5.5v

2)DS18B2C引脚布置

如图5所示,各引脚功能名称如下

DQ:

一线通信线,用于数据输入和输出。

Vcc:

电源电压。

GND电源地。

表5DS18B20的引脚图

3)温度检测

DS18B20的核心功能是直接到数字的温度传感器,通过向DS18B20发送转换命令[44H],开始

一次温度转换,转换需要一定时间才能完成,转换时间的长度与转换分辨率有关。

DS18B20

的转换分辨率可配置为9〜12位,默认值为12位,不同的分辨率对应的转换时间不同。

配置寄存器的结构如图6所示,分辨率的位数由R1和R0的组合决定,其余为无关位,分辨率位数及其对应转换时间如表7所示,通过向DS18B20发送设置命令[4EH],可以设置配置寄

存器中R1与R0的值,选择不同的分辨率。

0

R1

R0

1

1

1

1

1

表6分辨率配置寄存器结构

R1

R0

分辨率/位

最大装换时间/ms

0

0

9

93.75

0

1

10

187.5

1

0

11

375

1

1

12

750

表7分辨率与转换时间

温度转换结果的数字值,以2字节长度存放在DS18B20的暂存器第一、第二字节内,以12

位分辨率为例。

其结构如图8所示。

温度值以补码形式存放,寄存器第二字节为温度值的高

字节,高字节的高5位S表示符号位。

S=0表明温度为正值,此时实际温度值就是寄存器的

数据值。

S=1表明温度为负值,此时实际温度值的绝对值为:

按位取反+1.寄存器低字节(第

一字节)的低4位,表示温度的小数位。

分辨率不同,温度转换时小数位包含的有意义位数不同,9位分辨率小数位只有2的负一次位有意义,其余位为0,精确到0.5C,12位分辨率小数位4位都有意义,精确到0.0625'C.两个字节中的2~6--2~0表示温度的整数部分。

由两字节二进制计算温度值的示例如表9所示

S

S

S

S

S

64

32

16

8

4

2

1

0.5

0.2

1/8

1/1

5

6

图8温度数据寄存器结构

二进制数字值

十六进制数字

温度值

0000011111010000

07D0H

+125'C=1111101.0000

0000010101010000

0550D

+85'C=1010101.0000

0000000110010001

0191H

+25.0625'C=0011001.0001

0000000010100010

00A2H

+10.125'C=0001010.0010

0000000000001000

0008H

+0.5'C=0000000.1000

0000000000000000

0000H

0'C=0000000.0000

1111111111111000

FFF8H

-0.5'C=-0000000.1000

1111111101011110

FF5EH

-10.125'C=-0001010.0010

1111111001101111

FF6FH

-25.0625'C=-0011001.0001

1111110010010000

FC90H

-55'C=-0110111.0000

表9温度值的计算示例

通过向DS18B20发送读温度命令[BEH],可以读取这两字节的温度值,读取时先读取的一字节为低字节。

4)操作命令

通过一线总线访问DS18B20勺协议包括:

初始化、ROM操作命令、内存RAM操乍命令。

1)初始化:

在对DS18B20进行任何操作之前,必须首先初始化DS18B20初始化序列包括

一个发送到DS18B20的复位信号和紧跟着由DS18B20返回的应答信号,表明芯片已准备好接受或发送数据。

如果单片机没有接收到来自DS18B20的应答,则不能进行对DS18B20下一步

操作。

2)ROM操作命令:

DS18B20内部有64位8字节ROM记录着每个DS18B20芯片全球唯一的

序列号,依据序列号,就可以对挂接在一线总线山的多个DS18B20进行区分。

针对64位ROM

的操作命令有5个。

读ROM命令[33H]:

为区分挂接在一线总线上的多个DS18B2Q必须预

先知道每个芯片的各自序列号。

通过发送读ROM命令,DS18B20返回64位序列号。

在读取

序列号时,一线总线上只能有一个DS18B20匹配ROM命令[55H]:

在对同一总线上多个

DS18B20的某个特定进行RAM操作时,必须首先发送该芯片的64位序列号,只有序列号完

全一致的芯片才能接受后续的RAM操作。

应用此命令时首先发送匹配命令,接着发送特定的

4位序列号。

跳过ROM命令[CCH]:

当一线总线上只有一个DS18B20时,由于不可能产生混

淆就没有必要再发送匹配ROM命令,为省时就发送一个跳过序列号匹配命令。

当总线挂接多

个芯片,不能跳过序列号匹配过程,即必须先选择特定的芯片。

搜索ROM命令[F0H]:

此命令搜索总线上挂接芯片的数量并获取各个芯片的序列号。

当总线上只有一个芯片时,用读ROM命令来获取其64位序列号,当总线上有多个芯片时,必须用

搜索命令。

但此命令的执行过程非常繁琐,最好应用读ROM命令分别读取序列号。

3)RAM操作指令

DS18B20内部有9字节暂存器RAM记录着当前转换的温度值,对芯片的配置设置等内容,如表10为暂存器分布结构。

其中重要的第一字节和第二字节,存放转换的温度值,第三、四、五存放用户对芯片的设置值。

针对RAM的操作命令有6个,其中重要的有3个。

写暂存器命令[4EH]:

该命令用来写用户的配置参数到DS18B20中,用户配置参数为3字节,

执行此命令时必须完整写入3字节内容。

字节序号

内容

0

温度值低字节

1

温度值高字节

2

TH/用户字节1

3

TL/用户字节2

4

配置

5

保留

6

保留

7

保留

8

CRC校验值

表10暂存器分布结构

读暂存器命令[BEH]:

读命令用来读取温度值,温度值存放在2字节内存中,读取时第一次

读取的是温度低字节,第二次读取的是温度高字节。

也可以连续读出暂存器的所有9字节,

通常,只读出存放温度值的头两字节。

温度转换命令[44H]:

转换命令用来启动一次温度转换,将当前的物理温度转换位数字值。

根据配置的分辨率不用,转换一次所需要的转换时间不同,在读取温度钱,要等待本次温度

转换结束,才能读出正确的当前温度值。

因此在编程时,要首先调用温度转换命令启动温度

转换,然后延时相应于分辨率的转换时间再来读温度值。

3.制冷芯片

热电制冷又称温差电制冷,由于目前热电制冷采用的材料都是半导体材料,因此热电制冷也被称为半导体制冷。

它是塞贝克效应的逆效应帕尔帖效应在制冷技术方面的应用,是-种新型制冷方式。

如图1所示,其原理是通过半导体材料的温差效应,使直流电通过由两种不同半导体材料串联成的电偶时,在电偶对的两端将吸收或放出热量。

如果在放热端安装散热装置,吸热端就能通过热量输送制成简单方便的新型制冷器;当改变

直流电方向时,又能达到制热的效果。

热电制冷系统仅包括冷端、热端、电源、电路等,即它不需要制冷剂。

其次其工质是在固体中传导的电子,无工质泄漏,且无机械运动,无噪声,体积小,可靠性强。

半导体制冷片热惯性非常小,制冷制热时间很快,在热端散热良好冷端空载的情况下,通电不到一分钟,制冷片就能达到最大温差。

第三,其冷量调节范围宽,冷热转换快。

因此,在某些地方,有着压缩式制冷机无法替代的作用。

第四,半导体制冷片是电流换能型片件,通过输入电流的控制,可实现高精度的温度控制,再加上温度检测和控制手段,很容易实现遥控、程控、计算机控制,便于组成自动控制系统。

第五,半导体制冷片的单个制冷元件对的功率很小,但组合成电堆,用同类型的电堆串、并联的方法组合成制冷系统的话,功率就可以做的很大,因此制冷功率可以做到几毫瓦到上万瓦的范围。

目前,半导体热电堆制冷、发电技术已经在国防、医疗、科研、通讯、航海、农业、动力以及工业生产等各领域得到了广泛的应用。

在日常生活方面也应用于空调、冷热两用箱、饮水机、电子信箱等。

在实验室装置方面应用于冷阱、冷箱、冷槽、电子低温测试装置、各种恒温、高低温实验仪片。

在医疗方面应用于冷力、冷合、白内障摘除片、血液分析仪等。

在军事方面应用于导弹、雷达、潜艇等方面的红外线探测、导航系统。

在专用装置方面:

石油产品低温测试仪、生化产品低温测试仪、细菌培养箱、恒温显影槽、电脑等。

但是,由于半导体材料,电源和热端散热等方面的影响,热电制冷与常规的压缩制冷相比,仍然存在着制冷效率低等问题。

4.硬件设计

依据以上主要元件原理,以及各元件对数据总线,I/O口、外部中断、内存等资源的占用,合理分配资源。

原理图见附录一。

五,程序设计

所有的程序都已在keil系统中编写,调试编写,调试通过,利用开发板将程序下载到AT89C5仲,经过电路板的运行,证明系统能够运行并能实现预期的功能。

(程序见附录二)

参考文献:

[1]《模拟电子技术基础》,童诗白,华成英著,北京:

高等教育出版社,2000

年;

[2]《C程序设计》,谭浩强著,北京:

清华大学出版社,2005年;

[3]《数字电子技术基础》,阎石著,北京:

高等教育出版社,2005年;

[4]《电子电路设计》,刘征宇著,福建:

福建科学技术出版社,2004年;

[5]《单片机C语言入门》,孙春亮著,北京:

人民邮电出版社,2008年;

[6]《单片机原理及应用》,李建忠著,西安:

西安电子科技大学,2002年;

[7]《KeilCx51V7.0单片机高级语言编程与uVision2应用实践》徐爱钧彭秀华编著,北京:

电子工业出版社,2006年;

附录一:

 

k—

4

\

■-

1

r

-

T

T

B00S

ik■

F3;ra=

I—I—

k

-U-rL->

 

附录二:

#include

#defineuintunsignedint#defineucharunsignedchar#defineSETP3_1#defineDECP3_2

#defineADDP3_3

#defineBEEPP3_6#defineALAMP1_2#defineDQP3_7bitshanshuo_st;

bitbeep_st;sbitDIAN=P0A5;ucharx=0;

signedcharm;

ucharn;

ucharset_st=0;

signedcharshangxian=38;signedcharxiaxian=5;

//宏定义

//定义调整键

//定义减少键

//定义增加键

//定义蜂鸣器

//定义灯光报警

//定义DS18B20总线I/O

//闪烁间隔标志

//蜂鸣器间隔标志

〃小数点

//计数器

//温度值全局变量

//温度值全局变量

//状态标志

//上限报警温度,默认值为38

〃下限报警温度,默认值为38

code

//ucharcodeLEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};uchar

LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xD

C,0x9B,0x8B};

//=====================================================================

〃====================================DS18B20==========================

//=====================================================================/*****延时子程序*****/

voidDelay_DS18B20(intnum)

{

while(num--);

}

/*****初始化DS18B20*****/

voidInit_DS18B20(void)

{

unsignedcharx=0;

DQ=1;//DQ复位

Delay_DS18B20(8);//稍做延时

DQ=0;//单片机将DQ拉低

Delay_DS18B20(80);//精确延时,大于480us

DQ=1;//拉高总线

Delay_DS18B20(14);

x=1则初始化失败

x=DQ;〃稍做延时后,如果x=0则初始化成功,

Delay_DS18B20(20);

}

/*****^读^个字^节*****/unsignedcharReadOneChar(void){

unsignedchari=0;

unsignedchardat=0;

for(i=8;i>0;i--)

{

DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

Delay_DS18B20(4);

}

return(dat);

}

/*****•写.个字^节*****/voidWriteOneChar(unsignedchardat){

unsignedchari=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=dat&0x01;

Delay_DS18B20(5);

DQ=1;

dat>>=1;

}

/*****

读取温度*****/

unsignedintReadTemperature(void)

{

unsignedchara=0;

unsignedcharb=0;

unsignedintt=0;

floattt=0;

Init_DS18B20();

WriteOneChar(OxCC);//跳过读序号列号的操作

WriteOneChar(0x44);//启动温度转换

Init_DS18B20();

WriteOneChar(OxCC);//跳过读序号列号的操作

WriteOneChar(OxBE);//读取温度寄存器

a=ReadOneChar();〃读低8位

b=ReadOneChar();//读高8位

t=b;

t<<=8;

t=t|a;

tt=t*0.0625;

t=tt*10+0.5;//放大10倍输出并四舍五入

return(t);

}

//=====================================================================

//=====================================================================

//=====================================================================

/*****延时子程序*****/

voidDelay(uintnum)

{

while(--num);

}

/*****初始化定时器0*****/

voidInitTimer(void)

{

TMOD=0x1;

TH0=0x3c;

TL0=0xb0;//50ms(晶振12M)

}

/*****

读取温度*****/

voidcheck_wendu(void)

{

uinta,b,c;

c=ReadTemperature()-5;

a=c/100;

b=c/10-a*10;

m=c/10;

n=c-a*100-b*10;

if(m<0){m=0;n=0;}

if(m>99){m=99;n=9;}

}

/*****显示开机初始化等待画面*****/

voidDisp」nit(void)

{

P0=~0x80;//刚开机时数码管显示

P2=0x7F;

Delay(500);

P2=0xDF;

Delay(500);

P2=0xF7;

Delay(500);

P2=0xFD;

Delay(500);

P2=0xFF;//关闭显示

}

/*****显示温度子程序*****/

voidDisp_Temperature(void)〃显示温度

{

P0=~0x98;//显示C

P2=0x7F;

Delay(300);

P2=0xFF;

P0=~LEDData[n];

//显示个位

P2=0xDF;

Delay(300);

P2=0xFF;

P0=~LEDData[m%10];

〃显示十位

DIAN=0;

//显示小数点

P2=0xF7;

Delay(300);

P2=0xFF;

P0=~LEDData[m/10];

//显示百位

P2=0xFD;

Delay(300);

P2=0xFF;

//关闭显示

}

/*****显示报警温度子程序*****/

voidDisp_alarm(ucharbaojing)

{

P0=~0x98;//显示C

P2=0x7F;

Delay(300);

P2=0xFF;

P0=~LEDData[baojing%10];//显示十位

P2=OxDF;

Delay(300);

P2=0xFF;

P0=~LEDData[baojing/1O];//显示百位

P2=0xF7;

Delay(300);

P2=0xFF;

if(set_st==1)P0=~0xCE;

elseif(set_st==2)P0=~0x1A;//上限H、下限L标示

P2=0xFD;

Delay(300);

〃关闭显示

P2=0xff;

}

/*****扌报警子程^序*****/voidAlarm(){

if(x>=10){beep_st=~beep_st;x=0;}

if((m>=shangxian&&beep_st==1)||(m

}else

{voidmain(void)

{

uint乙

InitTimer();//初始化定时器

EA=1;//全局中断开关

TR0=1;

ET0=1;//开启定时器0

IT0=1;

IT仁1;

check_wendu();〃检测温度

check_wendu();

for(z=0;z<300;z++)//显示开机画面

{

Disp_init();

}

while

(1)

{

if(SET==O)〃设置键键下

{

Delay(2000);

do{}while(SET==0);

set_st++;x=O;shanshuo_st=1;if(set_st>2)set_st=0;

}

if(set_st==0)

{

EXO=O;//关闭外部中断0

EX仁0;//关闭外部中断1

check_wendu();

Disp_Temperature();//显示温度

Alarm();〃报警检测

}

elseif(set_st==1)

{

BEEP=1;II关闭蜂鸣器

ALAM=1;

EX0=1;II开启外部中断0

EX1=1;II开启外部中断1

if(x

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

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1