温度检测显示与报警系统.docx

上传人:b****8 文档编号:10814711 上传时间:2023-02-23 格式:DOCX 页数:23 大小:434.57KB
下载 相关 举报
温度检测显示与报警系统.docx_第1页
第1页 / 共23页
温度检测显示与报警系统.docx_第2页
第2页 / 共23页
温度检测显示与报警系统.docx_第3页
第3页 / 共23页
温度检测显示与报警系统.docx_第4页
第4页 / 共23页
温度检测显示与报警系统.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

温度检测显示与报警系统.docx

《温度检测显示与报警系统.docx》由会员分享,可在线阅读,更多相关《温度检测显示与报警系统.docx(23页珍藏版)》请在冰豆网上搜索。

温度检测显示与报警系统.docx

温度检测显示与报警系统

温度检测显示与报警系统

光电与通信工程学院

课程设计报告书

课设名称:

温度检测、显示与报警系统

年级专业及班级:

姓名:

学号:

指导老师:

评定成绩:

教师评语:

 

指导老师签名:

2013年6月27日

摘要

温度是一种最基本的环境参数,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。

温度是一个十分重要的物理量,对它的测量与控制有十分重要的意义。

随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度:

如大气及空调房中温度的高低,直接影响着人们的身体健康;粮仓温度的检测,防止粮食发霉,最大限度地保持粮食原有新鲜品质,达到粮食保质保鲜的目的;工业易燃品的存放。

本次课程设计介绍了以STC89C51单片机为核心的温度检测报警系统的工作原理和设计方法。

温度信号由温度传感器芯片DS18B20采集,并以数字信号的方式传送给单片机,单片机再控制数码管驱动芯片74LS573驱动4位分立式数码管显示实时温度,当检测到的温度超出了给定的温度范围(默认下限为20℃,默认上限为35℃),系统将输出报警声。

本系统的主要硬件电路包括:

温度检测电路,数码管驱动电路,报警电路。

另外本系统的软件部分占了很大的比重,主要的软件模块包括:

温度传感器程序,数码管驱动及显示程序,报警程序。

系统的主要功能及工作流程

总体设计框图:

①主电源引脚(2根)

VCC(Pin40):

电源输入,接+5V电源

GND(Pin20):

接地线

②外接晶振引脚(2根)

XTAL1(Pin19):

片内振荡电路的输入端

XTAL2(Pin20):

片内振荡电路的输出端

③控制引脚(4根)

RST/VPP(Pin9):

复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。

ALE/PROG(Pin30):

地址锁存允许信号

PSEN(Pin29):

外部存储器读选通信号

EA/VPP(Pin31):

程序存储器的内外部选通,接低电平从外部程序存储器读指令,接高电平则从内部程序存储器读指令。

④可编程输入/输出引脚(32根)

STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。

PO口(Pin39~Pin32):

8位双向I/O口线,名称为P0.0~P0.7

P1口(Pin1~Pin8):

8位准双向I/O口线,名称为P1.0~P1.7

P2口(Pin21~Pin28):

8位准双向I/O口线,名称为P2.0~P2.7

P3口(Pin10~Pin17):

8位准双向I/O口线,名称为P3.0~P3.7

2、测量部分

测量部分我们采用美国DALLAS公司生产的DS18B20温度传感器。

2.1DS18B20简介

DS18B20数字温度传感器,该产品采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

2.2封装及接线说明:

DS18B20芯片封装结构:

特点:

独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0V至5.5V无需备用电源测量温度范围为-55°C至+125℃。

华氏相当于是-67°F到257华氏度-10°C至+85°C范围内精度为±0.5°C

2.3DS18B20控制方法

DS18B20有六条控制命令:

温度转换44H:

启动DS18B20进行温度转换

读暂存器BEH:

读暂存器9个字节内容

写暂存器4EH:

将数据写入暂存器的TH、TL字节

复制暂存器48H:

把暂存器的TH、TL字节写到E2RAM中

读电源供电方式B4H:

启动DS18B20发送电源供电方式的信号给主CPU

2.4DS18B20的初始化

2.5DS18B20的写操作

2.6DS18B20的读操作

3、显示部分

内部的四个数码管共用a~dp这8根数据线,为人们的使用提供了方便,因为里面有四个数码管,所以它有四个公共端,加上a~dp,共有12个引脚,下面便是一个共阴的四位数码管的内部结构图(共阳的与之相反)。

引脚排列依然是从左下角的那个脚(1脚)开始,以逆时针方向依次为1~12脚,上图中的数字与之一一对应。

4、报警部分

本系统设计三个按键,采用查询方式,一个用于选择切换设置报警温度和当前温度,另外两个分别用于设置报警温度的加和减。

见下面报警流程图模块及程序。

二、硬件电路原理描述见附录1

三、软件设计

系统软件程序基于Keiluvsion3开发平台,采用C51语言编写。

本程序采用模块化程序方法,主要分为以下三个模块:

◆LCD初始化显示模块

◆DS18B20数据采集模块

◆温度报警上下限设置模块

程序流程图:

心得体会:

本系统具有较强的实用性,我对DS18B20及一些测量温度的传感器进行了比较,DS18B20不仅测量精度高,稳定性好,体积小巧,而且价格也比较便宜。

另外,本系统还具有较高的扩展性,可以制作时钟,计算器,温度测量于一体,具有较强的实用价值。

在编写DS18B20的测量程序的过程中遇到了很多问题,刚开始总是得不到测量数据,后来仔细读DS18B20说明资料,发现写时序的时候出了点问题,然后我们又按照着DS18B20的通讯时序和接收时序将程序一条条重写,经过调试后,用Proteus仿真软件可以仿真出正确的结果。

但软件仿真与硬件还是有点区别,等我们把电路板做出来的时候,把程序烧录进去,发现出错!

经过再三检查,不断的思考,最后我发现软件仿真是在硬件理想状态下运行的。

因此,我对应的将软件程序进行了一些细节修改。

最后可以在我们做的硬件电路板中进行正确的测量与显示。

在硬件方面,最初数码管都亮不了,通过测量各点的电压,发现少接了一根地线,焊电路板真的应该要很细心的,不然很容易丢三落四的。

之后还是有两个数码管不亮,经过测量,有一条导线坏了,换上导线后,还是有一个数码管不亮,经检查,导线没有问题,是虚焊。

实验过程中,不管是硬件还是软件都遇到了一些问题,不过,最老师和同学的帮助下,以及跟小组成员的积极讨论中,最终都能够解决问题。

同时也深刻意识到了,做实验要细心谨慎。

同时也进一步学习了单片机知识。

参考文献:

单片机原理及应用[编著]徐敏,刘建春,关健生

单片机原理与接口技术[编著]刘军

单片机原理与C51编程[编著]宋彩利孙友仓吴宏岐

51单片机开发入门与经典实例[编著]王守中

51单片机C语言教程编著]杨将新李华军刘东骏

51单片机应用实例详解[编著]杨欣王玉凤刘湘黔

XX文库

附录1系统总硬件电路原理图

附录2系统源程序代码

#include"reg52.h"

#include"intrins.h"//_nop_();延时函数用

#definedmP0//段码输出口

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P2^7;//温度输入口

sbitw0=P2^0;//数码管4

sbitw1=P2^1;//数码管3

sbitw2=P2^2;//数码管2

sbitw3=P2^3;//数码管1

sbitbeep=P1^7;//蜂鸣器和指示灯

sbitset=P2^6;//温度设置切换键

sbitadd=P2^4;//温度加

sbitdec=P2^5;//温度减

inttemp1=0;//显示当前温度和设置温度的标志位为0时显示当前温度

uinth;

uinttemp;

ucharr;

ucharhigh=35,low=20;

ucharsign;

ucharq=0;

uchartt=0;

ucharscale;

//**************温度小数部分用查表法***********//

ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//小数断码表

ucharcodetable_dm[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

//共阴LED段码表"0""1""2""3""4""5""6""7""8""9""不亮""-"

uchartable_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//个位带小数点的断码表

uchardatatemp_data[2]={0x00,0x00};//读出温度暂放

uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用

/*****************11us延时函数*************************/

voiddelay(uintt)

{

for(;t>0;t--);

}

voidscan()

{

intj;

for(j=0;j<4;j++)

{

switch(j)

{

case0:

dm=table_dm[display[0]];w0=0;delay(50);w0=1;//小数

case1:

dm=table_dm1[display[1]];w1=0;delay(50);w1=1;//个位

case2:

dm=table_dm[display[2]];w2=0;delay(50);w2=1;//十位

case3:

dm=table_dm[display[3]];w3=0;delay(50);w3=1;//百位

//else{dm=table_dm[b3];w3=0;delay(50);w3=1;}

}

}

}

//***************DS18B20复位函数************************/

ow_reset(void)

{

charpresence=1;

while(presence)

{

while(presence)

{

DQ=1;_nop_();_nop_();//从高拉倒低

DQ=0;

delay(50);//550us

DQ=1;

delay(6);//66us

presence=DQ;//presence=0复位成功,继续下一步

}

delay(45);//延时500us

presence=~DQ;

}

DQ=1;//拉高电平

}

/****************DS18B20写命令函数************************/

//向1-WIRE总线上写1个字节

voidwrite_byte(ucharval)

{

uchari;

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

{

DQ=1;_nop_();_nop_();//从高拉倒低

DQ=0;_nop_();_nop_();_nop_();_nop_();//5us

DQ=val&0x01;//最低位移出

delay(6);//66us

val=val/2;//右移1位

}

DQ=1;

delay

(1);

}

/****************DS18B20读1字节函数************************/

//从总线上取1个字节

ucharread_byte(void)

{

uchari;

ucharvalue=0;

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

{

DQ=1;_nop_();_nop_();

value>>=1;

DQ=0;_nop_();_nop_();_nop_();_nop_();//4us

DQ=1;_nop_();_nop_();_nop_();_nop_();//4us

if(DQ)value|=0x80;

delay(6);//66us

}

DQ=1;

return(value);

}

/*****************读出温度函数************************/

read_temp()

{

ow_reset();//总线复位

delay(200);

write_byte(0xcc);//发命令

write_byte(0x44);//发转换命令

ow_reset();

delay

(1);

write_byte(0xcc);//发命令

write_byte(0xbe);

temp_data[0]=read_byte();//读温度值的低字节

temp_data[1]=read_byte();//读温度值的高字节

temp=temp_data[1];

temp<<=8;

temp=temp|temp_data[0];//两字节合成一个整型变量。

returntemp;//返回温度值

}

/****************温度数据处理函数************************/

//二进制高字节的低半字节和低字节的高半字节组成一字节,这个字节的二进制转换为十进制后,就是温度值的百、十、个位值,而剩下的低字节的低半字节转化成十进制后,就是温度值的小数部分

/********************************************************/

 

work_temp(uinttem)

{

ucharn=0;

if(tem>6348)//温度值正负判断

{tem=65536-tem;n=1;}//负温度求补码,标志位置1

display[4]=tem&0x0f;//取小数部分的值

display[0]=ditab[display[4]];//存入小数部分显示值

display[4]=tem>>4;//取中间八位,即整数部分的值

display[3]=display[4]/100;//取百位数据暂存

display[1]=display[4]%100;//取后两位数据暂存

display[2]=display[1]/10;//取十位数据暂存

display[1]=display[1]%10;//个位数据

r=display[1]+display[2]*10+display[3]*100;

/////符号位显示判断/////

if(!

display[3])

{

display[3]=0x0a;//最高位为0时不显示

if(!

display[2])

{

display[2]=0x0a;//次高位为0时不显示

}

}

if(n){display[3]=0x0b;}//负温度时最高位显示"-"

}

voidBEEP()

{

if((r>=high&&r<129)||r

{

beep=0;

}

else

{

beep=1;

}

}

//*********设置温度显示转换************//

voidxianshi(inthorl)

{

intn=0;

if(horl>128)

{

horl=256-horl;n=1;

}

display[3]=horl/100;

display[3]=display[3]&0x0f;

display[2]=horl%100/10;

display[1]=horl%10;

display[0]=0;

if(!

display[3])

{

display[3]=0x0a;//最高位为0时不显示

if(!

display[2])

{

display[2]=0x0a;//次高位为0时不显示

}

}

if(n)

{

display[3]=0x0b;//负温度时最高位显示"-"

}

}

//*********按键查询程序**************//

voidkeyscan()

{

inttemp1;//最高温度和最低温度标志位

if(set==0)

{

while

(1)

{

delay(500);//消抖

if(set==0)

{

temp1++;

while(!

set)

scan();

}

if(temp1==1)

{

xianshi(high);

scan();

if(add==0)

{

while(!

add)

scan();

high+=1;

}

if(dec==0)

{

while(!

dec)

scan();

high-=1;

}

}

if(temp1==2)

{

xianshi(low);

if(add==0)

{

while(!

add)

scan();

low+=1;

}

if(dec==0)

{

while(!

dec)

scan();

low-=1;

}

scan();

}

if(temp1>=3)

{

temp1=0;

break;

}

}

}

}

/****************主函数************************/

voidmain()

{

dm=0x00;//初始化端口

w0=0;

w1=0;

w2=0;

w3=0;

for(h=0;h<4;h++)//开机显示"0000"

{

display[h]=0;

}

ow_reset();//开机先转换一次

write_byte(0xcc);//SkipROM

write_byte(0x44);//发转换命令

for(h=0;h<100;h++)//开机显示"0000"

{

scan();

}

while

(1)

{

if(temp1==0)

{

work_temp(read_temp());//处理温度数据

BEEP();

scan();//显示温度值

keyscan();

}

else

keyscan();

}

}

 

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

当前位置:首页 > 高等教育 > 经济学

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

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