《单片机课程设计报告——温度报警器(共34页).doc》由会员分享,可在线阅读,更多相关《单片机课程设计报告——温度报警器(共34页).doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上单片机原理与应用课程设计报告 课程设计名称: 温度报警器设计 专业班级: 13计转本 学生姓名: 张朝柱 肖娜 学 号: 指导教师: 高玉芹 设计时间: 2016-112017-12 成 绩: 信 电 工 程 学 院专心-专注-专业摘 要2009年6月14日随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。本文主要介绍了一个基于AT89C52单片机的测温系统,详细描述了利用液晶显示器件传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感
2、DS18B20的数据采集过程。对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B20与AT89C52结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。关键词: 单片机AT89C51;DS18B20温度传感器;液晶显示LCD1602。目 录1绪论1.1温度报警器简介温度报警器是一种通过DS18
3、B20采集周围温度,单片机来处理数据来报警的一种电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的温度报警器是以芯片为核心,通过编程来实现的。1.2温度报警器的背景与研究意义在日常生活中,温度对于我们并不陌生,它是一个时时刻刻存在的物理量在我们的日常生活中占据了十分重要的地位。温度的大小时刻与我们的生产、生命、安全息息相关。因此对温度的测量与控制对各个行业领域有着很及其重要的作用尤其是在金属冶炼、化学研究、建材生产、食品加工、机械制作、石油提炼等工业领域,占据不可忽视的作用。众所周知,当我们进行陶瓷烧烤,制作陶瓷工艺时,必须很精确的控制其烧烤温度,只要我们
4、控制好其温度,这样才能创造出完美的、无瑕疵的艺术品,一旦温度控制不佳,将会一件次品;另外当我们进行酿酒时,同样也需要对温度进行合理适当的控制,只有这样,我们才能够生产出大家公认的好酒。如此可见,对于温度的检测与把控在我们日常生活以及工业生产占据着举足轻重的地位。目前,在日新月异的生活变化中,工业和农业领域得到了快速的发展与进步,人们的需求也是不断地扩张,对于电子工业领域,自动化的产品无疑是得到大家的欢迎,随着微型处理器功能的不断强大,单片机无疑成了人们心目中最美好的选择,它的出现为人民的生活带来了不可否认利益,对于工业领域,提高了生产效率,方便了人民的生活。然而随着人们的要求越来越高,对现代科
5、学研究,工作,生活,提供更便利的设施需要从单片机技术开始,向着数字控制系统,智能控制方向不断地发展。目前,我们在科技迅速发展的现在社会中不断成长,信息技术已经不知不觉的渗透到我们生活的各个方面。为了确保这些科技产品的安全,减少其对我们生命和财产造成损失,我们首先需要控制它们的温度,确保它们在正常的温度之间正常运行,因研究兼备经济实用为一体的温度报警装置具有重要的意义1.3温度报警器的现状及发展趋势在现代社会中,由于工业过程控制系统的不断发展,特别是计算机领域中微电子技术以及自动控制理论和设计方法的快速发展,相对中国而言,国外一些发达国家在温度监控系统研究中已经成功取得了超前的成绩,具体的表现其
6、自适应、智能化、参数自整定的特点。以德国、日本、美国等发达国家为例,在上个世纪,他们已经成功生产出了一批商业化的、性能优异的温度监控器以及仪表设备,并且已经投入市场,在工业、家庭等领域得到了广泛的应用,而中国才处于研究的初级阶段。2 系统整体方案设计2.1设计目标本设计采用STC89C52单片机为主控芯片,结合外围电路矩阵键盘、液晶显示器LCD1602等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,组成
7、的温度报警器系统,能够实现:1 DS18B20不断采集周围环境温度;2 单片机处理温度的数据显示在DS18B20;3 用户设定温度报警的上限和下限;系统整体设计框图如图2-1所示: 主 控 制 器LCD1062显示温 度 传 感 器单片机复位时钟振荡报警模块图2-1 系统整体设计框图2.2系统的基本方案2.2.1 系统方案选择采用单总线数字温度传感器DS18B20测量温度,直接输出数字信号。便于单片机处理及控制,节省硬件电路。且该芯片的物理化学性很稳定,此元件线形性能好,在0100摄氏度时,最大线形偏差小于1摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20
8、和微控制器AT89C51构成的温度装置,它直接输出温度的数字信号到微控制器。每只DS18B20具有一个独有的不可修改的64位序列号,根据序列号可访问不同的器件。这样一条总线上可挂接多个DS18B20传感器,实现多点温度测量,轻松的组建传感网络。2.2.2 各模块方案选择2.2.2.1 单片机的选择采用STC89C52单片机,它是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。2.2.2.2 温度传感器的选择DS18B20温度
9、传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以9或12位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20内部结构主要由四部分组成:
10、64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,高速暂存器。DS18B20的管脚排列如图3.5所示。64位光刻ROM是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。不同的器件地址序列号不同。2.2.2.3 显示模块的选择液晶显示采用LCD 液晶显示,显示的位数多,由单片机驱动。此方案有美观、显示清晰多样的优点。2.2.2.4 报警模块的选择采用有源蜂鸣器来报警(需要一定的频率才可以驱动),可以发出声音报警且降低了成本。2.3主要元器件介绍2.3.1 STC89C52的简介STC89C52是一种带8K字节闪烁可编程可檫除只读存储器的低电压,高性能COMOS8的微处理
11、器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。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):程序存储器的内外部选通,接低电平
12、从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。可编程输入/输出引脚(32根)STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。P0口(P39P32):8位双向I/O口线,名称为P0.0P0.7P1口(P1P8):8位准双向I/O口线,名称为P1.0P1.7 P2口(P21P28):8位准双向I/O口线,名称为P2.0P2.7 P3口(P10P17):8位准双向I/O口线,名称为P3.0P3.72.3.2 LCD1602的简介本设计所使用的是不带字库的LCD1602液晶显示屏,因为其可以在proteus中仿真,便
13、于设计 ,其引脚表如2-3所示。表2-3 12864引脚3 系统的硬件设计与实现3.1 系统硬件概述 本系统是通过键盘扫描模块,既能够显示数据并且还能修改密码,开锁密码,具有强大的功能,通过键盘扫描模块输入到单片机控制系统STC89C52 中。然后通过LCD显示模块来显示我们所要有数据,还有一个就是报警模块,当输入的密码相同时,则显示模块的灯点亮,当输入的密码是错误时,重新输入,三次出错蜂鸣器响,发出报警。为了达到设定的功能,本装置键盘扫描模块、单片机控制模块、LCD显示模块,报警模块等4 模块组成。3.2主要单元电路的设计3.2.1温度采集模块电路的设计3.2.2单片机控制模块电路的设计单片
14、机作为本装置的核心器件,在系统中起到控制报警、以及LCD显示的作用,其中采用的是STC89C52是标准的40 引脚双列直插式集成电路芯片,有4 个八位的并行双向I/O 端口,分别记作P0、P1、P2、P3。第20 引脚为接地端;第40引脚为电源端;第31 引脚需要接高电位使单片机选用内部程序存储器;第18、19 脚之间接上一个12MHz 的晶振为单片机提供时钟信号;第9 脚为复位脚,当其接高电位时,单片机停止工作。P1 口接LCD控制引脚,P0 口连接一LCD1602显示屏数据输入端,P3 口与12 个阵列式按键相连实现对键盘的扫描。如图3-2所示。图3-2主控电路图3.2.3报警模块电路的设
15、计本模块的作用是当开锁按钮被按下时,如果LCD当前显示值相同,则红灯点亮,当输入的数与密码不同时,则蜂鸣器立刻发出声音报警。如图3-3所示。图3-3 报警电路图3.2 LCD1602显示模块电路的设计本模块主要用于显示指示用户密码输入要求。根据管脚要求连接电路,P0口接上拉电阻,并与LCD数据输入端口连接,控制管脚与P1口连接。如图3-4所示。 3-4显示模块电路图4 系统的软件设计与实现4.1 KEIL软件介绍Keil 是美国Keil公司的C51编译器,它被嵌入到了Keil uVision集成开发环境中。Keil是目前最常用的编译器,支持浮点等到类型,支持多维数组,能生成对应的汇编代码,能直
16、接编译汇编代码程序和内嵌多种工具,可以方便的链接,生成可执行文件。Keil uVision 2 IDE 是Keil software 公司的产品,它集项目管理、编译工具、代码编写工具、代码调试以及完全仿真于一体,适合个人开发或人数少、对开发过程的管理还不成熟的开发团体。这一功能强大的软件提供简易的开发平台,可以让开发者在开发过程中集中精力于项目本身,加快开发速度。4.2系统程序设计流程图4.2.1 主程序软件设计通过上述原理,已对密码锁整体运行环境有了充分认识,绘制主程序和子程序流程图,利用Keil软件,对单片机进行编程,如图4-1为主程序功能流程图:4-1主程序功能流程图4.2.2温度采集的
17、软件设计如图4-2为温度采集的软件设计,主要功能是完成DS18B20的初始化工作,并进行读温度,将温度转化成为压缩BCD码 并在显示器上显示传感器所测得的实际温度。读出温度子程序的主要功能是读出RAM中的9字节,在读出时需要进行CRC校验,校验有错时不进行温度数据的改写。返回DS18B20复位跳过ROM命令读取温度命令读取操作CRC检验9字节完?CRC检验正确?移入温度寄存器NYNY4-2温度采集的软件设计流程图4.2.3 温度采集算法软件设计如图4-3为温度采集算法流程图,计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图。YN开始温度零下?温度取值补
18、码置“”标志计算小数位温度计算整数位温度置“+”标志返回4-3温度采集算法流程图4.2.4温度转换命令子程序软件设计如图4-4为温度转换命令子程序流程图,温度转换命令子程序主要是发温度转换开始命令,当采用12位分辩率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。4-4温度转换命令子程序流程图5 系统仿真设计5.1 Proteus 软件介绍Proteus是英国Labcenter electronics公司出版的EDA。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。Proteus是世界上著名的EDA工具(
19、),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。 PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。 使用Proteus 软件进行单片机设计,是和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;在和全国大学生电子设计竞赛中,我们使用 Proteus 开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学
20、习书本知识更容易接受,更容易提高。实践证明,在使用 Proteus 进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。因此,Proteus 有较高的推广利用价值。 5.2 Proteus 仿真图图5-1为正常温度界面图,图5-2为报警温度界面,实现实时显示和温度报警。图5-1 正常温度界面图图5-2 报警温度界面5.3 硬件调试硬件调试主要是测试各硬件部分能否完成设计功能。系统的性能调试以主程序为主。硬件调试比较简单,直接插上电,软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、从程序的编写和调试,由于DS18B20与单片机采用串行数据传送,因此对DS1
21、8B20进行编程时必须严格地保证读写时序,否则将无法读取测量结果。在焊接的过程中,每接一根线都用万用表测试是否短路或开路。这样焊接完了之后,就不必怀疑线路不通的问题了,由于线路很繁琐也免去了大量排查的工作。最初焊接最小系统,查看二极管能否正常闪烁,以此判断单片机是否正常工作。整体电路焊接完后,通电测试所有硬件芯片的输入输出电压是否在设计要求的范围内,判断单片机的工作与否。 5.4 调试结果在调试中出现的很多问题,开始显示屏不显示,经排查是一处地线没连接,导致显示屏供不上电。连接后显示屏正常亮了,但是显示不出想要的结果,调节可变电阻,改变背光度,依然不显示。经过和班级同学的讨论,我们知道是程序的
22、问题。于是我们修改了程序,并最终调试出想要的效果。6结论本次的课程设计共一周时间,分别进行了BS18D20电路原理图的设计,电路仿真图的设计以及实物电路板的演示三个过程。经过这次的课程设计,我们不仅加深了对Proteus仿真软件的了解和使用,还学到了许多课本上没有涉及知识,练习了电路原理图的设计和仿真运行,同时对上学期学习的单片机课程进行了一次全面的复习和巩固,收益很大。我们知道,课程设计一般强调能力培养为主,在独立完成设计任务的同时,还要注意其他几方面能力的培养与提高,如独立工作能力与创造力;综合运用专业及基础知识的能力,解决实际工程技术问题的能力;查阅图书资料、产品手册和各种工具书的能力;
23、工程绘图的能力;书写技术报告和编制技术资料的能力。在专业知识与研究方法方面为日后的毕业设计乃至毕业后的工作奠定良好的基础这次课设让我对单片机有了进一步的了解,而且对Proteus仿真软件的有了一定了解。体会到了Proteus仿真软件的强大。通过本次课设,能够使我们熟练掌握单片机控制电路的设计、程序编写和系统调试,从而全面地提高我们对单片机的软件、硬件等方面的理解,进而增强我们在实践环节的动手操作能力。譬如,我们可以根据实验指导书的要求,完成DS18B20电路的硬件设计、电路器件的选择、单片机软件的运行、以及整体系统调试,并写出完善的设计报告。在进行课设之前,要求我们具备数字电路、模拟电路、电路
24、基础、微机原理、电力电子、电机学和单片机等相关课程的知识,并具备一些基本的实践操作水平,为以后的就业打好一定的基础。总的来说,这次的课程设计自己还是很满意的,感觉收获了不少东西,相信此次学到的知识在以后的生活和学习中对我会有很大的帮助!参考文献1 高玉芹单片机原理及应用及C51编程技术北京:机械工业出版社,2011.62 赵文博,刘文涛单片机语言C51程序设计M北京:人民邮电出版社,2005, 103 孙育才. MCS-51系列单片微型计算机及其应用M. 东南大学出版社, 2004,64 沈红卫. 单片机应用系统设计实力与分析M. 北京:北京航空航天大学出版社,2003.5 徐爱钧, 彭秀华.
25、 单片机高级语言C51应用程序设计M.北京航空航天大学出版社,20066 曾一江. 单片微机原理与接口技术M. 北京:科技出版社,2009,127 康华光. 电子技术基础(模拟部分)M. 北京:高等教育出版社, 2004,48 江晓安, 董秀峰. 模拟电子技术M. 西安电子科技大学出版社,2001.109 戴佳,苗龙,陈斌.51单片机应用系统开发典型实例M. 中国电力出版社,2005.910 荣贵.电子制作M.科学技术文献出版社, 200311 刘建清. 轻松玩转51单片机:魔法入门实例解析开发揭秘全攻略M. 北京航空航天大学出版社,2011附录附录1硬件图附录2 C语言源程序主函数:/* 实
26、 验 名 : 18B20温度显示试验* 实验说明 : LCD1602显示温度值。* 连接方式 : 见连接图* 注 意 : */#include#includelcd.h#includetemp.hvoid LcdDisplay(int);sbit Beep = P15 ;void delay(unsigned int i) ; void delay(unsigned int i) char j; for(i; i 0; i-) for(j = 200; j 0; j-);/* 函数名 : main* 函数功能 : 主函数* 输入 : 无* 输出 : 无*/void main()TMOD = 0
27、x01;TH0 = 60536/256;TL0 = 60536%256;EA=1;ET0=1;LcdInit(); /初始化LCD1602LcdWriteCom(0x88);/写地址 80表示初始地址LcdWriteData(C); while(1)LcdDisplay(Ds18b20ReadTemp();if(Ds18b20ReadTemp()=400)/25TR0=1;elseTR0=0;/Delay1ms(1000);/1s钟刷一次/* 函数名 : 定时器0 中断服务程序* 函数功能 :* 输入 : v* 输出 : 无*/void Timer0(void) interrupt 1TH0
28、= 60536/256;TL0 = 60536%256; /产生发声100Hz的平率Beep = Beep;/* 函数名 : LcdDisplay()* 函数功能 : LCD显示读取到的温度* 输入 : v* 输出 : 无*/void LcdDisplay(int temp) /lcd显示 unsigned char datas = 0, 0, 0, 0, 0; /定义数组float tp; if(temp0; c-) for (b=199;b0;b-) for(a=1;a0;a-); /* 函 数 名 : LcdWriteCom* 函数功能 : 向LCD写入一个字节的命令* 输 入 : co
29、m* 输 出 : 无*/#ifndef LCD1602_4PINS /当没有定义这个LCD1602_4PINS时void LcdWriteCom(uchar com) /写入命令LCD1602_E = 0; /使能LCD1602_RS = 0; /选择发送命令LCD1602_RW = 0; /选择写入LCD1602_DATAPINS = com; /放入命令Lcd1602_Delay1ms(1);/等待数据稳定LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5); /保持时间LCD1602_E = 0;#else void LcdWriteCom(uchar com)
30、 /写入命令LCD1602_E = 0; /使能清零LCD1602_RS = 0; /选择写入命令LCD1602_RW = 0; /选择写入LCD1602_DATAPINS = com;/由于4位的接线是接到P0口的高四位,所以传送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;/Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com 4; /发送低四位Lcd1602_Delay1ms(1);LCD1602_E = 1; /写入时序Lcd1602_Del
31、ay1ms(5);LCD1602_E = 0;#endif/* 函 数 名 : LcdWriteData* 函数功能 : 向LCD写入一个字节的数据* 输 入 : dat* 输 出 : 无*/ #ifndef LCD1602_4PINS void LcdWriteData(uchar dat)/写入数据LCD1602_E = 0;/使能清零LCD1602_RS = 1;/选择输入数据LCD1602_RW = 0;/选择写入LCD1602_DATAPINS = dat; /写入数据Lcd1602_Delay1ms(1);LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5
32、); /保持时间LCD1602_E = 0;#elsevoid LcdWriteData(uchar dat)/写入数据LCD1602_E = 0; /使能清零LCD1602_RS = 1; /选择写入数据LCD1602_RW = 0; /选择写入LCD1602_DATAPINS = dat;/由于4位的接线是接到P0口的高四位,所以传送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat 4; /写入低四位Lcd1602_Delay1ms(1
33、);LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;#endif/* 函 数 名 : LcdInit()* 函数功能 : 初始化LCD屏* 输 入 : 无* 输 出 : 无*/ #ifndefLCD1602_4PINSvoid LcdInit() /LCD初始化子程序 LcdWriteCom(0x38); /开显示LcdWriteCom(0x0c); /开显示不显示光标LcdWriteCom(0x06); /写一个指针加1LcdWriteCom(0x01); /清屏LcdWriteCom(0x80); /设置数据指针起点#elsevoid LcdInit() /LCD初始化子程序LcdWriteCom(0x32); /将8位总线转为4位总线LcdWriteCom(0x28); /在四位线下的初始化LcdWriteCom(0x0c); /开显示不显示光标LcdWriteCom(0x06); /写一个指针加1LcdWriteCom(0x01); /清屏LcdWriteCom(0x80); /设置数据指针起点#endif温度采集文件:#includetemp.h/* 函 数 名 : Delay1ms* 函数功能 : 延时函数*