单片机课程设计之---温度控制及报警系统的设计(共23页).doc

上传人:飞****2 文档编号:14338504 上传时间:2022-05-04 格式:DOC 页数:23 大小:2.73MB
返回 下载 相关 举报
单片机课程设计之---温度控制及报警系统的设计(共23页).doc_第1页
第1页 / 共23页
单片机课程设计之---温度控制及报警系统的设计(共23页).doc_第2页
第2页 / 共23页
点击查看更多>>
资源描述

《单片机课程设计之---温度控制及报警系统的设计(共23页).doc》由会员分享,可在线阅读,更多相关《单片机课程设计之---温度控制及报警系统的设计(共23页).doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上题 目单片机温度控制及报警系统的设计 一、 设计目的学习温度的显示、控制及报警,实现了温度的实时显示及控制。温度控制部分,提出了用DS18B20、89C52单片机及LED的硬件电路完成对温度的实时检测及显示,利用DS18B20与单片机连接由软件与硬件电路配合来实现实时控制及超出设定的上下限温度的报警系统。课题设计的目的:1.掌握用51单片机控制LCD显示字符的方法。 2.掌握用单片机进行显示系统开发的方法。3.掌握单片机软件、硬件调试技术。4.了解单线器件DS18B20的驱动方法。 5.了解LCD显示器的一般驱动原理二、使用主要电子元件1单片机89C52 2. 温度传

2、感器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 系统硬件简介硬件大致构成:核心控制器件AT89C

3、52 ,温度传感器DS18B20,显示器1602A 报警控制LED。3.2.1 硬件设计思想 本设计是以AT89C52为单片机作为控制核心,提出了一种基于DS18B20的单总线多点温度测控系统,多个温度传感节点通过单总线与单片机相联形成分布式系统。单片机通过实时监控温度的变化,通过LCD1602字符型液晶显示各节点温度的数值,当温度值超出所设定的值时,报警器开始报警,从而远程实现对整个温度系统的管理和控制。这种分布式温度测量系统具有成本低廉、传感精度高、系统稳定、易于管理等优点。3.3 系统主要器件3.3.1 核心控制器件AT89C52 AT89C52是一个低电压,高性能CMOS 8位单片机,

4、片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储

5、器可有效地降低开发成本1。AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。主要功能特性: 兼容MCS51指令系统 32个双向I/O口 3个16位可编程定时/计数器中断 2个串行中断 2个外部中断源 2个读写中断口线 低功耗空闲和掉电模式 AT89C52各引脚及管脚如图3-1所示图3-1 AT89C52各引脚概述:AT89C52为40 脚双列直插封装的8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚

6、调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(3239 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控

7、制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。3.3.2 DS1820内部结构及工作原理DS18B20数字温度传感器是DALLAS公司生产的1Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。1.DS18B20产品的特点:l 只要求一个端口即可实现通信。l 在DS18B20中的每个器件上都有独一无二的序列号。l 实际应用中不需要外部任何元器件即可实现测

8、温。l 测量温度范围在55.C到125.C之间。l 数字温度计的分辨率用户可以从9位到12位选择。l 内部有温度上、下限告警设置。TO92封装的DS18B20的引脚排列见图3-3所示。 图3-3 DS18B20的引脚排列DS18B20引脚功能描述见表3-4所示。表3-4 DS18B20引脚功能序号名称引脚功能描述1GND地信号2DQ数字输入输出引脚,开漏单总线接口引脚,当使用寄生电源时,可向电源提供电源3VDD可选择的VDD引脚,当工作于寄生电源时,该引脚必须接地2. DS18B20的内部结构DS18B20的内部框图下图3-5所示。64位ROM存储器件独一无二的序列号。暂存器包含两字节(0和1

9、字节)的温度寄存器,用于存储温度传感器的数字输出。暂存器还提供一字节的上线警报触发(TH)和下线警报触发(TL)寄存器(2和3字节),和一字节的配置寄存器(4字节),使用者可以通过配置寄存器来设置温度转换的精度。暂存器的5、6和7字节器件内部保留使用。第八字节含有循环冗余码(CRC )。 图3-5 DS18B20的内部框图3.3.3 LCD1602A内部结构及工作原理工作原理 LCD内部结构:由CGRAM(自建字型产生器)、DDRAM(数据显示存储器)、CGROM(内含字型产生器)、指令寄存器、数据寄存器、地址计数器、指令译码器等组成 LCD显示原理:利用旋光效应对光进行偏转,再利用偏振片滤去

10、不需要透过光的相应像素,从而实现图像显示。 LCD驱动原理:分成两大步,即写指令,写数据,其中写数据之前要找到显示的位置。本实验所采用的液晶型号为LCD1602A 。它位数多,可显示32位,32个数码管体积相当庞大了,显示内容丰富,可显示所有数字和大、小写字母,程序简单,如果用数码管动态显示,会占用很多时间来刷新显示,而LCD1602A自动完成此功能。1602A采用标准的16脚接口如图3-12所示。图3-12 1602A的接口图第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以

11、通过一个10K的电位器调整对比度(建议接地,弄不好有的模块会不显示)第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第1516脚:空脚(有的用来接背光) 1602A液晶模块内部的字符发生存储器(CGROM)已经存储了不同的点阵字符图形,这些字符有,阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,其中数字与字母同ASCII码兼容。其内部还有自定义字符(CGRAM

12、),可用业存储自已定义的字符。四系统软件设计4.1 软件设计总体思路及主程序流程图本系统采用C语言编写,主程序主要由四部分构成,系统通电后首先初始化系统,依次完成温度采集、温度处理、数据显示、键盘处理等四项功能。温度采集部分主要完成温度测试点的温度数据采集任务;温度处理部分主要是将采集到的温度数据与用户设定的各点上下限温度值进行比较处理,并判断是否超出设定的上下限值,如果超出则led灯亮报警;数据显示部分主要实现温度数据的显示,显示方式根据设计要求支持温度测试点的轮流循环显示和固定显示两种方式;键盘处理部分主要实现用户对系统参数的设置,结合显示部分,实现用户与系统之间的人机接口。系统软件主流程

13、如图4-1所示。 开始系统初始化温度采集温度处理数据显示键盘处理图4-1 系统软件总流程图4.2 测温模块测温流程图4-2所示。读温度初始化温度传感器扫描键盘选定所需芯片选定所需芯片进行温度转换读取温度调试显示子程序子程序返回图4-2 DSl8B20操作流程图4.2.1 温度的采集DSl8B20在其ROM中都存有其唯一的48位序列号,在出厂前已写入片内ROM中,主机在进入操作程序前必须逐一接入DSl8B20,用读ROM(33H)命令将该DSl8B20的序列号读出并登录。当主机需要对众多在线DSl8B20的某一个进行操作时首先要发出匹配ROM命令(55H),紧接着主机提供64位序列(包括该DSl

14、8B20的48位序列号)之后的操作就是针对该DSl8B20的,而所谓跳过ROM命令即为之后的操作,是对所有DSl8B20的框图中先有跳过ROM即是启动所有DSl8B20进行温度变换之后通过匹配ROM再逐一地读回每个DSl8B20的温度数据在DSl8B20组成的测温系统中主机在发出跳过ROM命令之后再发出统一的温度转换启动码44H就可以实现所有DSl8B20的统一转换再经过1s后就可以用很少的时间去逐一读取这种方式,使其T值往往小于传统方式7。4.2.2 温度的测量单总线已经挂接了DS18B20。由于已经在上面获取了DS18B20的ROM代码并在AT89C52单片机内部的中建立了测量位置点和传感

15、器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读存储器缓冲指针增一初始化B1=

16、0?否 图4-3 温度测量电路流程4.3 显示模块流程图4-4所示。 忙判断P0.7=1?结束开始液晶初始化送显示地址写指令送显示字符Y忙判断P0.7=1?写数据YNN专心-专注-专业图4-4 LCD显示流程图 4.4 键盘扫描流程图按键处理程序通过扫描按键情况,读取键值。主要完成各点温度传感器上下限报警参数设置和显示模式设置。(1)通过扫描键盘读取键值,流程图如图4-5所示。YN键盘扫描有键闭合延时去键抖动动扫描键盘找到闭合键计算键值闭合键释放建立有效标志返回建立无效标志NYNY图4-5 键盘扫描程序流程图(2)设置报警上、下限值 DS18B20设有温度上下限报警功能。DSl8B20的存储器

17、由两部分组成:一个是9字节的静态RAM,其中第0和第1字节用于存储16位的温度转换值,第2(高温限TH)和第3字节(低温限TL)作为温度报警限值或通用存储器单元供用户使用;另一个是非易失性的EPROM。当静态RAM作为温度报警限值使用时,可以在系统安装和工作前,用写RAM命令4EH将高温限TH和低温限TL写入第2和第3字节单元。由于静态RAM掉电后信息即丢失,因此需要再通过拷贝RAM命令48H将第2和第3字节单元的温度报警限值拷贝到EPROM中。主程序只要在初始化部分使用重调EPROM命令B8H,就可以将EPROM中的温度报警限值重新拷贝到静态RAM中。读取DDRAM或CGRAM中的内容。五电

18、路图和程序1.最终原理图2实物图正面图背面图六本设计总结1、通过本次实验,我们学习了单片机和温度传感器的工作原理、放大器和数码管的工作原理;学会了电路组合设计的方法,掌握了单片机的中断系统与延时程序的编写方法及程序调试方法,仿真机的使用及在线调试的方法,硬件布线设计及焊接工艺等。2、这次实验的不足之处:由于本次设计任务准备的时间不够充分,造成准备的很仓促,出现了许多问题;资料查找不完全,因为单片机型号对不上没烧进单片机,浪费时间和精力。 附录1 软件程序/调用头文件和初始化模块#include#include#include sbit RS =P27;sbit RW =P26;sbit EN

19、=P25;sbit DB0 =P00;sbit DB1 =P01;sbit DB2 =P02;sbit DB3 =P03;sbit DB4 =P04;sbit DB5 =P05;sbit DB6 =P06;sbit DB7 =P07;uchar alarm1 =0x28;uchar alarm2 =0x19;sbit LED1 =P10;sbit LED2 =P11;sbit MODE =P24;sbit UP =P23;sbit DOWN =P22;/LCD驱动模块void Delay100ms();void InitInterupt();void DelayL();void DelayS(

20、);void WriteCommand(unsigned char c);void WriteData(unsigned char c);void ShowChar(unsigned char pos,unsigned char c);void ShowString(unsigned char line,char *ptr);void InitLcd();void delay(unsigned int);void convert();void RdTemp();void check();static char line0= 00:00 ;static char line1= . C ;/* 延

21、时t毫秒 */void delay(uint t)uint i;while(t-)/* 对于11.0592M时钟,约延时1ms */for (i=0;i125;i+) /* 产生复位脉冲初始化DS18B20 */*主程序,读取的温度值最终存放在tplsb和tpmsb变量中。 tplsb其中低4位为二进制的“小数”部分;tpmsb其中高 5位为符号位。真正通过数码管输出时,需要进行到十进 制有符号实数(包括小数部分)的转换。*/ void main(void)char code str1= zhong guo ! ;char code str2=2008-11-15 ;unsigned char

22、 i; DelayL (); InitLcd (); DelayL (); ShowString (0,str1); ShowString (1,str2); for (i=0;i99) line10=0x31; i-=100; line11=i/10+0x30; line12=i%10+0x30; line14=tplsb+0x30; line18=alarm1/10+0x30; line19=alarm1%10+0x30; line110=; line111=C; line112=alarm2/10+0x30; line113=alarm2%10+0x30; line114=; line1

23、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;elsealarm1=alarm1;alarm2=alarm2; / 读取温度while(1); void TxReset(void)uint i;DQ = 0;/*

24、 拉低约900us */i = 100;while (i0)i-;DQ = 1;/ 产生上升沿i = 4;while (i0)i-;/* 等待应答脉冲 */void RxWait(void)uint i;while(DQ);while(DQ);/ 检测到应答脉冲i = 4;while (i0)i-;/* 读取数据的一位,满足读时隙要求 */bit RdBit(void)uint i;bit b;DQ = 0;i+;DQ = 1;i+;i+;/ 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效b = DQ;i = 8;while(i0) i-;return (b);/* 读

25、取数据的一个字节 */uchar RdByte(void)uchar i,j,b;b = 0;for (i=1;i=8;i+)j = RdBit();b = (j1);return(b);/* 写数据的一个字节,满足写1和写0的时隙要求 */void WrByte(uchar b)uint i;uchar j;bit btmp;for(j=1;j1;/ 取下一位(由低位向高位)if (btmp)/* 写1 */DQ = 0;i+;i+;/ 延时,使得15us以内拉高DQ = 1;i = 8;while(i0) i-;/ 整个写1时隙不低于60uselse DQ = 0;i = 8;while(

26、i0) i-;/ 保持低在60us到120us之间DQ = 1;i+;i+;/温度转化模块void convert(void)TxReset();/ 产生复位脉冲,初始化DS18B20RxWait();/ 等待DS18B20给出应答脉冲delay(1);/ 延时WrByte(0xcc);/ skip rom 命令WrByte(0x44);/ convert T 命令/读取温度值模块void RdTemp(void)TxReset();/ 产生复位脉冲,初始化DS18B20RxWait();/ 等待DS18B20给出应答脉冲delay(1);/ 延时WrByte(0xcc);/ skip rom

27、 命令WrByte(0xbe);/ read scratchpad 命令tplsb = RdByte();/ 温度值低位字节(其中低4位为二进制的小数部分)tpmsb = RdByte();/ 高位值高位字节(其中高5位为符号位)tpmsb=tpmsb4;tplsb=(tplsb&0x08)?5:0;/LCD驱动子程序模块 void DelayL () unsigned char i,j; i=0xF0; j=0xFF; while (i-) while (j-); void DelayS () unsigned char i; i=0x1F; while (i-); void WriteCo

28、mmand (unsigned char c) DelayS(); P0=c; EN=0; RS=0; RW=0; _nop_ (); EN=1;EN=0;void WriteData (unsigned char c) DelayS(); P0=c; EN=0; RS=1; RW=0; _nop_ (); EN=1; EN=0; RS=0; void ShowChar (unsigned char pos,unsigned char c) unsigned char p; if (pos=0x10) p=pos+0xB0; else p=pos+0x80; WriteCommand (p);

29、 WriteData(c); void ShowString (unsigned char line,char *ptr) unsigned char l,i; l=line4; for (i=0;i16;i+) ShowChar (l+,* (ptr+i); void InitLcd() DelayL (); P0 = 0; WriteCommand(0x38); DelayS (); WriteCommand(0x38); DelayS (); WriteCommand(0x38); DelayS (); WriteCommand(0x06); WriteCommand(0x0C); Wr

30、iteCommand(0x01); WriteCommand(0x80); void InitInterupt() TMOD=0x21; TL1=0xFD; TH1=0xFD; PX0=1; EA=1; ES=1; PCON=0; TR1=1; SCON=0x50; TL0=0x00; TH0=0x4C; ET0=1; EX0=1; IT0=1; void Delay100ms() unsigned char i,j,k; for (i=0;i8;i+) for (j=0;j25;j+) for (k=0;k=alarm1) LED1=0;elseif(tpmsb=alarm2)&(tpmsb=alarm1) LED1=1; LED2=0;elseLED1=1; LED2=1;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁