智能化医疗诊断系统设计

上传人:QQ-1****6396 文档编号:6404113 上传时间:2020-02-24 格式:DOC 页数:45 大小:1.32MB
返回 下载 相关 举报
智能化医疗诊断系统设计_第1页
第1页 / 共45页
智能化医疗诊断系统设计_第2页
第2页 / 共45页
智能化医疗诊断系统设计_第3页
第3页 / 共45页
点击查看更多>>
资源描述
密级: 学号:本科生毕业论文(设计)智能化医疗诊断系统的设计 学 院: 专 业: 班 级: 学生姓名: 指导老师: 完成日期: 学士学位论文原创性申明本人郑重申明:所呈交的论文(设计)是本人在指导老师的指导下独立进行研究,所取得的研究成果。除了文中特别加以标注引用的内容外,本论文(设计)不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式表明。本人完全意识到本申明的法律后果由本人承担。学位论文作者签名(手写): 签字日期: 年 月 日 学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权江西科技学院可以将本论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于保 密 , 在 年解密后适用本授权书。不保密 。(请在以上相应方框内打“” )学位论文作者签名(手写): 指导老师签名(手写): 签字日期: 年 月 日 签字日期: 年 月 日摘要本次设计的题目是智能化医疗诊断系统的设计,本文利用STC89C51单片机对环境温度进行实时的采集,然后通过LCD1602液晶显示模块实时的显示温度,同时通过外置的独立按键进行温度上限和温度下限的实时设定,在采集了温度之后进行实时的比较,如果超过设定的温度上限值或者低于设定的温度下限值,就通过蜂鸣器和LED灯进行组合报警提示。在本次设计中,主要用到了STC89C51单片机,DS18B20集成温度传感器,LCD1602液晶显示模块,独立按键调节,蜂蜜器和LED组合报警模块。进过前期的大量设计和中期的软件仿真。从整体的系统设计到分块的软件和硬件设计,采用分块独立设计,后期整合的方式进行。保证了系统设计的高效和可靠性。在大量的测试和实际的软件仿真测试之后得出结论。本文所采用的硬件和软件设计方式是正确可靠的。能够实现我们最初的目的,实时显示温度并在超过温度设定值的时候进行报警。关键词:单片机,DS18B20,温度采集,液晶显示AbstractAfter the previous hard design and software design. Simulation and debugging. This design realized: real-time acquisition of ambient temperature using STC89C51 MCU, and then through the LCD1602 liquid crystal display module to display real-time temperature, at the same time by an external, independent of the key for the real-time set upper and lower temperature limits, the collected temperature in real-time comparison, if exceeds a set temperature limit value or lower than the set temperature lower limit value, you with the buzzer and LED lamp combination alarm.In this design, mainly uses the STC89C51 monolithic integrated circuit, the DS18B20 integrated temperature sensor, the LCD1602 liquid crystal display module, the independent key regulation, honey and LED combination alarm module. A large number of design and medium-term software simulation. From the overall system design to the sub block of the software and hardware design, the use of block independent design, the way of late integration. Ensure the design of the system is efficient and reliable. After a lot of tests and the actual software simulation test, the conclusion is drawn. The design method of hardware and software used in this paper is correct and reliable. To achieve our initial purpose, real-time display of temperature and in excess of the temperature set value alarm.Key words: MCU, DS18B20, temperature acquisition, liquid crystal display目 录第1章 绪 论11.1 国内外研究现状11.2 本次设计的内容和任务2第2章 系统总体设计方案42.1 系统理论分析52.2 设计的总体组成62.3 系统的硬件模块72.4 系统的软件模块9第3章 控制器件选择103.1 STC89C51单片机介绍11第4章 数据采集器的选择124.1 不同传感器的比较134.2 DS18B20温度传感器154.2.1 DS18B20传感器简介164.2.2 DS18B20传感器数据转换方式17第5章 系统硬件设计195.1 STC89C51单片机系统电路205.1.1显示模块电路的设计205.1.2正负电压转换电路的设计215.2 DS18B20传感器电路235.3 蜂鸣器和LED报警电路的设计24第6章 系统软件设计266.1 系统软件设计所使用的编程环境介绍286.2 主程序模块设计306.3 定时中断函数的设计316.4 计算函数设计326.5 显示函数程序流程326.6 蜂鸣器和LED预警流程图336.7 数据采集流程图336.8 按键清除流程图34第7章 仿真设计357.1 仿真软件介绍367.2 本次设计的仿真图设计39主要参考文献40附 录 一 设计电路图42附 录 二 仿真电路图43附 录 三 设计源程序44致 谢45第1章 绪 论在医院的诊断系统中,很多因素总是在实时的影响着大家的看病就诊。我们总是希望可以对病人的体表温度进行实时的了解,同时,知道病人的体表温度对我们做出医疗决定也有着重要的参考作用,例如病人的体温过高,你可能会选择输液消炎,但是如果病人的体温过的,医生可能会选择病人留院观察。温度对于医生对病人的诊断的重要性是不言而喻的。长期以来,医生对病人温度的感知都是来自于经验和自身的感觉。而如今,利用新型的科学技术,医生可以确切低知道病人的体表实时温度。本文就实现了一个病人温度采集监测系统,同时还加入了温度设定和报警功能。本设计采用了STC89C51单片机作为系统的采集和控制中枢部分。利用DS18B20作为环境温度传感器,将环境温度转换为数字信号,然后单片机对数据进行读取,计数出实时的环境温度。然后将数据发送给显示模块LCD1602进行温度的实时显示。同时本次设计还在显示的基础上加入了温度报警功能。通过外置的3个独立按键。我们可以设定一个温度上限报警值和一个温度下限报警值。只要我们的系统采集的数据不在我们设定的范围内。单片机就会启动蜂鸣器和LED灯进行报警。1.1 国内外研究现状经过前期大量的资料查阅和文献阅读,以及使用互联网进行资料收集后得知,目前国内外的温度监测显示还处在一个刚刚出现的阶段。大家都还是在探索的过程中。所以出现的方案和使用领域也是五花八门。随着智能手机的出现和大量使用,温度采集和显示这一个功能在很多智能手机上也开始出现了,借由第三方的APP和手机本身的传感器例如红外传感器,温度传感器等。可以在手机上进行实时的温度采集和显示。而使用的温度采集方式目前也有很多种,例如使用数字集成的稳定传奇,使用模拟的金属传感器,利用红外采集空气温度的方式。在不同的领域也有着不同的方案选择,比如有的领域就需要非接触的测量方式,有的就可以采用接触的测量方式。总的来看,很多温度监测显示系统还都是停留在温度的采集和简单的显示上,功能显得比较单一。1.2 本次设计的内容和任务本次设计的主要内容:总体方案的设计和确定,硬件部分的设计,软件部分的设计,仿真电路的设计。通过几个方面来完成本次需要达到的设计目的:完成一个基于51单片机的额温度显示和报警系统。系统的设计任务框图如图1-1所示:整个系统软件设计硬件设计仿真设计图1-1 系统设计任务框图本次设计的主要任务:使用STC89C51单片机作为系统的采集和控制中枢部分。利用DS18B20作为环境温度传感器,将环境温度转换为数字信号,然后单片机对数据进行读取,计数出实时的环境温度。然后将数据发送给显示模块LCD1602进行温度的实时显示。通过外置的3个独立按键。可以设定一个温度上限报警值和一个温度下限报警值。只要我们的系统采集的数据不在我们设定的范围内。单片机就会启动蜂鸣器和LED灯进行报警。第2章 系统总体设计方案在我们进行功能设计之前,我们需要首先对我们的整个系统进行完整的方案设计,只有在总体的方案设计完成之后,我们才可以按照我们的总体方案进行具体的功能设计。这样的方法是高效的也是科学的方法。2.1 系统理论分析在我们进行系统的硬件,软件和仿真设计之前,我们需要首先进行整个系统的理论分析,只有在理论分析可行之后。我们才可以开始具体的设计方案的执行过程。首先我们需要明确我们设计需要达到的目的是:使用STC89C51单片机作为系统的采集和控制中枢部分。利用DS18B20作为环境温度传感器,将环境温度转换为数字信号,然后单片机对数据进行读取,计数出实时的环境温度。然后将数据发送给显示模块LCD1602进行温度的实时显示。通过外置的3个独立按键。可以设定一个温度上限报警值和一个温度下限报警值。只要我们的系统采集的数据不在我们设定的范围内。单片机就会启动蜂鸣器和LED灯进行报警。这其中。DS18B20作为集成的温度传感器,在读取上采用的是总线操作模式。而显示器件和蜂鸣器以及LED和独立按键都是简单的I/O操作就可以完成。经过上面的理论分析,我将本次设计分为了以下几个方面来实现:1、单片机系统的使用。2、DS18B20的数据读取。3、LCD1602液晶显示模块的操作。4、普通I/O口的读取操作。5、系统电源设计。6、仿真系统设计。在以上几个方面存在着先后的顺序,我们应该是先进行了仿真设计,然后进行各个模块的程序设计,在仿真中进行模块程序的仿真,在通过仿真之后。我们再进行模块的硬件设计工作。2.2 设计的总体组成在上面的分析中可以知道。本次设计所采用的器件具体有哪些。已经各个模块需要实现的具体功能是什么。所以我们可以很轻松的得到本次设计的系统总体组成框图应该是如下图2-1所示:数据获取数据显示实时提示电源电路单片机完整系统图2-1 系统的总体组成框图在上面的系统总体组成框图中。完整的系统作为核心任务存在,各个子系统或者说模块为核心任务而存在。在服务整个系统功能的时候,各个子系统还需要相互的配合,完成各自任务的同时还需要照顾到整个系统的设计过程。2.3 系统的硬件模块设计中使用了大量的电子器件,例如单片机,温度传感器,蜂鸣器,LED,独立按键和液晶显示器等等。不同的元件在系统中都有着不同的作用,各个元件分担着自己所承担的独立模块任务,每个器件的选择和有机组合而形成本设计功能执行的物理元素,只有我们合理的安排和设计好每个元器件,我们才能获得系统有效和正确工作的前提。硬件的正确工作才能保证我们后期的软件调试可以正常有序的进行。进过大量的分析和设计,本次系统的硬件组成将如图2-2所示进行设计:单片机电源电路温度传感器液晶显示蜂鸣器和LED图2-2 系统的硬件组成框图在设计好每个模块之后,我们就可以得到需要的硬件系统了。所以硬件的组成是本次设计中很看重的一个部分。2.4 系统的软件模块通过和硬件相结合考虑,我们能知道本次设计中的软件应该有哪些部分:获得病人温度传感器数据的采集函数,软件启动的初始化函数,按键清除函数,数据计算函数,定时中断函数,数据显示函数,报警函数。很明显,本系统的软件组成框图应该如下所示:系统初始化定时采集函数外部按键计算显示提示和预警图2-3 系统的软件组成框图每一个完整的电子设计,都是由多个方面所组成的,每个方面都是成功的关键,没有主次之分,只要有一个方面不正常,那整个系统的功能就不是正确的。所以在设计的时候,要特别注意每个模块的正确性。无论是开始的软件设计还是后面的硬件设计。第3章 控制器件选择要完成本次设计的任务,我们有很多可以选择的器件。例如单片机,DSP,FPGA,PLC等等。但是我们在选择器件的时候要考虑到器件的成本,开发难度,可靠性,封装类型等等方面。进过大量的资料查询和实际测试,本设计最后采用了单片机作为核心的控制器件。单片机也可以称单片微控制器,它和片上系统不一样,单片机不但可以进行运算处理,还可以做逻辑控制,其包括了输入输出端,片上CPU有的还有专用的乘法器,独有的存储单元和DSP运算单元。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。目前单片机的发展已经十分成熟,单片的处理位数从4位到8位,16和32位都有。单片的运行速度也冲以前的几M到现在的高端单片机可以运行到上百M。3.1 STC89C51单片机介绍STC89C51是一种使用兼容8051核的ISP(In System Programming)在系统可编程芯片,其可以工作的时钟频率在几MHz到几十MHz内,其内部的FLASH存储器是专用的程序存储器,大小根据不同的系列是有所不同的,器件完全兼容标准的MCS-51指令系统及C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,在使用专用的单片机程序下载程序通过TTL电平方式就可以将程序下载到单片机中,8051单片机的时钟周期有12T和6T现在新型的还有1T的。但是时钟周期并不影响单片机的算术和逻辑兼容性。只是处理器的单周期时间不一样而已。STC89C51单片机的实物如下图所示:图3-2 STC89C51的DIP40封装实物图第4章 数据采集器的选择将自然界的物理数据,转换为数字处理器(本文所说的单片机)能够识别的信号。这个过程我们通常称为数据采集过程。在数据的采集过程中通常包含了模拟信息获取,数据的量化,数据编码等过程。当然不同的传感器所采用的方式是不一样的。本次设计需要获得自然界的温度数据。经过大量的资料查询。得知:要完成温度采集,大概有以下几种方式可以选择:1、使用DS18B20集成温度传感器。2、使用PT100温度传感器。3、使用DHT11或者21系列传感器。4、使用红外传感器。下面将对这几种温度采集方式进行一个详细的比较。从而给出选择DS18B20作为本次设计的温度传感器的原因和优点。4.1 不同传感器的比较上面列出的4种传感器方案,在获得环境温度这一点上都是可以应用的本设计中的,但是其中的PT100使用的是模拟的方式,STC89C51单片机不具有模拟采集功能,因此这种传感器不合适,而且PT100的外表体积也十分的大,在设计中不是十分方便。而DHT11和DHT21系列的传感器是温度湿度一体的传感器,采用的是双线控制和读取的方式。相比DS18B20的单总线模式。DHT11的操作模式显示的过于的复杂,因为DHT11集成了两种传感器模块,所以价格上也要更加的昂贵。是DS18B20市场价格的10倍左右。这对本设计来说。是不划算的一种方案选择。而使用红外进行温度测量,需要单片机有着很强的计算能力。因为输出的不是单一的数字量。还需要进行很多的转换才可以得到我们的环境温度。对51单片机来说。过大的运算量是不现实的。综上所述,在考虑成本,开发难度,运算量等之后。本文选择DS18B20集成温度传感器作为环境温度的采集器件。其价格低廉,操作简单,输出数字量,不需要大量的数据运算。体积小,便于系统的硬件设计。4.2 DS18B20温度传感器4.2.1 DS18B20传感器简介DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且 可根据实际要求通过简单的编程实现912位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总 线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、 传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。下图是DS18B20的内部构成图4.2.2 DS18B20传感器数据转换方式我们知道,DS18B20输出的是数字信号,也就是我们常说的010101数据。那要把输出的数据转换为我们人能看懂的十进制数据,我们首先要了解其输出寄存器的存储方式。如下图4-4所示是DS18B20的数据寄存器的存储方式。图4-4 温度寄存器存储方式我们知道存储方式了,就可以知道如何转换为我们能看懂的数据了,如下图4-5所示,就是我们用到的转换方式了。图4-5 数据转换示例我们利用单片机读取数据,然后根据图4-4的方式就可以得到我们人可以直观看懂的十进制数据了。我们要使用单片获得DS18B20的数据,需要经过初始化,写数据两个过程,在这两个过程中,我们主要是对DS18B20的内部寄存器进行相应的初始化或者是配置。这个具体的配置过程和配置数据,需要我们在使用的时候查阅官方的数据手册。然后根据我们实际的设计需求进行配置。在这里就不做过多的介绍和解释了。第5章 系统硬件设计在本次设计中,我们需要采集数据,处理数据,同时显示和预警。这一切的工作将由三大方面组成,第一是:物理器件、第二是:电路系统、第三:软件设计。只有这三个方面都选择正确,设计完整,我们设计的系统才可能正常的按照我们的预想设计进行工作。在前面一章我们介绍了物理器件的选择。在这一章中,我们将对系统的电路设计进行一个完整的介绍。在系统的电路设计中,我们可以将整个系统规划为以下几个部分:电源电源转换电路,单片机供电电路,单片机复位电路,单片机晶振电路,LCD1602液晶显示电路,声光提示电路,按键清除复位电路。下面将各个分电路进行逐个的介绍。5.1 STC89C51单片机系统电路5.1.1显示模块电路的设计 TC1602AD主要由DDRAM、CGROM、CGRAM、IR、DR、BF、AC等大规模集成电路组成,DDRAM为数据显示用的RAM,用以存放用LCD显示的数据,只要将保准的ASCII码放入DDRAM,内部控制线路就会自动将数据传送到显示器上,并显示出该ASCII码对应的字符。CGROM为字符产生器ROM,它存储了192个5*7的点阵字型,但只能读出不能写入。CGRAM为字型、字符产生器的RAM,可供使用者存储特殊造型的造型码,CGRAM最多可存8个造型,IR为指令寄存器,负责存储单片机要写给LCD的指令码,当RS及R/W引脚信号为0,且Enable引脚信号由1变为0时,D0-D7引脚上的数据便会存入到IR寄存器中。DR为数字寄存器,它们负责存储微机要写到CGRAM或DDRAM的数据;或者存储单片机要从CGRAM或DDRAM读出的数据。因此,可将DR视为一个数据缓冲区,当RS及R/W引脚信号为1且Enable引脚信号由1变为0时,读取数据;当RS引脚信号为1,R/W引脚信号为0,且Enable引脚信号由1变为0时,存入数据。BF为忙碌信号,当BF为1时,不接受微机送来的数据或指令;当BF为0时,接受外部数据或指令。所以,在写数据或指令到LCD之前,必须查看BF是否为0。AC为地址计数器,负责计数写入/读出CGRAM或DDRAM的数据地址,AC依照单片机对LCD的设置值而自动修改它本身的内容。TC1602A可分2行共显示32个字符,每行显示16个字符2。 单片机与液晶的接口如图3.7所示。在设计液晶电路时,需注意以下几点:(1)注意“判忙”信号(BF)。单片机向液晶模块发送数据后,需等待并判断BF信号为高,所以,BF脚为双向口,设计时需注意。在编写液晶控制程序时,也可以不判断BF信号,只需要延时一段时间就可以,这样可以避免双向口操作的麻烦。(2)有些单片机的I/0口是3.3V,但很多液晶器件的是5V,因此单片机与液晶不能直接相接而需转换电平。具体的设计电路如下所示:图5-1 显示模块电路5.1.2 正负电压转换电路设计在运放环节,我们用到了-5V的电压,由于这里只有+5V的电压,因此,我们需要电压转换,将+5V转换为-5V,这里用到了ICL7660。产生-5V的电路图如下图3.10所示:图5-2 正负电压转换电路5.2 DS18B20传感器电路本次设计采用的是集成的三脚直插封装的DS18B20传感器,在设计上去除了不必要的电压变化和转换电路,而采用了对集成传感器进行直接的供电,然后采集的方式。具体的设计电路如下所示:图5-3 DS18B20感器电路上图中P1为DS18B20传感器的直插封装插座。使用了5V直流电源供电。然后将输出脚直接和单片机的P37相连接。通过单片机操作硬件3.7进行单总线访问,就可以对DS18B20进行初始化,写数据,读数据等操作了。5.3 蜂鸣器和LED报警电路的设计本次设计所采用的报警指示为蜂鸣器和LED灯。其中蜂鸣器采用的是有源直流蜂鸣器。LED使用的是5mm草帽型高亮红色LED。使用这两个器件的原因是:提示效果可以达到要求,设计简单实用,驱动方式适合简单型单片机。成本低,更换容易。具体的设计电路如下图所示:图5-6 蜂鸣器和LED报警电路本次设计中没有采用单一的报警方式进行。主要有是考虑到单个器件损坏之后,系统的报警功能就将失去,所以采用了双报警的冗余设计方式。第6章 系统软件设计6.1 系统软件设计所使用的编程环境介绍本设计中使用的STC89C51单片机,这种单片机开发语言可以是C或者汇编,但是鉴于C比汇编而言更加的高效好通用。所以本次设计将会采用C语言作为软件编程语言。使用的开发环境是标准的Keil-Uv4编程环境。Keil-Uv4 是一款美国Keil Software 公司推出的单片机开发系统,这个系统目前在国内使用量极大,而且该系统支持的单片机型号多,常见的8位到32位单片机都可以在这个开发环境下进行开发,同时这个系统还可以进行在线的调试和语言的转换。我们可以容易的使用系统只带的功能查看寄存器数据。软件设计主要分为六个方面:第一是系统的预初始化;第二是DS18B20传感器的数据采集;第三是数据的计算;第四是数据的显示;第五是数据的预警提示;第六是按键的清除。这六个部分分别放在在主程序中来执行,其中初始化只用进行一次,后面五步则需要在死循环中一直执行。程序设计中采用了模块化的设计方式,这样设计的程序结构十分清楚,在后期的程序功能扩展和程序调试中也显得十分方便。6.2 主程序模块设计本次采用了模块化的编程思想。在主程序中,主要是负责函数的调度,但是整个系统的功能却是由主程序完成的。主程序就像是一个控制器,合理的调度各个分子系统,从而使子系统配合完成我们需要的功能。主程序流程如下图所示:图6-1 主程序流程图6.3 定时中断函数的设计中断函数是本次软件中的第一大子函数,因为中断函数还会调用计算函数,显示函数,预警函数,这三个子函数实现需要的功能。具体的定时中断函数如下图所示:6-2 中断函数流程图6.4 计算函数设计计算函数在中断函数中被调用,负责数据的处理和就算,根据采集的数据和前面理论部分说的计算公式完成数据的计算工作,为后面的显示和预警功能提供数据支持部分。计算函数的程序流程图如下:图6-3 计算函数流程图6.5 显示函数程序流程显示函数由定时中断函数调用,负责数据显示。具体的流程图如下图所示:图6-4 显示函数流程图6.6 蜂鸣器和LED预警流程图本次设计中的蜂鸣器和LED作为预警器件,负责比对设定的值和采集得到的温度值,然后进行必要的提示,具体的流程图如下所示:图6-5 蜂鸣器和LED预警流程图6.7 数据采集流程图数据采集子函数作为一个独立函数,由定时器中断随时触发,在定时器中断触发的时候,进入中断,调用采集函数。从而获得数据。具体的流程图如下所示:图6-6 数据采集流程图6.8 按键清除流程图按键在本次设计中担任了人机交互的功能。人通过按键进行需要的温度上限值和温度下限值设定,使用独立按键,操作简单可靠。人可以方便的随时对设定值进行修改。图6-7 按键清除流程图本次设计中,对软件系统进行了分系统的方式进行,将需要的功能按照要求,将其划分为不同的子函数,采用分系统的设计方式,对功能的扩展和后期的功能调试十分的便利。在后期的调试和仿真中得出结论,本次设计的软件是可靠的。能够按照我们的要求进行工作。第7章 仿真设计为了检测设计的可靠性和功能是不是完整,本次设计中,采用了Proteus作为仿真软件进行前期的系统硬件和软件仿真,在仿真中验证本次设计的软件和硬件是不是可靠的。7.1 仿真软件介绍本次仿真使用的是Proteus作为仿真软件。Proteus仿真软件是英国Lab Center Electronics公司出版的EDA仿真工具软件。这款软件不但具有其它EDA仿真工具软件都具有的仿真功能,还包含有其独特的仿真单片机及外围器件的能力。目前Proteus在国内外的使用率都是很高的,不但是单片机的仿真,在很多高校里面也作为一款教学软件来使用,而且市面上还有很多关于这款软件的教学书籍和教学视频。Proteus是全球范围内都广泛使用的一款仿真软件,这款软件不但可以进行原理图的仿真,电气特性的仿真,逻辑功能的仿真,还可以从原理图一键发布到PCB从而实现从原理图到电路图的转换。目前这款软件具有物理仿真,软件仿真等功能,而且其可以支持的单片机种类基本涵括了目前市面上流行的所有类型单片机,例如本次设计使用的8051系列单片机,AVR单片机,MSP系列单片机。而且支持的编译器(不同的编译器会有不同的输出文件)也包括了主流的IAR以及KEIL等。本次设计使用的Proteus7.8软件界面如下所示:图7-1 Proteus仿真软件界面7.2 本次设计的仿真图设计本次设计的仿真图根据前期设计的硬件电路图作为基础,在设计中验证了硬件设计的可靠和正确性。具体的设计图如下所示:图7-2 本次设计的仿真图在本次设计中,仿真过程是十分重要的一个环节。在前期的设计中,都是靠仿真软件进行的,需要进过仿真软件来确定整个系统的电路,已经各个部分的程序是不是正确。在不断的仿真过程中发现设计中的问题呵不足,然后针对的逐渐进行改进,从而才能得到现在的完整设计。特别是电路的设计中,如果直接进行电路的设计和制作的话,对设计的要求十分高,要保证一次行成功。这几乎是不可能的。所以需要经过大量的仿真来确定方案的可靠与否。经过仿真电路的检测,可以证明本次设计是可靠正确的。主要参考文献1 李朝青单片机原理及接口技术M北京:北京航空航天大学出版社,20052 康华光电子技术基础模拟部分(第五版) M北京:高等教育出版社, 20053 阎石数字电子技术基础(第四版)M北京:高等教育出版社,20054 白延敏51单片机典型系统开发实例精讲M北京:电子工业出版社,20095 张齐,杜群贵. 单片机应用系统设计技术M. 北京:电子工业出版社,2007.6 杨金岩等. 8051单片机数据传输接口扩展技术与应用实例M北京:人民邮电出版社,20057 求是科技单片机通信技术与工程实践M北京:人民邮电出版社,2005.8 郭永贞主编. 数字电子技术M. 西安电子科技大学出版社,2000.9 李广弟. 单片机基础M.北京:北京航空航天大学出版社,2001.10 张洪润. 电子线路与电子技术M.清华大学出版社M,2005.11 张齐,杜群贵. 单片机应用系统设计技术M.电子工业出版社,2004.12 JulianW.Gamder,IntelligentDataAcquisitionSystem B,2005,4:109-115.13 Dejie Song, Boxue Tan, Wenfeng Liu. Application of Wireless Communication in Temperature Measurement J. Berlin Heidelberg: Springer-Verlag,2011,175(1): 428433.14 Xingrui Liu and Guohong Gao. Temperature Monitoring System Based on AT89C51 J. Berlin Heidelberg: Springer-Verlag,2011,105(1): 601605.附 录 一 设计电路图附 录 二 仿真电路图附 录 三 设计源程序/主函数部分/#include#includeLCD1602.h#includeDS18B02.hsbit BUZZ = P16; /蜂鸣器控制引脚sbit LED = P17; /LED控制引脚sbit key1=P36; /按键sbit key2=P35;sbit keyc=P34;void InitTimer0(void);/初始化定时器void UsartConfiguration();/串口初始化void SendOneByte(unsigned char c);void delayms(uint time);void getkey();void main() LCD1602_Init();/液晶初始化 Start18B20(); /启动DS18B20 InitTimer0(); /初始化定时器 UsartConfiguration();/初始化串口接收波特率4800 SendOneByte(127); SendOneByte(200); while(1) getkey(); uchar time50ms=0;int temp; /读取到的当前温度值char receiveData;/保存接收到的数据bit highflag=0; /串口标志位char high=10;/-127 到 +128char low=3;/-127 到 +128bit highORlow=0; void Timer0Interrupt(void) interrupt 1/50ms TH0 = 0x9e;/3c TL0 = 0x58;/b0time50ms+;if(time50ms19)/20*50=1000ms=1s time50ms=0; if(Get18B20Temp(&temp)/成功读取到温度值 temp=TempToInt(temp);/把数据转换为放大100倍的正常人可以读懂的数SendOneByte(temp/100);/发送数据 LcdDisplayTemp(temp,high,low);/在1602第一行显示并且启动下一次转换 if(temphigh*100|templow*100)/超过温度限报警 LED=0; BUZZ=BUZZ; /不断翻转蜂鸣器使能端 从而形成频率 else LED=1; BUZZ=0; void Usart() interrupt 4 /串口接收中断if(RI) receiveData=SBUF;/串口接收到的数据if(128=receiveData)/接下来是上限标志 highflag=1; else/传送的数据 if(highflag) high=receiveData;RI = 0;/清除接收中断标志位 else TI = 0;void UsartConfiguration()SCON=0X50;/设置为工作方式1TMOD |=0X20;/设置计数器工作方式2PCON=0X80;/波特率加倍TH1=0XF3;/计数器初始值设置,注意波特率是4800的 12M只能这样了TL1 = TH1;ES=1; /打开接收中断EA=1;/打开总中断TR1=1;/打开计数器void SendOneByte(char c) SBUF = c; while(!TI); TI = 0;void InitTimer0(void) /定时器0 初始化为 50ms TMOD |= 0x01; TH0 = 0x3C; TL0 = 0xB0; EA = 1; ET0 = 1; TR0 = 1;void getkey() if(key1=0) delayms(3); if(key1=0) if(highORlow) high-; else low-; while(!key1); else if(key2=0) delayms(3); if(key2=0) if(highORlow) high+; else low+; while(!key2); else if(keyc=0) delayms(3); if(keyc=0) highORlow=highORlow; while(!keyc); void delayms(uint time) uchar i=100; while(time-) while(i-);/DS18B20/#includeDS18B02.h#include / nopsbit IO_18B20 = P37; /DS18B20通信引脚/* 软件延时函数,延时时间(t*10)us */void DelayX10us(unsigned char t) do _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); while (-t);/* 复位总线,获取存在脉冲,以启动一次读写操作 */bit Get18B20Ack() bit ack; EA = 0; /禁止总中断 IO_18B20 = 0; /产生500us复位脉冲 DelayX10us(50); IO_18B20 = 1; DelayX10us(6); /延时60us ack = IO_18B20; /读取存在脉冲 while(!IO_18B20); /等待存在脉冲结束 EA = 1; /重新使能总中断 return ack;/* 向DS18B20写入一个字节,dat-待写入字节 */void Write18B20(unsigned char dat) unsigned char mask; EA = 0; /禁止总中断 for (mask=0x01; mask!=0; mask=1) /低位在先,依次移出8个bit IO_18B20 = 0; /产生2us低电平脉冲 _nop_(); _nop_(); if (mask&dat) = 0) /输出该bit值 IO_18B20 = 0; else IO_18B20 = 1; DelayX10us(6); /延时60us IO_18B20 = 1; /拉高通信引脚 EA = 1; /重新使能总中断/* 从DS18B20读取一个字节,返回值-读到的字节 */unsigned char Read18B20() unsigned char dat; unsigned char mask; EA = 0; /禁止总中断 for (mask=0x01; mask!=0; mask=1) /低位在先,依次采集8个bit IO_18B20 = 0; /产生2us低电平脉冲 _nop_(); _nop_(); IO_18B20 = 1; /结束低电平脉冲,等待18B20输出数据 _nop_(); /延时2us _nop_(); if (!IO_18B20) /读取通信引脚上的值 dat &= mask; else dat |= mask; DelayX10us(6); /再延时60us EA = 1; /重新使能总中断 return dat;/* 启动一次18B20温度转换,返回值-表示是否启动成功 */bit Start18B20() bit ack; ack = Get18B20Ack(); /执行总线复位,并获取18B20应答 if (ack = 0) /如18B20正确应答,则启动一次转换 Write18B20(0xCC); /跳过ROM操作 Write18B20(0x44); /启动一次温度转换 return ack; /ack=0表示操作成功,所以返回值对其取反/* 读取DS18B20转换的温度值,返回值-表示是否读取成功 */bit Get18B20Temp(int *temp) bit ack; unsigned char LSB, MSB; /16bit温度值的低字节和高字节 ack = Get18B20Ack(); /执行总线复位,并获取18B20应答 if (ack = 0) /如18B20正确应答,则读取温度值 Write18B20(0xCC); /跳过ROM操作 Write18B20(0xBE); /发送读命令 LSB = Read18B20(); /读温度值的低字节 MSB = Read18B20(); /读温度值的高字节 *temp = (int)MSB 8) + LSB; /合成为16bit整型数 return ack; /ack=0表示操作应答,所以返回值为其取反值int TempToInt(int num)/把数据转为正常的数据int temp=num; if(temp0)/当温度值为负数 /因为读取的温度是实际温度的补码,所以减1,再取反求出原码temp=temp-1;temp=temp;temp=-(temp*100/2); else temp=temp*100/2;/float tp;/int temp=num; /if(temp0)/当温度值为负数/ /因为读取的温度是实际温度的补码,所以减1,再取反求出原码/temp=temp-1;/temp=temp;/tp=temp;/temp=-tp*0.0625*100+0.5;/0.0625是因为使用12位模式 精度为这么多/留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点 和串口数据比较的时候/后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就/算加上0.5,还是在小数点后面。/ / else/ /tp=temp;/因为数据处理有小数点所以将温度赋给一个浮点型变量/如果温度是正的那么,那么正数的原码就是补码它本身/temp=tp*0.0625*100+0.5;/ return temp;/液晶显示/#includeLCD1602.hsbit LCD1602_RS = P05;/位定义,液晶的数据/命令选择s
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕业论文


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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