版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
年4月19日单片机课程设计之温度控制及报警系统的设计文档仅供参考题目单片机温度控制及报警系统的设计一、设计目的学习温度的显示、控制及报警,实现了温度的实时显示及控制。温度控制部分,提出了用DS18B20、89C52单片机及LED的硬件电路完成对温度的实时检测及显示,利用DS18B20与单片机连接由软件与硬件电路配合来实现实时控制及超出设定的上下限温度的报警系统。课题设计的目的:1.掌握用51单片机控制LCD显示字符的方法。2.掌握用单片机进行显示系统开发的方法。3.掌握单片机软件、硬件调试技术。4.了解单线器件DS18B20的驱动方法。5.了解LCD显示器的一般驱动原理二、使用主要电子元件1.单片机89C522.温度传感器DS18B203.显示器LCD16024.排插5.发光二极管6.电容若干7.电阻若干8.按钮开关若干。9.导线若干10.12MHZ晶振1个三.系统设计思想及主要应用器件3.1系统设计的总体思想根据单片机温度控制要实现的功能,设计了基于ATMEL公司的AT89C52芯片的温度测量系统。这是一种低成本的利用单片机多余I/O口实现的温度检测电路。整个系统硬件部分包括温度检测系统、信号放大系统、A/D转换、单片机、I/O设备、控制执行系统等.。温度控制部分用DS18B20、89C52单片机及LED的硬件电路完成对温度的实时检测及显示。3.2系统硬件简介硬件大致构成:核心控制器件AT89C52,温度传感器DS18B20,显示器1602A报警控制LED。3.2.1硬件设计思想本设计是以AT89C52为单片机作为控制核心,提出了一种基于DS18B20的单总线多点温度测控系统,多个温度传感节点经过单总线与单片机相联形成分布式系统。单片机经过实时监控温度的变化,经过LCD1602字符型液晶显示各节点温度的数值,当温度值超出所设定的值时,报警器开始报警,从而远程实现对整个温度系统的管理和控制。这种分布式温度测量系统具有成本低廉、传感精度高、系统稳定、易于管理等优点。3.3系统主要器件3.3.1核心控制器件AT89C52AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可重复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52能够按照常规方法进行编程,也能够在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可重复擦写的Flash存储器可有效地降低开发成本[1]。
AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
主要功能特性:
·兼容MCS51指令系统·32个双向I/O口·3个16位可编程定时/计数器中断
·2个串行中断
·2个外部中断源
·2个读写中断口线
·低功耗空闲和掉电模式
AT89C52各引脚及管脚如图3-1所示图3-1AT89C52各引脚
概述:AT89C52为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
3.3.2DS1820内部结构及工作原理DS18B20数字温度传感器是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,能够挂很多这样的数字温度计,十分方便。1.DS18B20产品的特点:只要求一个端口即可实现通信。在DS18B20中的每个器件上都有独一无二的序列号。实际应用中不需要外部任何元器件即可实现测温。测量温度范围在-55.C到+125.C之间。数字温度计的分辨率用户能够从9位到12位选择。内部有温度上、下限告警设置。TO-92封装的DS18B20的引脚排列见图3-3所示。图3-3DS18B20的引脚排列DS18B20引脚功能描述见表3-4所示。表3-4DS18B20引脚功能序号名称引脚功能描述1GND地信号2DQ数字输入输出引脚,开漏单总线接口引脚,当使用寄生电源时,可向电源提供电源3VDD可选择的VDD引脚,当工作于寄生电源时,该引脚必须接地2.DS18B20的内部结构DS18B20的内部框图下图3-5所示。64位ROM存储器件独一无二的序列号。暂存器包含两字节(0和1字节)的温度寄存器,用于存储温度传感器的数字输出。暂存器还提供一字节的上线警报触发(TH)和下线警报触发(TL)寄存器(2和3字节),和一字节的配置寄存器(4字节),使用者能够经过配置寄存器来设置温度转换的精度。暂存器的5、6和7字节器件内部保留使用。第八字节含有循环冗余码(CRC)。图3-5DS18B20的内部框图3.3.3LCD1602A内部结构及工作原理工作原理LCD内部结构:由CGRAM(自建字型产生器)、DDRAM(数据显示存储器)、CGROM(内含字型产生器)、指令寄存器、数据寄存器、地址计数器、指令译码器等组成LCD显示原理:利用旋光效应对光进行偏转,再利用偏振片滤去不需要透过光的相应像素,从而实现图像显示。LCD驱动原理:分成两大步,即写指令,写数据,其中写数据之前要找到显示的位置。本实验所采用的液晶型号为LCD1602A。它位数多,可显示32位,32个数码管体积相当庞大了,显示内容丰富,可显示所有数字和大、小写字母,程序简单,如果用数码管动态显示,会占用很多时间来刷新显示,而LCD1602A自动完成此功能。1602A采用标准的16脚接口如图3-12所示。图3-121602A的接口图第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时能够经过一个10K的电位器调整对比度(建议接地,弄不好有的模块会不显示)第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15~16脚:空脚(有的用来接背光)1602A液晶模块内部的字符发生存储器(CGROM)已经存储了不同的点阵字符图形,这些字符有,阿拉伯数字、英文字母的大小写、常见的符号、和日文假名等,每一个字符都有一个固定的代码,其中数字与字母同ASCII码兼容。其内部还有自定义字符(CGRAM),可用业存储自已定义的字符。四.系统软件设计4.1软件设计总体思路及主程序流程图本系统采用C语言编写,主程序主要由四部分构成,系统通电后首先初始化系统,依次完成温度采集、温度处理、数据显示、键盘处理等四项功能。温度采集部分主要完成温度测试点的温度数据采集任务;温度处理部分主要是将采集到的温度数据与用户设定的各点上下限温度值进行比较处理,并判断是否超出设定的上下限值,如果超出则led灯亮报警;数据显示部分主要实现温度数据的显示,显示方式根据设计要求支持温度测试点的轮流循环显示和固定显示两种方式;键盘处理部分主要实现用户对系统参数的设置,结合显示部分,实现用户与系统之间的人机接口。系统软件主流程如图4-1所示。开始开始系统初始化温度采集温度处理数据显示键盘处理图4-1系统软件总流程图4.2测温模块测温流程图4-2所示。读温度读温度初始化温度传感器扫描键盘选定所需芯片选定所需芯片进行温度转换读取温度调试显示子程序子程序返回图4-2DSl8B20操作流程图4.2.1温度的采集DSl8B20在其ROM中都存有其唯一的48位序列号,在出厂前已写入片内ROM中,主机在进入操作程序前必须逐一接入DSl8B20,用读ROM(33H)命令将该DSl8B20的序列号读出并登录。当主机需要对众多在线DSl8B20的某一个进行操作时首先要发出匹配ROM命令(55H),紧接着主机提供64位序列(包括该DSl8B20的48位序列号)之后的操作就是针对该DSl8B20的,而所谓跳过ROM命令即为之后的操作,是对所有DSl8B20的框图中先有跳过ROM即是启动所有DSl8B20进行温度变换之后经过匹配ROM再逐一地读回每个DSl8B20的温度数据在DSl8B20组成的测温系统中主机在发出跳过ROM命令之后再发出统一的温度转换启动码44H就能够实现所有DSl8B20的统一转换再经过1s后就能够用很少的时间去逐一读取这种方式,使其T值往往小于传统方式[7]。4.2.2温度的测量单总线已经挂接了DS18B20。由于已经在上面获取了DS18B20的ROM代码并在AT89C52单片机内部的中建立了测量位置点和传感器64位ROM代码之间的关系表,因此对温度的巡回测量的步骤如下:(1)发跳过ROM命令CCH。(2)发启动所有在线的DS18B20进行温度转换命令44H。(3)延迟1s。(4)发匹配ROM命令55H。(5)按照AT89C51中建立的关系表的顺序取出64位ROM代码发送到单总线。(6)发读温度值命令BEH,读取温度值。(7)进行CRC校验和数据处理后送LCD显示器显示。(8)重复第4步到第7步,直到所有的DS18B20测量处理完。(9)再重复第1步到第8步,进行下一轮的巡回测量。温度测量电路流程如图4-3所示。初始化跳过初始化跳过ROM等待1S初始化设置18B20符合ROM读存储器缓冲指针增一初始化B-1=0?否图4-3温度测量电路流程4.3显示模块流程图4-4所示。忙判断忙判断P0.7=1?结束开始液晶初始化送显示地址写指令送显示字符Y忙判断P0.7=1?写数据YNN图4-4LCD显示流程图4.4键盘扫描流程图按键处理程序经过扫描按键情况,读取键值。主要完成各点温度传感器上下限报警参数设置和显示模式设置。(1)经过扫描键盘读取键值,流程图如图4-5所示。YN键盘扫描YN键盘扫描有键闭合延时去键抖动动扫描键盘找到闭合键计算键值闭合键释放建立有效标志返回建立无效标志NYNY图4-5键盘扫描程序流程图(2)设置报警上、下限值DS18B20设有温度上下限报警功能。DSl8B20的存储器由两部分组成:一个是9字节的静态RAM,其中第0和第1字节用于存储16位的温度转换值,第2(高温限TH)和第3字节(低温限TL)作为温度报警限值或通用存储器单元供用户使用;另一个是非易失性的E²PROM。当静态RAM作为温度报警限值使用时,能够在系统安装和工作前,用写RAM命令4EH将高温限TH和低温限TL写入第2和第3字节单元。由于静态RAM掉电后信息即丢失,因此需要再经过拷贝RAM命令48H将第2和第3字节单元的温度报警限值拷贝到E²PROM中。主程序只要在初始化部分使用重调E²PROM命令B8H,就能够将E²PROM中的温度报警限值重新拷贝到静态RAM中。读取DDRAM或CGRAM中的内容。五.电路图和程序1.最终原理图2.实物图正面图背面图六.本设计总结1、经过本次实验,我们学习了单片机和温度传感器的工作原理、放大器和数码管的工作原理;学会了电路组合设计的方法,掌握了单片机的中断系统与延时程序的编写方法及程序调试方法,仿真机的使用及在线调试的方法,硬件布线设计及焊接工艺等。2、这次实验的不足之处:由于本次设计任务准备的时间不够充分,造成准备的很仓促,出现了许多问题;资料查找不完全,因为单片机型号对不上没烧进单片机,浪费时间和精力。附录1软件程序//调用头文件和初始化模块#include<reg51.h>#include<intrins.h>#include<DigThermo.h>sbitRS=P2^7;sbitRW=P2^6;sbitEN=P2^5;sbitDB0=P0^0;sbitDB1=P0^1;sbitDB2=P0^2;sbitDB3=P0^3;sbitDB4=P0^4;sbitDB5=P0^5;sbitDB6=P0^6;sbitDB7=P0^7;ucharalarm1=0x28;ucharalarm2=0x19;sbitLED1=P1^0;sbitLED2=P1^1;sbitMODE=P2^4;sbitUP=P2^3;sbitDOWN=P2^2;//LCD驱动模块voidDelay100ms();voidInitInterupt();voidDelayL();voidDelayS();voidWriteCommand(unsignedcharc);voidWriteData(unsignedcharc);voidShowChar(unsignedcharpos,unsignedcharc);voidShowString(unsignedcharline,char*ptr);voidInitLcd();voiddelay(unsignedint);voidconvert();voidRdTemp();voidcheck();staticcharline0[]="00:00";staticcharline1[]=".^C";/*延时t毫秒*/voiddelay(uintt){ uinti; while(t--) {/*对于11.0592M时钟,约延时1ms*/ for(i=0;i<125;i++) {}}}/*产生复位脉冲初始化DS18B20*//*主程序,读取的温度值最终存放在tplsb和tpmsb变量中。tplsb其中低4位为二进制的“小数”部分;tpmsb其中高5位为符号位。真正经过数码管输出时,需要进行到十进制有符号实数(包括小数部分)的转换。*/voidmain(void){ charcodestr1[]="zhongguo!"; charcodestr2[]=" -11-15"; unsignedchari;DelayL(); InitLcd(); DelayL(); ShowString(0,str1); ShowString(1,str2); for(i=0;i<15;i++) Delay100ms(); InitInterupt(); do { line1[0]=0x20; delay(1); //延时1ms convert(); //启动温度转换,需要750ms delay(1000); //延时1s RdTemp(); line1[0]=0x20; i=tpmsb; if(i>99) { line1[0]=0x31; i-=100; } line1[1]=i/10+0x30; line1[2]=i%10+0x30; line1[4]=tplsb+0x30; line1[8]=alarm1/10+0x30; line1[9]=alarm1%10+0x30; line1[10]='^'; line1[11]='C'; line1[12]=alarm2/10+0x30; line1[13]=alarm2%10+0x30; line1[14]='^'; line1[15]='C';ShowString(0,line1);Delay100ms(); check(); if(!MODE&&!UP&&DOWN) alarm1=alarm1-0x01; else if(!MODE&&UP&&!DOWN) alarm1=alarm1+0x01; else if(MODE&&!UP&&DOWN) alarm2=alarm2+0x01; else if(MODE&&UP&&!DOWN) alarm2=alarm2-0x01; else { alarm1=alarm1; alarm2=alarm2; } } //读取温度} while(1);}voidTxReset(void){uinti; DQ=0;/*拉低约900us*/ i=100; while(i>0) i--;DQ=1; //产生上升沿 i=4; while(i>0) i--;}/*等待应答脉冲*/voidRxWait(void){uinti; while(DQ); while(~DQ); //检测到应答脉冲 i=4; while(i>0) i--;}/*读取数据的一位,满足读时隙要求*/bitRdBit(void){uinti; bitb; DQ=0; i++; DQ=1; i++;i++; //延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效 b=DQ; i=8; while(i>0)i--; return(b);}/*读取数据的一个字节*/ucharRdByte(void){uchari,j,b; b=0; for(i=1;i<=8;i++) {j=RdBit(); b=(j<<7)|(b>>1);} return(b);}/*写数据的一个字节,满足写1和写0的时隙要求*/voidWrByte(ucharb){ uinti; ucharj; bitbtmp; for(j=1;j<=8;j++) { btmp=b&0x01; b=b>>1; //取下一位(由低位向高位) if(btmp) {/*写1*/ DQ=0; i++;i++; //延时,使得15us以内拉高 DQ=1; i=8; while(i>0)i--; //整个写1时隙不低于60us } else { DQ=0; i=8; while(i>0)i--; //保持低在60us到120us之间 DQ=1; i++; i++; } }}//温度转化模块voidconvert(void){ TxReset(); //产生复位脉冲,初始化DS18B20 RxWait(); //等待DS18B20给出应答脉冲 delay(1); //延时 WrByte(0xcc); //skiprom命令 WrByte(0x44); //convertT命令}//读取温度值模块voidRdTemp(void){TxReset(); //产生复位脉冲,初始化DS18B20 RxWait(); //等待DS18B20给出应答脉冲 delay(1); //延时 WrByte(0xcc); //skiprom命令 WrByte(0xbe); //readscratchpad命令 tplsb=RdByte(); //温度值低位字节(其中低4位为二进制的"小数"部分)tpmsb=RdByte(); //高位值高位字节(其中高5位为符号位)tpmsb=tpmsb<<4;tpmsb+=(tplsb&0xF0)>>4;tplsb=(tplsb&0x08)?5:0;}//LCD驱动子程序模块voidDelayL(){unsignedchari,j;i=0xF0;j=0xFF;while(i--)while(j--);}voidDelayS(){unsignedchari;i=0x1F;while(i--);}voidWriteCommand(unsignedcharc){DelayS();P0=c;EN=0;RS=0;RW=0;_nop_();EN=1;EN=0;}voidWriteData(unsignedcharc){DelayS();P0=c;EN=0;RS=1;RW=0;_nop_();EN=1;EN=0;RS=0;}voidShowChar(unsignedcharpos,unsi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 8、7、6加几(教案)-一年级上册数学人教版
- 2024年共有产权房购买协议
- 急诊科多学科协作方案
- 中班语言活动教案《醒来了》
- 《简单的组合》(教案)2023-2024学年数学 二年级上册 人教版
- 2024年住宅小区建筑分包合同
- 二年级下册数学导学案-8.2 解决问题 人教新课标
- 2024年企业品牌宣传推广合同
- 医疗行业劳动合同特殊条款研究
- 《第六章 物质的物理属性》(第二课时)复习教学案 2023年中考物理一轮复习
- 【课件】Unit4+Section+B+(Project)课件人教版(2024)七年级英语上册
- 青少年法治教育实践基地建设活动实施方案
- 绿化养护续签合同申请书范文
- 教科(2024秋)版科学三年级上册2.6 我们来做“热气球”教学设计
- 山西省运城市2024-2025学年高二上学期10月月考英语试题
- 4.3《课间》 (教案)-2024-2025学年一年级上册数学北师大版
- 【班主任工作】2024-2025学年秋季安全主题班会教育周记录
- 2024-2030年街舞培训行业市场发展分析及发展趋势前景预测报告
- 橡胶坝工程施工质量验收评定表及填表说明
- 《2024版CSCO胰腺癌诊疗指南》更新要点 2
- +陕西省渭南市富平县2023-2024学年九年级上学期摸底数学试卷
评论
0/150
提交评论