《温度检测和报警系统方案.doc》由会员分享,可在线阅读,更多相关《温度检测和报警系统方案.doc(24页珍藏版)》请在三一办公上搜索。
1、目录一、选题背景及研究意义二、总体设计2.1控制部分2.2测量部分2.3显示部分2.4报警部分三、硬件设计四、软件设计五、总结与展望一、选题背景及研究意义温度是一种最基本的环境参数,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。温度是一个十分重要的物理量,对它的测量与控制有十分重要的意义。随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度:如大气及空调房中温度的高低,直接影响着人们的身体健康;粮仓温度的检测,防止粮食发霉,最大限度地保持粮食原有新鲜品质,达到粮食保质保鲜
2、的目的;工业易燃品的存放。测温技术在生产过程中,在产品质量控制和监测以及节约能源等方面发挥了着重要作用。本实验设计实现了工业测温基本功能,同时,在设计实验过程中,运用到单片机、模电、数电、传感器和C+程序设计等知识,这既能加强我们的理论知识与实践的结合,也能够提高我们应用交叉学科知识进行综合设计的能力。二、总体设计总体设计框图:2.1控制部分控制部分是采用单片机STC89C52。2.1.1 STC89C52简介STC89C52是一种带8K字节闪烁可编程可檫除只读存储器的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51
3、指令集和输出管脚相兼容。单片机总控制电路如下图41:2.1.2 复位操作复位操作有上电自动复位相按键手动复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的,其电路如图4-2(a)所示。这佯,只要电源Vcc的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就成了系统的复位初始化。按键手动复位有电平方式和脉冲方式两种。其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图4-2(b)所示;而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的,其电路如图4-2(c)所示:(a)上电复位 (b)按键电平复位 (c)按键脉冲复位图4-2复位电路上述电路图中的电阻
4、、电容参数适用于6MHz晶振,能保证复位信号高电平持续时间大于2个机器周期。本系统的复位电路采用图4-2(b)上电复位方式。2.1.3 STC89C52具体介绍如下: 主电源引脚(2根)VCC(Pin40):电源输入,接5V电源GND(Pin20):接地线外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端XTAL2(Pin20):片内振荡电路的输出端控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器的
5、内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。可编程输入/输出引脚(32根)STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。PO口(Pin39Pin32):8位双向I/O口线,名称为P0.0P0.7P1口(Pin1Pin8):8位准双向I/O口线,名称为P1.0P1.7 P2口(Pin21Pin28):8位准双向I/O口线,名称为P2.0P2.7 P3口(Pin10Pin17):8位准双向I/O口线,名称为P3.0P3.72.1.4 STC89C52主要功能,如下表所示。STC89C52主
6、要功能主要功能特性兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能2.2测量部分测量部分我们采用美国DALLAS公司生产的DS18B20温度传感器。2.2.1 DS18B20简介DS18B20数字温度传感器,该产品采用美国DALLAS公司生产的 DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测
7、温和控制领域。2.2.2封装及接线说明:DS18B20芯片封装结构:特点:独特的一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无需外部元件 可用数据总线供电,电压范围为3.0V至5.5V无需备用电源 测量温度范围为-55 C至+125 。华氏相当于是-67 F到257华氏度 -10 C至+85 C范围内精度为0.5 C2.2.3 DS18B20控制方法DS18B20有六条控制命令:温度转换 44H:启动DS18B20进行温度转换读暂存器 BEH:读暂存器9个字节内容写暂存器 4EH:将数据写入暂存器的TH、TL字节复制暂存器 48H:把暂存器的TH、TL字节写到E2RAM中
8、读电源供电方式 B4H:启动DS18B20发送电源供电方式的信号给主CPU2.2.4 DS18B20的初始化2.2.5 DS18B20的写操作2.2.6 DS18B20的读操作2.3显示部分显示部分是用LCD1602液晶显示2.3.1 LCD1602引脚说明2.4报警部分见下面报警流程图模块及程序。三、硬件设计电路原理图如下:DS18B20与单片机之间用单总线传输;DS18B20的数据口与单片机的P17相连;液晶LCD1602的RS、R/W和E分别于单片机的P4、P25、P26相连;四、软件设计系统软件程序基于Keil uvsion3开发平台,采用C51语言编写。本程序采用模块化程序方法,主要
9、分为以下三个模块: LCD初始化显示模块 DS18B20数据采集模块 温度报警上下限设置模块程序流程图: 源程序:#include#define uchar unsigned char#define uint unsigned intsbit DQ=P17; /ds18b20与单片机连接口sbit RS=P24;sbit RW=P25;sbit EN=P26;sbit K1=P20; sbit K2=P21;sbit K3=P22; sbit LED=P10;sbit beep=P15;unsigned char code str1=temperature is:;unsigned char
10、code str2= ;uchar code LCD1010=0123456789;uchar data disdata16=0x00,0x00,0x00,0x2E,0x00,0xDF,0x20, 0x48,0x3D,0x00,0x00,0x20,0x4C,0x3D,0x00,0x00;uint tvalue; /温度值uchar tflag; /温度正负标志uchar flat,upnum,downnum,temp;/*LCD显示模块*/void delay1ms(unsigned int ms)/延时1毫秒unsigned int i,j; for(i=0;ims;i+) for(j=0;
11、j0;x-)for(y=110;y0;y-);void wr_com(unsigned char com)/写指令/ delay1ms(1); RS=0; RW=0; EN=0; P0=com; /*-LCD数据传送口- */ delay1ms(1); EN=1; delay1ms(1); EN=0;void wr_dat(unsigned char dat)/写数据/ delay1ms(1); RS=1; RW=0; EN=0; P0=dat; /*-LCD数据传送口- */ delay1ms(1); EN=1; delay1ms(1); EN=0;void lcd_init()/初始化设置
12、/delay1ms(15);wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5);void display(unsigned char *p)/显示/while(*p!=0)wr_dat(*p);p+;delay1ms(1);init_play()/初始化显示 lcd_init(); wr_com(0x80);display(str1);wr_com(0xC0); display(str2);
13、 /*DS18B20测温模块*/void delay_18B20(unsigned int i)/延时1微秒 while(i-);void ds1820rst() unsigned char x=0;DQ = 1; /DQ复位delay_18B20(4); /延时DQ = 0; /DQ拉低delay_18B20(100); /精确延时大于480usDQ = 1; /拉高delay_18B20(40); uchar ds1820rd() unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; /给脉冲信号 dat=1; DQ
14、 = 1; /给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); return(dat);void ds1820wr(uchar wdata)unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata=1; read_temp()uchar a,b;ds1820rst(); ds1820wr(0xcc);/ds1820wr(0x44);/ds1820rst(); ds1820wr(0xcc);/ ds1820wr(0xbe);/ a=ds1
15、820rd();b=ds1820rd();tvalue=b;tvalue=8;tvalue=tvalue|a; if(tvalue0x0fff) tflag=0; else tvalue=tvalue+1;tflag=1; tvalue=tvalue*(0.625);/真实温度return(tvalue);void ds1820disp()/温度值显示 uchar i; disdata1=tvalue%1000/100+0x30;/十位数 disdata2=tvalue%100/10+0x30;/个位数 disdata4=tvalue%10+0x30;/小数位 disdata9=LCD10up
16、num/10; disdata10=LCD10upnum%10; disdata14=LCD10downnum/10; disdata15=LCD10downnum%10; if(tflag=0) /+ disdata0=tvalue/1000+0x30;/正温度显示百位数 else /- disdata0=0x2d;/负温度显示负号 wr_com(0xC0);for(i=0;i=upnum|temp=downnum)beep=0;LED=0; else beep=1;LED=1; /*main函数*/void main()init_play();/初始化显示 flat=0; upnum=30
17、; downnum=9; while(1) read_temp();/读取温度 ds1820disp();/显示key();compare(); 五、总结与展望单片机是一门应用性与实践性很强的学科,如何学习单片机?学单片机不仅要学习理论知识,实践操作同样重要。学过单片机的人都有这样的经历。就是把自己写的程序烧录到单片机里面的时候会发现与自己想要的结果又很大的不同。这就是因为缺少实践操作的原因。设计本系统的过程中我们遇到了两大问题:一是软件问题。在编写DS18B20的测量程序的过程中遇到了很多问题,刚开始总是得不到测量数据,后来仔细读DS18B20说明资料,发现写时序的时候出了点问题,然后我们又
18、按照着DS18B20的通讯时序和接收时序将程序一条条重写,经过调试后,用Proteus仿真软件可以仿真出正确的结果。但软件仿真与硬件还是有点区别,等我们把电路板做出来的时候,把程序烧录进去,发现出错!经过再三检查,不断的思考,最后我发现软件仿真是在硬件理想状态下运行的。因此,我对应的将软件程序进行了一些细节修改。最后可以在我们做的硬件电路板中进行正确的测量与显示。二是硬件问题。刚开始画PCB时,没有联系到做实际板的问题。做第一块板的时候遇到了如下问题:画封装与元器件的实际封装大小不一致;过孔的设置太小;导线设置太小;封装画反了等。因为第一块板子的功能还不能顺利的实现,所以我们很认真的检查了电路
19、板,通过电路检测,发现板子的电路有些封装画反了。通过检查和检查板子出现的情况,我们PCB的错误一点点的改正。后来,我们就是这样一点点的检查板子的来完成我们的作品。本系统具有较强的实用性,我对DS18B20及一些测量温度的传感器进行了比较,DS18B20不仅测量精度高,稳定性好,体积小巧,而且价格也比较便宜。另外,本系统还具有较高的扩展性,可以制作时钟,计算器,温度测量于一体,具有较强的实用价值。欢迎您的光临,Word文档下载后可修改编辑.双击可删除页眉页脚.谢谢!希望您提出您宝贵的意见,你的意见是我进步的动力。赠语; 1、如果我们做与不做都会有人笑,如果做不好与做得好还会有人笑,那么我们索性就做得更好,来给人笑吧! 2、现在你不玩命的学,以后命玩你。3、我不知道年少轻狂,我只知道胜者为王。4、不要做金钱、权利的奴隶;应学会做“金钱、权利”的主人。5、什么时候离光明最近?那就是你觉得黑暗太黑的时候。6、最值得欣赏的风景,是自己奋斗的足迹。7、压力不是有人比你努力,而是那些比你牛几倍的人依然比你努力。