电子综合课程设计与实践1.pdf

上传人:l*** 文档编号:72541862 上传时间:2023-02-12 格式:PDF 页数:40 大小:1.22MB
返回 下载 相关 举报
电子综合课程设计与实践1.pdf_第1页
第1页 / 共40页
电子综合课程设计与实践1.pdf_第2页
第2页 / 共40页
点击查看更多>>
资源描述

《电子综合课程设计与实践1.pdf》由会员分享,可在线阅读,更多相关《电子综合课程设计与实践1.pdf(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、电子综合课程设计与实践课程设计电子综合课程设计与实践课程设计题题目:目:数字温度计设计数字温度计设计学院(系)学院(系):自动化学院自动化学院年级专业:年级专业:自动化专业自动化专业学生学生 XXXX:X X 纪炜纪炜 X X 熠熠代涛代涛彭彬彭彬指导教师:指导教师:X X 海涛海涛0/40XX 大学本科学生课程设计指导教师评定成绩表学号学院学生 XX课程设计题目自动化学院指导教师专业 X 海涛自动化专业 X 纪炜 X 熠代涛彭彬指导教师评语课程设计成绩指导教师签名:年月日0/40XX 大学本科学生课程设计任务书课程设计题目学院自动化学院专业自动化数字温度计设计年级2011 级设计要求:设计一

2、个可测量一定温度 X 围的数字温度计,实时显示当前温度值。1 1.基本要求基本要求(1)可测量温度 X 围:000.0102.0(2)温度温度分辨力:0.4(3)测量相对误差:2%(4)系统响应时间:5s(5)用数码管实时显示被测温度2.2.提高要求提高要求(1)实现多个温度点的实时测量(2)实现温度的分档测量3.3.发挥部分发挥部分(1)实现零下温度测量并显示(2)实现摄氏、华氏的转换并显示(3)温度过高报警(4)自己设计的其他功能学生应完成的工作:完成设计任务基本要求,并实现部分或全部提高要求和发挥部份。参考资料:1白泽生.用 MCS-51 单片机实现温度的检测J.现代电子技术,2005,

3、(10):1-3.2X 开 生,郭 国法.MCS-51 单片机温度 控制系统的设计 J.微计 算机信息,2005,21(7):68-69.3何立民.单片机应用技术选编M.:航空航天大学,2004.4杨刚,周群.电子系统设计与实践M.:电子工业,2004.5丁元杰,单片机原理及运用,机械工业,2003.课程设计工作计划:第一周:动员大会,师生见面,布置任务,确定初步硬件制作、软件设计设计方案。第二周:硬件制作、软件设计中。第三周:软硬件仿真调试,检查设计结果,归还仪器设备。任务下达日期 2014 年2月 27日完成日期2009 年3月 6 日指导教师(签名)学生(签名)0/40前 言单片机技术作

4、为计算机技术的一个分支,广泛地应用于工业控制,智能仪器仪表,机电一体化产品,家用电器等各个领域。“单片机原理与应用”在工科院校各专业中已作为一门重要的技术基础课而普遍开设。学生在课程设计,毕业设计,科研项目中会广泛应用到单片机知识,而且,进入社会后也会广泛接触到单片机的工程项目。鉴于此,提高“单片机原理及应用”课的教学效果,让学生参与课程设计实习甚为重要。单片机应用技术涉及的内容十分广泛,如何使学生在有限的时间内掌握单片机应用的基本原理及方法,是一个很有价值的教学项目。为此,我们进行了“单片机的学习与应用”方面的课程设计,锻炼学生的动脑动手以及协作能力。单片机课程设计是针对模拟电子技术,数字逻

5、辑电路,电路,单片机的原理及应用课程的要求,对我们进行综合性实践训练的实践学习环节,它包括选择课设任务、软件设计,硬件设计,调试和编写课设报告等实践内容。通过此次课程设计实现以下三个目标:第一,让学生初步掌握单片机课程的试验、设计方法,即学生根据设计要求和性能约束,查阅文献资料,收集、分析类似的相关题目,并通过元器件的组装调试等实践环节,使最终硬件电路达到题目要求的性能指标;第二,课程设计为后续的毕业设计打好基础,毕业设计是系统的工程设计实践,而课程设计的着眼点是让学生开始从理论学习的轨道上逐渐引向实际运用,从已学过的定性分析、定量计算的方法,逐步掌握工程设计的步骤和方法,了解科学实验的程序和

6、实施方法。第三,培养学生勤于思考乐于动手的习惯,同时通过设计并制作单片机类产品,使学生能够自己不断地学习接受新知识(如在本课设题目中存在智能测温器件 DS18B20,就是课堂环节中不曾提及的“新器件”),通过多人的合作解决现实中存在的问题,从而不断地增强学生在该方面的自信心及兴趣,也提高了学生的动手能力,对学生以后步入社会参加工作打下一定良好的实践基础。0/40目 录摘要1一单片机简介2二设计方案3三设计方案的总体设计框图5四系统软件算法及设计12五总结与体会13附录一元件清单14附录二电路图15附录三源程序16参考文献340/401/40摘要随着时代的进步和发展,单片机技术已经普及到我们生活

7、,工作,科研,各个领域,已经成为一种比较成熟的技术,单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同种类的传感器,可实现诸如电压、湿度、温度、速度、硬度、压力等的物理量的测量。本文将介绍一种基于单片机控制理论及其应用系统设计的数字温度计。本文主要介绍了一个基于 AT89C51 单片机的测温系统,详细描述了利用数字温度传感器DS18B20 开发测温系统的过程,重点对传感器在单片机喜爱的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也进行一一介绍,该系统可以方便的是实现温度采集和显示,并可以根据需要任意设定上下限报警温度,它

8、使用起来方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合我们日常生活和工农业生产中的温度测量,也可以当做温度处理模块嵌入其他系统中,作为其他主系统的辅助扩展。DS18B20 和AT89C51 结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合与恶劣环境下进行现场温度测量,有广泛的应用前景。本设计首先是确定目标,气候是各个功能模块的设计,再在Proteus 软件上进行仿真,修改,仿真。本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置 X 围内时,可以报警。关键词:单片机,数字控制,温度计,DS18B20,AT89C520/40一 单片机简介二十世纪跨越了三个

9、“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC 机。它由主机、键盘、显示器等组成。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词“智能

10、型”,如智能型洗衣机等。计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。单片机在这种情况下诞生了。截止今日,单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC 卡、电子宠物等,这些都离不开单片机。单片机自 70 年代问世以来得到蓬勃发展,目前单片机功能正日渐完善:单片机集成越来越多资源,内部存储资源日益丰富,用户不需要扩充资源就可以完成项目开发,不仅是开发简单,产品小巧美观,同时抗干扰能力加强,系统也更加稳定,使得它更加适合工业控制领域,具

11、有更加广阔的市场前景;提供在线编程能力,加速了产品的开发进程,为企业产品上市赢得宝贵时间。此外单片机具有性能高、速度快、体积小、价格低、稳定可靠、应用广泛、通用性强等突出优点。单片机的设计目标主要是增强“控制”能力,满足实时控制(就是快速反应)的需要。我们作为 21 世纪的工科大学生,学的是自动化专业,无论是从事科学研究工作,还是开办电子器件的工厂还是经营电子厂品的贸易,不仅要熟练地使用通用微机进行各种数据处理,还要把计算机技术运用到本专业领域或相关领域,既具有开发创新能力。这就要求我们要熟练地掌握单片机。单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器 C

12、PU 随机存储器 RAM、只读存储器 ROM、多种 I/O 口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D 转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完成程序设计者实现规定的任务。1/40二 设计方案21 设计务任和要求1、基本 X 围-201252、精度误差小于 0.53、LED 数码直读显示4、可以任意设定温度的上下限报警功能.22 方案辩证1 温度计软件设计流程图:开始设置堆栈指针显示缓冲区初始化复位DS18B20发跳过ROM命令发温度转换命令延时复位 DS18B20发跳过 R

13、OM 命令发读存储器命令读温度数据将温度转换为 BCD 码更新数据缓冲区2/402.元器件的选取单片机芯片的选取:方案一采用 AT89C52 芯片作为硬件核心,利用 Flash ROM,内部具有 4KB ROM 存储空间,能于3V 的超低压工作,而且与 MCS-51 系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP 在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二采用 AT89C52 单片机与 MCS-51 系列单片机相比有两大优势:第一,片内程序存储器采用闪存,使程序的写入更加方便;第二,提供了更

14、小尺寸的芯片,使整个硬件电路的体积更小,且管脚数目为 20 个,与 MCS-51 相比减少一倍,使理解更容易。综上所述:本课设中单片机芯片采用 AT89C52。温度传感器的选取:方案一采用热敏电阻传感器。利用热敏电阻随温度变化而显著变化,能直接将温度的变化转换为能量的变化,进而制成温度计。但是其测温传感器比较复杂,而且不易通过编制程序来控制测温精度,增大系统设计的难度。方案二采用 DS18B20 温度传感器。DS18B20 的内部 3 脚(或 8 脚)封装;使用特有的温度测量技术,将被测温度转换成数值信号;3.05.5V 的电源供电方式和寄生电源供电方式;ROM 由64 位二进制数字组成,共分

15、为 8 个字节;RAM 由 9 个字节的高速暂存器和非易失性电擦写 ROM组成。综上所述:温度传感器选取智能测温器件 DS18B20。本设计显示电路采用 1602 液晶显示模块芯片。3 系统最终设计方案:综上各方案所述,对此次课设的方案选定:采用 AT89C52 作为主控制系统;1602 液晶显示模块芯片作为温度数据显示装置;而智能温度传感器 DS18B20 器件作为测温电路主要组成部分。至此,系统最终方案确定。3/40三 设计方案的总体设计框图温度计电路设计总体设计方框图如图所示,控制器采用单片机 AT89C52,温度传感器采用 DS18B20,用 1602 液晶显示屏以串口传送数据实现温度

16、显示。3.1 硬件电路框图晶振控制单片机芯片AT89C521602 显示器复位电路蜂鸣器,指示灯报警温度调整键图总体设计方框图温度检测电路DS18B203.2 硬件电路概述系统由单片机最小系统、显示电路、按键、温度传感器等组成。本电路是由 AT89C2051 单片机为控制核心,具有与 MCS-51 系列单片机完全兼容,程序加密等功能,带2KB 字节可编程闪存,工作电压X 围为 2.76V,全静态工作频率为024MHZ;显示电路由 1602 液晶显示模块芯片,可以进行多行显示;温度报警按键设为五个,可以显示华氏温度,调节高低报警温度;温度传感器电路主要由 DS18B20 测温器件构成,该器件主要

17、功能有:采用单总线技术;每只 DS18B20 具有一个独立的不可修改的 64 位序列号;低压供电,电源 X 围为 35V;测温 X 围为-20+125,误差为0.5;复位电路是 10K 电阻构成的上电自动复位。3.3 主控电路单片机 AT89C52 具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。晶振采用12MHZ。复位电路采用上电加自动复位。4/40主控芯片 AT89C52晶振电路复位电路3.4 显示电路本设计显示电路采用1602 液晶显示模块芯片,该芯片可现实 16x2 个字符,比以前的七段数码管 LED显示

18、器在显示字符的数量上要多得多。另外,由于 1602 芯片编程比较简单,界面直观,因此更加易于使用者的操作和观测。1602A 芯片的接口信号说明如下表:5/401602A 芯片的接口信号说明液晶显示电路35 报警温度调节电路本系统一共设置了五个按键,k1 键只是显示华氏温度,k4 键按下不松开显示高低报警温度,松开后恢复显示正常温度,k2 键和 k3 键是分别用来调节高低报警温度,k 键控制调节时的上调或下调。具体调节如将高温报警温度调高,第一步将 k4 键按下不松,k 键升起位置,调节 k2 键,则高温报警温度向上增加,反之亦然。低温报警同理。报警节点电路3.6 温度传感器及 DS18B20

19、测温原理DS18B20 温度传感器是美国 DALLAS 半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 9-12 位的数字值读数方式。DS18B20 的性能特点如下:6/40(1)独特的单线接口仅需要一个端口引脚进行通信,DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。(2)DS18B20 支持多点组网功能,多个 DS18B20 可以并联在惟一的三线上,实现多点组网测温;(3)无须外部器件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;(4)可通过

20、数据线供电,电压 X 围为 3.0-5.5;(5)零待机功耗;(6)温度以9或12位数字,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温;(7)用户可定义报警设置;(8)报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;(9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;(10)测量结果直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力DS18B20 采用 3 脚 PR35 封装或 8 脚 SOIC 封装,其引脚排列及内部结构框图如图及测温原理图如下所示:图 引脚排列7/40预

21、置斜率累加器Tx低温度系数振荡T1计数器 1预置比较高温度系数振荡加 1=0停止温度寄存器计数器2T2-0图DS18B20测温原理图 64 位 ROM 的结构开始 8 位是产品类型的编号,接着是每个器件的惟一的序号,共有 48位,最后 8 位是前面 56 位的 CRC 检验码,这也是多个 DS18B20 可以采用一线进行通信的原因。温度报警触发器 TH 和 TL,可通过软件写入户报警上下限。DS18B20 温度传感器的内部存储器还包括一个高速暂存 RAM 和一个非易失性的可电擦除的 EERAM。高速暂存 RAM 的结构为 8 字节的存储器,结构如图 4 所示。头 2 个字节包含测得的温度信息,

22、第 3 和第 4 字节 TH 和 TL 的拷贝,是易失的,每次上电复位时被刷新。第 5 个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20 工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图 5 所示。低 5 位一直为 1,TM 是工作模式位,用于设置 DS18B20 在工作模式还是在测试模式,DS18B20 出厂时该位被设置为 0,用户不要去改动,R1 和 R0 决定温度转换的精度位数,来设置分辨率。温度 LSB温度 MSBTH 用户字节 1TL 用户字节 2配置寄存器保留保留保留CRCTMR1R01图 5 DS18B20 的字节定义8/40111

23、1DS18B20 的分辨率定义如表 1 所示表 1分辨率设置表R00011由表 1 可见,DS18B20 温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。在实际应用中要将分辨率和转换时间权衡考虑。主机控制 DS18B20 完成温度转换过程是:每一次读写之前都要对 DS18B20 进行复位,即将数据总线下拉 500us,然后释放,DS18B20 收到信号后等待 16-60us 左右,之后发出 60-240us的存在低脉冲,主 CPU 收到此此信号表示复位成功;复位成功后发送一条 ROM 指令,然后发送 RAM 指令,对 DS18B20 进行预先读写操作。表 2 ROM 指令集

24、指令读 ROM符合 ROM约定代码33H55H功能读 DS18B20 中的编码发出此命令后,接着发出 64 位 ROM 编码,访问单线总线上与该编辑相对应的 DS18B20 使之做出响应,为下一步对该 DS18B20 的读写作准备搜索 ROM0F0H用于确定挂接在同一总线上的 DS18B20 个数和识别 64 位ROM 地址,为操作各器件作准备跳过 ROM告警搜索命令9/40R10101分辨率9 位10 位11 位12 位最大温度转移时间96.75ms187.5ms375ms750ms0CCH0ECH忽略 64 位 ROM 地址,直接向DS18B20 发送温度变换指令执行后,只有温度跳过设定值

25、上限或下限的片子才能做出反应表 3 RAM 指令集指令温度转换读暂存器写暂存器复制暂存器重调 E2RAM读供电方式DS18B20 的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器 1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器 2 的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20 就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将最低温所对应的一个基数分别置入减法计数器 1、温度寄存器中,计数器 1 和温度寄存器被预置在

26、最低温所对应的一个基数值。减法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器 1 的预置值减到 0 时,温度寄存器的值将加 1,减法计数器 1 的预置将重新被装入,减法计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到 0 时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。约定代码44H0BEH4EH48H0B8H0B4H功能启动 DS18B20 进行温度转换读暂存器 9 个字节内容将数据写入暂存器的 TH、TL 字节把

27、暂存器的 TH、TL 字节写到 E2RAM中把 E2RAM 中的 TH、TL 字节写到暂存器 TH、TL 字节启动 DS18B20 发送电源供电方式的信号给主 CPU四 系统软件算法及设计10/40整个系统是由硬件配合软件来实现的,在硬件确定后,编写的软件的功能也就基本定型了。所以软件的功能大致可分为两个部分:一是监控,这也是系统的核心部分,二是执行部分,完成各个具体的功能。系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。4.1 主程序主程序的主要功能是负责温度的实时显示、读出并处理 DS18B20 的测量的当前温度值,温度测量每 1s 进行一

28、次。这样可以在一秒之内测量一次被测温度。4.2 读出温度子程序读出温度子程序的主要功能是读出 RAM 中的 9 字节,在读出时需进行 CRC 校验,校验有错时不进行温度数据的改变。4.3 温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用 12 位分辨率时转换时间约为750ms,在本程序设计中采用 1s 显示程序延时法等待转换的完成。4.4 计算温度子程序计算温度子程序将 RAM 中读取值进行 BCD 码的转换运算,并进行温度值正负的判定。4.5 显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0 时将符号显示位移入下一位。11/

29、40五 设计体会与小结经过将近三周的单片机课程设计,终于完成了我们的数字温度计的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来,高兴之余不得不深思!在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是 BCD 码,这一次,我全部用的都是 16 进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正

30、的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。在这次课程设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,更好的学会了团体协调作战。总之,不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入手。最后终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,

31、但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。经过这次的课程设计,也为我们以后毕业设计的制作奠定了一定的基础。12/40附录一附录一元件清单元件清单序号1234567891011121314151617181920212223名称实验板AT89C52DS18B2022pf 电容10uf 电容晶振10k 电阻普通按键蜂鸣器LED 灯排阻液晶屏DIP40DIP16插针插座双排插针电烙铁镊子小起子斜口钳导线型号12MHZSW-PBJHD162A数量1 个1 个2 个10 个10 个1 个10 个15 个2 个5 个20 孔1 个1 个1 个1 个2 排2 排1 个1

32、个1 个1 个若干附录二 电路图13/40键盘说明:第一排第二排第三排第一个键初始化最高温度摄氏变华氏第二个键进入设置界面最低温度华氏变摄氏第三个键测量 2 口传感器增加改变精准度第四个键测量 3 口传感器减少显示附录三 源程序14/40#include sbit DQ1=P32;/ds18b20与单片机连接口sbit DQ2=P33;sbit RS=P36;sbit RW=P35;sbit EN=P34;sbit LED1=P07;sbit LED2=P05;sbit BEEP=P02;unsigned char code str1=YEAH!;unsigned char code str2

33、=LETS DO IT!;unsigned int upper_v1=0 x004f;unsigned int upper_v2=0 x003f;unsigned int lower_v1=0 x0001;unsigned int lower_v2=0 x0005;unsigned char data t_data=0,0,0,0 xdf,0 x43;unsigned char sensor_flag=0;unsigned char sensor_num=0;unsigned char setup_flag=0;unsigned char upper_flag=0;unsigned char

34、lower_flag=0;unsigned char upper_set=0;unsigned char lower_set=0;unsigned char data disdata8;unsigned int tvalue1;/温度值unsigned int tvalue2;unsigned int tvalue;unsigned char tflag;unsigned char tflag1;unsigned char tflag2;unsigned char flagdat;unsigned char t_change=0;unsigned char res_flag1=0;unsign

35、ed char res_flag2=0;unsigned char beep_flag=0;unsigned char beep_flag2=0;void delay1ms(unsigned int ms)/延时 1 毫秒(不够精确的)unsigned int i,j;for(i=0;ims;i+)for(j=0;j100;j+);/*lcd1602程序*/void wr_(unsigned char)/写指令/15/40 delay1ms(1);RS=0;RW=0;EN=0;P2=;delay1ms(1);EN=1;delay1ms(1);EN=0;void wr_dat(unsigned

36、char dat)/写数据/delay1ms(1);RS=1;RW=0;EN=0;P2=dat;delay1ms(1);EN=1;delay1ms(1);EN=0;void lcd_init()/初始化设置/delay1ms(15);wr_(0 x38);delay1ms(5);wr_(0 x08);delay1ms(5);wr_(0 x01);delay1ms(5);wr_(0 x06);delay1ms(5);wr_(0 x0c);delay1ms(5);void display(unsigned char*p)/显示/while(*p!=0)wr_dat(*p);p+;delay1ms(

37、1);void init_play()/初始化显示lcd_init();wr_(0 x80);display(str1);wr_(0 xc0);display(str2);/4016sensor_flag=0;sensor_num=0;setup_flag=0;upper_flag=0;lower_flag=0;upper_set=0;lower_set=0;t_change=0;LED1=0;LED2=0;BEEP=1;beep_flag=0;void setup()/进入设置界面unsigned char code setup=SET UP:;/lcd_init();wr_(0 x01);

38、wr_(0 x80);display(setup);setup_flag=1;sensor_num=0;upper_flag=0;lower_flag=0;upper_set=0;lower_set=0;void beep()if(beep_flag=1)BEEP=0;delay1ms(200);if(beep_flag=0)BEEP=1;delay1ms(200);void beep2()if(beep_flag2=1)BEEP=0;delay1ms(200);else BEEP=1;delay1ms(200);/4017void show_temp(unsigned int limit_v

39、,tflag)/输出温度函数unsigned char t_flag;t_data0=limit_v/100+0 x30;t_data1=limit_v%100/10+0 x30;t_data2=limit_v%10+0 x30;if(tflag=0)t_flag=0 x20;else t_flag=0 x2d;if(t_data0=0 x30)t_data0=0 x20;if(t_data1=0 x30)t_data1=0 x20;wr_(0 xc8);wr_dat(t_flag);wr_(0 xc9);display(t_data);void upper()/显示上限值if(sensor_

40、num=0);if(sensor_num=1)wr_(0 xc0);display(Upper:);wr_(0 xc8);if(upper_v10 x0fff)tflag=0;else upper_v1=upper_v1+1;/4018tflag=1;show_temp(upper_v1,tflag);upper_flag=2;if(sensor_num=2)wr_(0 xc0);display(Upper:);wr_(0 xc8);if(upper_v20 x0fff)tflag=0;else upper_v2=upper_v2+1;tflag=1;show_temp(upper_v2,tf

41、lag);upper_flag=1;lower_flag=0;upper_set=1;lower_set=0;void lower()/显示下限值if(sensor_num=0);if(sensor_num=1)wr_(0 xc0);display(Lower:);wr_(0 xc8);if(lower_v10 x0fff)tflag=0;else lower_v1=lower_v1+1;tflag=1;show_temp(lower_v1,tflag);lower_flag=2;/4019if(sensor_num=2)wr_(0 xc0);display(Lower:);wr_(0 xc8

42、);if(lower_v20 x0fff)tflag=0;else lower_v2=lower_v2+1;tflag=1;show_temp(lower_v2,tflag);lower_flag=1;upper_flag=0;lower_set=1;upper_set=0;void sensor1()/选择传感器 1if(setup_flag)unsigned char code sensor1=18B20(1);wr_(0 x88);display(sensor1);sensor_num=1;else wr_(0 x01);wr_(0 x80);display(18B20(1):);wr_

43、(0 xc0);display(t:);sensor_num=3;/tflag=0;if(upper_flag=1)sensor_num=1;upper();if(lower_flag=1)sensor_num=1;lower();20/40void sensor2()/选择传感器 2if(setup_flag)unsigned char code sensor2=18B20(2);wr_(0 x88);display(sensor2);sensor_num=2;else wr_(0 x01);wr_(0 x80);display(18B20(2):);wr_(0 xc0);display(t

44、:);sensor_num=4;tflag=0;if(upper_flag=2)sensor_num=2;upper();if(lower_flag=2)sensor_num=2;lower();void increase()/上调报警值delay1ms(5);if(sensor_num=1&upper_set=1)upper_v1+;if(upper_v10 x0fff)tflag=0;else upper_v1=upper_v1+1;tflag=1;show_temp(upper_v1,tflag);21/40if(sensor_num=2&upper_set=1)upper_v2+;if

45、(upper_v20 x0fff)tflag=0;else upper_v2=upper_v2+1;tflag=1;show_temp(upper_v2,tflag);if(sensor_num=1&lower_set=1)lower_v1+;if(lower_v10 x0fff)tflag=0;else lower_v1=lower_v1+1;tflag=1;show_temp(lower_v1,tflag);if(sensor_num=2&lower_set=1)lower_v2+;if(lower_v20 x0fff)tflag=0;else lower_v2=lower_v2+1;tf

46、lag=1;show_temp(lower_v2,tflag);void decrease()/下调报警值delay1ms(5);if(sensor_num=1&upper_set=1)upper_v1-;if(upper_v10 x0fff)tflag=0;22/40else upper_v1=upper_v1+1;tflag=1;show_temp(upper_v1,tflag);if(sensor_num=2&upper_set=1)upper_v2-;if(upper_v20 x0fff)tflag=0;else upper_v2=upper_v2+1;tflag=1;show_tem

47、p(upper_v2,tflag);if(sensor_num=1&lower_set=1)lower_v1-=0 x0001;if(lower_v10 x0fff)tflag=0;else lower_v1=lower_v1+1;tflag=1;show_temp(lower_v1,tflag);if(sensor_num=2&lower_set=1)lower_v2-;if(lower_v20;i-)DQ1=0;/给脉冲信号dat1=1;DQ1=1;/给脉冲信号if(DQ1)dat1|=0 x80;delay_18B20(10);return(dat1);unsigned char ds1

48、820rd2()/*读数据*/unsigned char i=0;unsigned char dat2=0;for(i=8;i0;i-)DQ2=0;/给脉冲信号dat2=1;24/40DQ2=1;/给脉冲信号if(DQ2)dat2|=0 x80;delay_18B20(10);return(dat2);void ds1820wr1(unsigned char wdata)/*写数据*/unsigned char i=0;for(i=8;i0;i-)DQ1=0;DQ1=wdata&0 x01;delay_18B20(10);DQ1=1;wdata=1;void ds1820wr2(unsigne

49、d char wdata)/*写数据*/unsigned char i=0;for(i=8;i0;i-)DQ2=0;DQ2=wdata&0 x01;delay_18B20(10);DQ2=1;wdata=1;read_temp1()/*读取温度值并转换*/unsigned char a1,b1;if(res_flag1=1)/delay1ms(5);ds1820rst1();ds1820wr1(0 xcc);ds1820wr1(0 x4e);ds1820wr1(0 x70);ds1820wr1(0 x01);ds1820wr1(0 x1f);ds1820rst1();ds1820wr1(0 x

50、cc);25/40ds1820wr1(0 x48);else ds1820rst1();ds1820wr1(0 xcc);ds1820wr1(0 x4e);ds1820wr1(0 x70);ds1820wr1(0 x01);ds1820wr1(0 x3f);ds1820rst1();ds1820wr1(0 xcc);ds1820wr1(0 x48);ds1820rst1();ds1820wr1(0 xcc);/*跳过读序列号*/ds1820wr1(0 x44);/*启动温度转换*/ds1820rst1();ds1820wr1(0 xcc);/*跳过读序列号*/ds1820wr1(0 xbe);

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

当前位置:首页 > 应用文书 > 工作报告

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

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