您好,欢迎访问三七文档
生物医学工程设计课程设计题目名称:温度报警器学生学院:电信学院专业班级:生物1201学号:1210950110学生姓名:刘少杰2014年1月12日1概述1系统概述本系统所设计的数字温度计采用的是DS18B20数字温度传感器测温,DS18B20直接输出的就是数字信号,与传统的温度计相比,具有读数方便,测温范围广,测温准确,上下限报警功能。其输出温度采用LCD显示,主要用于对测温比较准确的场所。随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术,该设计控制器使用的是51单片机AT89S52,AT89S52单片机在工控、测量、仪器仪表中应用还是比较广泛的。测温传感器使用的是DS18B20,DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可温度测量电路变得简单、可靠。显示是用LCD实现温度和时间的显示,蜂鸣器用来实现当测量温度超过设定的上限时的报警功能。2系统总体方案2.1系统总体设计框图温度计电路设计总体设计框图如图2-1所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,显示采用LCD报警采用蜂鸣器、LED灯实现,键盘用来设定报警上下限温度。图2-1温度计电路总体设计框图2.1.2各模块简介1.控制模块AT89S52单片机是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含有8kb的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。在单芯片上,拥有灵巧的8位CPU和在系统可编程的Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。3.单片机系统AT89C52单片机引脚介绍AT89C52为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的89C52相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接11.0592MHz晶振。RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40脚)和VSS(20脚)温度传感器时钟,复位电路AT89S52单片机1602液晶显示电路为供电端口,分别接+5V电源的正负端。P0~P3为可编程通用I/O脚,其功能用途由软件编程定义。图4晶振电路图图5复位电路图4.温度传感器模块DS18B20性能独特的单线接口仅需一个端口引脚进行通信简单的多点分布应用无需外部器件可通过数据线供电零待机功耗测温范围-55~+125℃,以0.5℃递增可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度转换为数字应用包括温度控制、工业系统、消费品、温度计和任何热感测系统负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正常工作DS18B20的操作流程5.1602液晶显示电路LCD1602引脚功能说明第1脚:VSS为电源地第2脚:VDD接5V电源正极7第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极图131602液晶显示电路6.DS1302介绍与应用1、DS1302引脚排列:如下图2.引脚说明:1)Vcc1:后备电源,VCC2:主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。2)X1、X2:振荡源,外接32.768kHz晶振。3)RST:复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。4)I/O为串行数据输入输出端(双向)。5)SCLK为时钟输入端。3、数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见数据手册。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。7.软件设计7.1主程序模块主程序需要调用3个子程序,分别为:实时温度显示子程序:驱动液晶1602把实时温度值送出在液晶屏显示中断定时及显示子程序:驱动液晶1602把定时时钟送出在液晶屏显示温度设定、报警子程序:设定报警温度值,当温度超过或者低于该值时产生报警,即驱动液晶屏显示不同的界面主程序流程图:7.2读温度值模块读温度值模块需要调用4个子程序,分别为:DS18B20初始化子程序:让单片机知道DS18B20在总线上且已准备好操作DS18B20写字节子程序:对DS18B20发出命令DS18B20读字节子程序:读取DS18B20存储器的数据延时子程序DS18B20操作时的时序控制7.3中断模块中断采用T0定时器方式1,初始值定时为50ms,并不断计数。来模拟时钟,中断模块流程图:开始对温度传感器进行设置,读取温度,对中断定时数据处理转化显示温度时钟,温度报警返回开始中断入口定时器重置初值计数值加1否,返回计数1秒?1分?1时?是,显示时钟8.调试与结果分析本次实验我们采用LCD实现温度和时间的显示,蜂鸣器用来实现当测量温度超过设定的上限时的报警功能。当温度值显示27摄氏度左右时报警电路开始发出滴滴的低沉声音,但是可惜的是我没法拿键盘设定报警上下限温度。本来是这样设想的当温度低于下限(15℃)值时二极管发光,当室温高于上限(27℃)时蜂鸣器报警,发出有规律的声音。通过按键调节温度上下限,使当前外界温度的范围包含在温度传感器的上下限内,从而使得蜂鸣器关闭和二极管光灭,但是这部分功能没得到实现。/*********************************************************************************普中科技--------------------------------------------------------------------------------*实验名:DS1302时钟显示试验*实验说明:LCD1602显示时钟信息*连接方式:见连接图*注意:*******************************************************************************/#includereg51.h#includelcd.h#includeds1302.h#includetemp.hvoidLcdDisplay();voidLcdDisplaytemp(int);中断返回voidbuzzer(void);sbitBeep=P1^0;sbitLED1=P1^1;/*******************************************************************************函数名:delay*函数功能:延时函数*输入:无*输出:无*******************************************************************************/voiddelay(unsignedinti){charj;for(i;i0;i--)for(j=200;j0;j--);}/********************************************************************************函数名:main*函数功能:主函数*输入:无*输出:无*******************************************************************************//*------------------------------------------------????,??????unsignedintt,????unsignedint??????????,??????0~65535------------------------------------------------voidDelayPWM(unsignedintt){while(--t);}*/voidmain(){floattempwendu=0;LED1=1;LcdInit();Ds1302Init();LcdWriteCom(0xcf);LcdWriteData('C');while(1){Ds1302ReadTime();LcdDisplay();tempwendu=Ds18b20ReadTemp();LcdDisplaytemp(tempwendu);tempwendu=tempwendu*0.0625*100+0.5;if(tempwendu2700)buzzer();}}/********************************************************************************函数名:LcdDisplay()*函数功能:显示函数*输入:无*输出:无*******************************************************************************/voidLcdDisplay(){LcdWriteCom(0xc0);//1602
本文标题:高温度报警器
链接地址:https://www.777doc.com/doc-1951641 .html