配色: 字号:
室内温度自动检测系统的设计与应用.doc
2020-01-20 | 阅:  转:  |  分享 
  
室内温度自动监测系统的设计与应用学生姓名:学号:专业班级:指导老师:摘要在人们的日常生活及生产过程中,经常要用
到温度的检测与控制,在新世纪科技得到了空前的发展,科学激素有力的推动了社会生产力的发展和社会信息化程度提高,同时也是现代电子产品性
能进一步提高,产品更新换代的节奏也越来越快。目前温度检测与自动调节技术在生产、生活中可应用的领域非常多,大到工矿企业生产线的环境温
度监控,小到一般居室的室内温度检测与调节控制。这些不同的应用形式在温度检测方式、精度要求、信息传输,控制方式等方面存在着诸多的不同
,但系统的基本设计思想大致相同,均是按照温度数据采集、数据传输、数据分析、温度调节控制的基本工作顺序来规划的。在这种思路引导下,本
文介绍一种基于智能数字温度传感器DS18B20的主从分布式多路测温系统,该系统以PC为主机,采用ATMEL公司的单片机AT89C5
2做从机,系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,可应用于室内场所居室和办公室的空调控制、小型仓库测温和生产
过程监控等领域。关键字:DS18B20温度芯片;单片机AT89C52;温度测量目录摘要I引言-1-1论文研究-2-1.1
研究的意义-2-1.2温度检测领域的发展现状-2-1.3本课题的主要研究内容-3-2室温检测系统原理-4-2.1
室内温度检测系统的构成-4-2.2硬件的选择-4-2.2.1单片机及其管脚说明-4-2.2.2七段数码显示管-
5-2.2.3温度传感器的选择-6-2.2.4MAX7219简介-7-3电路硬件设计-8-3.1温度采集模块的
设计-8-3.2单片机最小系统-9-3.3数码显示模块-10-3.4串口通信模块的设计-10-3.5总原理
图-11-4软件设计-12-4.1室温检测系统子程序介绍-12-4.1.1单片机初始化程序-12-4.1.2
DS18B20初始化程序-13-4.1.3DS18B20读数据程序-14-4.1.4DS18B20写数据程序-15
-4.1.5DS18B20读取温度程序-15-4.2串口通信模块的调试-17-4.3VB显示程序设计-17-5
Protues软件仿真-19-5.1Protues软件介绍-19-5.2功能特点-19-5.3Protues的
电路仿真功能-19-5.4温度显示模块的仿真-20-结论-21-致谢-22-参考文献-23-附录-24-
引言在工、农业生产和日常生活中,对温度的测量及控制占据着极其重要的地位。首先我们了解一下多点温度检测系统在各个方面的应用领域:消
防电气的非破坏性温度检测,电力、通讯设备之过热故障预知检测,空调系统的温度检测,各类运输工具之组件的国人检测,保全与监视系统之应用
,医疗与健诊的温度测试,化工、机械···等设备温度过热检测。温度检测系统应用十分广阔。1论文研究1.1研究的意义温度在人类日常生活
中扮演着极其重要的角色,同时在工农业生产过程中,温度检测具有十分重要的意义。现阶段温度检测主要是有线定点温度检测,其温度检测原理为
单片机利用温度传感器检测温度,并在数码管或LCD上进行温度显示。由于无存储功能,许多实时测量的温度数据无法存储,需要人工记录,缺
少了数据存储的便利性。另外,在某些环境恶劣的工业环境,以人工方式直接操作设置仪表测量温度也不现实,因此采用多点布线进行温度检测尤为
必要。目前有些设计能够实现温度采集,但功耗过高是其最大的缺点。在实际温度控制过程中既要求系统具有稳定性、实时性,又需要使系统功耗低
及保证温度的均匀性,因此设计一种低功耗的多点温度检测系统很有意义。本文提出一种采用低功耗单片机AT89C52单片机实现的多点温度
测量系统,解决了上述问题。该系统能实现对温度智能化的检测,能够同时进行多点温度检测,是可以实现远程控制的温度检测系统。低功耗、实时
性的温度检测是该设计的最大特点。1.2温度检测领域的发展现状传统的温度检测采取对测量点分区取样的人工方法,工作量大,可靠性差。近年
来,随着计算机技术的发展和测量技术的提高,传统的人工查看温度的方法,已逐步被电子检测设备所取代。温度检测如今已经广泛应用于人类生产
、生活的各个领域,如家电、汽车、材料、电力电子、工业生产等。在半导体集成电路芯片和数字技术没有广泛运用的过去,实现对温度的测量和监
控,只能依赖于对温敏电子元器件的模拟物理量进行测量,进而转换为直观的测量结果。从硬件电路设计方面来说,开发起来很麻烦,费工费时。抗
干扰的问题也较突出。由于体积相对大一些,使用起来也不是很方便。目前,国际上的温度传感器正从模拟式向数字式、由集成化向智能化的方向飞
速发展。如今,随着数字温度传感器的诞生,曾经令人眼花缭乱的电路、密密麻麻焊接在一起的元器件,如今已经被一个小小的、毫不起眼的数字传
感器代替了。MAXIM,DALLAS(已被MAXIM收购)等世界上有实力的公司根据不同应用领域的不同需求推出了多款产品,性能良
好、价格低廉,使得我们对数字温度传感器有了足够的选择。而且在很多应用领域中,基于温度的检测和监控系统已经不仅仅是一个独立的系统,更
多的时候是某个更大监控系统的一个组成部分。有时跟上位机相连,有时又与PC机连接,甚至可能连接在互联网上以实现远程监测、控制和访问。
数字化、智能化的传感器集采样、A/D转换、电平兼容、总线地址、阈值报警、数据双向通信、接口协议众多功能于一身,这为其广泛应用于不同
的环境提供了便捷的条件。总而言之,数字化、智能化传感器的出现和广泛使用,已经成为温度检测监控系统的一个发展潮流和趋势。随着时间的流
逝,这种技术将发展得更加完善,应用前景也会更加广阔。1.3本课题的主要研究内容本文结合室内的环境和当前温度检测的流行趋势提出了温度
自动检测系统的设计。详细描述了系统的结构和软、硬件设计。论文的主要研究内容:(1)温度的检测模块设计,四路DS18B20温度采集的
硬件和软件的实现。(2)温度数据的处理和软件实现。(3)温度的显示模块硬件与软件的实现。(4)温度值在上位机上显示的实现。(5)温
度显示模块的仿真。本文研究的温度检测系统结构简单,连接方便,各个模块分工明确,便于室内等场合的温度检测,也可以很方便的扩展为大规模
的温度检测系统,或者做为一个大型系统的一个小模块来使用。1.4本设计的结构安排本设计就是采用单片机实现温度检测系统。本设计的结构安
排如下:第1章主要介绍了本论文的研究意义、温度检测领域的发展状况与本课题的主要研究内容。第2章主要介绍室内温度检测系统的构成及硬件
的选择,包括单片机、数码管、温度传感器等的选择和使用。第3章介绍电路硬件设计,分为温度采集模块、单片机最小系统、数码显示模块与串口
通信模块。第4章介绍了本设计的软件实现。包括温度采集程序、数码显示程序、串口通信程序与电脑VB显示届面程序。第5章介绍了本设计的仿
真。本设计对Protues软件进行了介绍,并对温度显示模块进行了仿真,画出了仿真图。下面,就逐章进入本设计的全过程。2室温检测系
统原理2.1室内温度检测系统的构成室内温度检测系统的构成大体上可以分为4部分:一是温度参数的测量,二是测量数据的处理和控制,三是
数据的显示,四是数据与上位机的传输。本系统的设计方案流程图如图2.1所示。图2.1室内温度检测系统设计方案2.2硬件的选择2.2.
1单片机及其管脚说明室内温度检测系统中数据处理和控制部分采用Atmel公司的AT89C52单片机,AT89C52是一种低功耗、高
性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产
品指令和引脚完全兼容。AT89C52相对于常见的AT89C51,性能有了较大提升,价格基本不变甚至比89C51更低,并且增加了很多
新功能。下面指出了各个管脚的用途VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8个TTL
门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLAS
H编程时,P0口作为原码输入口,当FLASH进行校验时,PO输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻
的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平
时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位
双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被告写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输
入时,P2口的管脚被外部拉低,将输出电流。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高8位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH
编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3
口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C52的一些特殊功能口,P3管脚备选功能如下:P3.0RXD(串行输入口)P3.1TXD(串行输出口)P
3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器械外部输
入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号
。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器,地址锁存允许的
输出电平用于锁存地址的位字节。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取址期间,每个机器周期两次/PSEN有效。但
在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:在FLASH编程期间,此引脚也用于施加12V编程电源(
VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.2.2七段数码显示管七
段数码管在工业控制中有着很广泛的应用,例如用来显示温度、数量、重量、日期、时间,还可以用来显示比赛的比分等,具有显示醒目、直观的优
点。无论是共阴极还是共阳极的数码管,都分段码和位码,要想让它亮必须驱动它~以共阳极数码管为例,即首先要选中你想要点亮的数码管的位,
要想让4个数码管全亮须4个位全选中,所谓选中的含义就是给高电平(共阳极)。数码管分8个段,即段码,第个段的亮灭都对应着一个数字或字
母,想让哪一段亮就给哪段送高电平。其中扫描分静态扫描和动态扫描~静态扫描比动态扫描简单些。动态扫描他在每个时间只能点亮一位数码管,
但是由于扫描频率的设置,单片机的速度是很快的,但几十MS内就能让4位数码管循环亮灭很多次,这些人的肉眼是分辨不出来的,数码管的亮度
可以通过软件设置(扫描频率的设置)调整。数码管都有a、b、c、d、e、f、g七个笔划和一个小数点DP,这八个联对应二极管阳极,阴极
都联在一起(称共阴极)。以四位数码管矩阵为例,四个数码管的a、b、c、d、e、f、g七个笔划和一个小数点DP电极分别并联在一起。当
c行高电平,3列低电平,其他行列都为高阻态时,第三个数码管的c笔划亮,通过扫描方式在1/20秒内四个数码管的笔划该亮的都亮一次,由
于视觉暂留,就会看到结果。本设计是由MAX7219驱动数码管通过V+引脚和ISET引脚之间所接的外部电阻RSET控制MAX7219
,RSET越大,段电流越小,但是其最小值不应该小于9530Ω。温度采集数据的显示用共阴四位一体数码管,而传感器标号的数码显示则用共
阴LED单个数码显示。2.2.3温度传感器的选择在室温检测系统中温度测量是主要环节。这部分关键在于温度传感器的选择,以下提供了两
种选择方案:方案一:使用AD7416作为传感器AD7416的内部寄存器结构和引脚特性:AD7416是封装在一个SO-8芯片中的完
整的温度计。它包括一个带隙温度传感器和一个用来监视并将温度数字化10位A/D转换器,其精度达0.25℃,温度测量范围-55℃
至+125℃。其工作电源电压在2.7,5.5V之间,具有标准IC总线接口。由于采用低功耗CMOS技术,它具备掉电工作模式。其地
址引脚,AD7416可以级联至多8片在同一个IC上。Vcc(2.7,5.5V)和GND提供工作电源。同系列芯片还有AD741
5等。AD7416的引脚配置如图2.2所示。图2.2AD7416的引脚图SDA-串行地址/数据双向I/O端。漏极开路,使用时
须接上拉电阻。SCL-串行时钟输入端。2.7V时可达100kHz,5V时达400kHz。OTI-温输出,漏极开路。可作为中断输
出信号。在系统构成时,降低功耗起见,上拉电阻取值至少大于10kΩ。A0、A1、A2为地址引脚,AD7416可以级联至多8片在同一
个IC上。Vcc(2.7V,5.5V)和GND提供工作电源。方案二:使用DS18B20作为传感器由DALLAS半导体公司生产的DS
18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测
控系统和大型设备中。与传统的热敏电阻温度传感器不同,它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9,12位的数字值
读数方式,可以分别在93.75ms和750ms内将温度值转化9位和12位的数字量。它具有体积小、接口方便、传输距离远等特点,内含
寄生电源。系统有如下特点:(1)不需要备份电源,可通过信号线供电,电源电压范围从3.3,5V;(2)送串行数据,不需要外部元件;(
3)温度测量范围从-55℃~+125℃,-10℃~+85℃时测量精度为±0.5℃,测量分辨率为0.0625℃;(4)通过编程可实现
9,12位的数字值读数方式(出厂时被设置为12位);(5)在93.75ms和750ms内将温度值转化9位和12位的数字量
;(6)系统的抗干扰性好,适合于恶劣环境的现场温度测量,如环境控制、设备过程控制、测温类消费电子产品等。方案比较由于DS18B20
结构更加简单,内含寄生电源,可以为两种供电方式:寄生电源和外电源供电。管脚也只用了3个,体积更小,所以接口方便。它具有体积小,接口
方便,传输距离远等特点。经过比较测试,本次毕业设计选用DS18B20作为温度传感器。2.2.4MAX7219简介MAX7219
是MAXIM公司的7段共阴极LED数码管驱动器,每一片MAX7219最多可驱动8位LED,且集BCD码译码器、多路扫描器、段驱
动和位驱动电路于一体,内含8×8位双口静态SRAM,可保存8位LED数据,不仅使用方便,连线简单,而且还可串联,大大简化了硬件电
路设计,减少软件的工作量。MAX7219具有典型的三线串行接口,命令与数据组成16位字串,从DOUT引脚输出,当每一个CLK脉
冲上升沿到来时,串行数据从DIN引脚进入MAX7219内部移位寄存器,最先收到的是高位。在第16个CLK上升沿,LOAD引脚若变
为高电平,则数据就会被锁存到内部寄存器中,再过半个脉冲,数据在CLK下降沿从DOUT引脚输出。3电路硬件设计本文介绍一种基于数
字温度传感器DS18B20的主从分布式多路测温系统,该系统以PC为主机,采用ATMEL公司的AT89C52单片机做从机,二者之间
通过MAX232通讯总线连接,数字温度传感器通过与单片机P3.2至P3.5分别连接,将所测得数据由单片机传送至数码管分别显示。MA
X7219作为数码管驱动,控制数码显示。单段数码管DS1显示当前传送温度数据的传感器标号,而四段数码管DS2显示该路传感器所测得的
温度值。数字温度传感器所测得的数据通过串口通信模块上传到上位机。该系统框图如图3.1所示。图3.1室温检测系统框图3.1温度采集
模块的设计在单片机AT89C52的P3.5至P3.2上分别接数字温度传感器J1、J2、J3、J4。DS18B20的1脚接地,3脚
接+5V电源并上拉26.1K电阻。DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大
为10As。主机控DS18B20完成温度转换必须经过3个步骤:初始化、ROM操作指令、存储器操作指令。根据DS18B20的初
始化时序、写时序和读时序,分别编写3个子程序:INIT为初始化子程序,WRITE为写(命令或数据)子程序,READ为读数据子程序,
所有的数据读写均由最低位开始。四位DS18B20温度采集模块电路图如图3.2所示。图3.2四位DS18B20温度采集模块电路图3.
2单片机最小系统图3.3为单片机最小系统的设计,S2为复位键,Vcc、S2、R45、R46与C16组成了复位电路,其基本功能是:
系统上电时提供复位信号,直致系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源
插头分-合过程中引起的抖动而影响复位。复位键按下后系统上程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯
片为ROM的00H处开始运行程序。Y2、C14、C15组成了单片机的晶振电路。单片机P3.2,P3.5外接4个温度传感器DS18B
20,接收上传的数据。P2.0接MAX7219的串行数据输入端DIN,P2.1接MAX7219的片选端LOAD,P2.2接入MAX
7219的时钟输入端。P3.0与P3.1则与串口通信模块中的MAX232连接,实现TTL电平和RS-232C接口电平之间的转换。图
3.3单片机最小系统电路图3.3数码显示模块单片机获取温度后,由MAX7219控制分别将各路温度值显示到数码管上。数码管RGRF
DS1上显示DS18B20的标号,数码管DS2上则显示所测得该路的温度值。电路图如图3.4所示。图3.4数码显示模块电路图3.4
串口通信模块的设计串口通信原理图如图3.5所示。AT89C52单片机通过串行口直接接收PC机传送来的串行数据,然后把接收到的数据存
入数据存储器。由于PC机的串行口都是RS-232C标准的接口,所以,其输入输出在电平上和采用TTL电平的AT89C52在接口时会产
生电平不同的问题。为了解决这个问题,在PC机和单片机的串行通信电路中加入了MAX232芯片,以实现TTL电平和RS-232C接口电
平之间的转换。这样PC机和AT89C52单片机进行串行通信时就可以顺利进行了。图3.5串口通信原理图3.5总原理图总原理图见附录
1。4软件设计本节主要介绍了室温检测系统的软件部分的实现,包括温度采样程序、串口通信程序、串口调试过程与VB显示界面的设计。本软
件设计主要使用函数调用,因此本节4.1中主要介绍了主函数中主要调动的子函数。本系统采用P3口四路分别接四个数字传感器DS18B20
,在DS18B20初始化后采集P3.2至P3.5四路温度,然后把采集的温度发送到MAX7219,依次在数码管上显示。单片机通过特殊
功能寄存器SBUF对串行接收或串行发送寄存器进行访问。此程序中,首先把DS18B20与单片机初始化,单片机读取温度传感器DS18B
20测得温度后,存入特殊功能寄存器SBUF中,由TXD来发送温度数据给上位机。上位机接收由单片机发送来的数据后,在VB显示界面上显
示四路DS18B20的温度。室温检测系统软件流程图如图4.1所示图4.1室温检测系统软件流程图4.1室温检测系统子程序介绍4.1
.1单片机初始化程序程序开始前,需要先将单片机初始化。以下程序为单片机初始化程序。1.要设置定时器/计数器工作方式寄存器TMOD
,定时器1设置为方式2,8位初值自动重装的8位定时器/计数器。定时器0设置为方式1,为16位定时器/计数器。2.在单片机与上位机通
信时,要设置串行口控制寄存器SCON,串口工作方式设置成方式1,10位异步收发(8位数据),其中1位起始位,8位数据位,1位停止位
,TXD(P3.1)为数据发送引脚,RXD(P3.0)为数据接收引脚,波特率是可变的(由定时器1的溢出率控制)。REN应置为1,允
许串行接收。3.为定时器1中的TH1与TL1装入初值,本设计中设置的波特率为4800bps。4.开启全局中断,开启定时器中断。un
signedcharReadOneChar(intsel){unsignedchari=0;unsignedchar
dat=0;for(i=8;i>0;i--){P3&=~(0x01<>=1;P3
|=0x01<urn(dat);}4.1.2DS18B20初始化程序DS18B20初始化时,一般有四个步骤:初始化命令;传送ROM命令;传送R
AM命令;数据交换命令。下面具体介绍了DS18B20初始化的具体时序:1.先将数据线置高电平1.2.延时(该时间要求不是很严格,但
是要尽可能短一点)。3.数据线接到低电平0。4.延时750us(该时间范围可以在480,960us).5.数据线拉到高电平1。6.
延时等待。如果初始化成功则在15,60ms内产生一个由DS18B20返回的低电平0,据该状态可以确定它的存在。但是应注意,不能无限
地等待,不然会使程序进入死循环,所以要进行超时判断。7.若CPU读到数据线上的低电平0后,还要进行延时,其延时的时间从发出高电平算
起(第5步的时间算起)最少要480us。8.将数据线再次拉到高电平1后结束。以下程序是本设计中DS18B20的初始化程序。voi
dInit_DS18B20(void){P3|=SET;//复位delayus(8);//稍做延时P3&=ZERO
;//单片机将总线拉低delayus(80);//精确延时大于480usP3|=SET;//拉高总线delayus(
14);//稍做延时后delayus(20);}4.1.3DS18B20读数据程序DS18B20读数据时,分8个步骤:1.将数据
线拉高到1。2.延时2us。3.将数据线拉低到0。4.延时6us。5.将数据线拉高到1。6.延时4us。7.读数据线的状态设置一个
状态位,并进行数据处理。延时30us。8.重复1,7步骤,直到读取完一个字节。以下是DS18B20读取一字节数据的程序。unsi
gnedcharReadOneChar(intsel){unsignedchari=0;unsignedcharda
t=0;for(i=8;i>0;i--){P3&=~(0x01<>=1;P3|=
0x01<n(dat);}4.1.4DS18B20写数据程序DS18B20写数据时,分7个步骤:1.数据线先置低电平0。2.延时确定的时
间15us。3.按从低位到高位的顺序发送数据(一次只发送一位)。4.延时时间为45us。5.将数据线拉到高电平1。6.重复1,5步
骤,直到发送完整个字节。7.最后将数据线拉高到1。以下是DS18B20写数据的程序。voidWriteOneChar(unsi
gnedchardat){unsignedchari=0;for(i=8;i>0;i--){P3&=ZERO;(
dat&0x01)?(P3|=SET):(P3&=ZERO);delayus(5);P3|=SET;dat>>=1;}
delayus(4);}4.1.5DS18B20读取温度程序在读取温度过程中,首先要向DS18B20中写入命令,使其开始获取温度
并转换。程序中WriteOneChar(0xCC)、WriteOneChar(0x44)这两句命令为写跳过读ROM指令与写温度转换
指令,待启动温度转换后,重新初始化DS18B20,再写入读取温度数据的命令,就可以读取寄存器中存储的温度数据了。由于温度在寄存器中
是12位的,所以需要分两次读取。以下是读取温度的程序。voidreadtemp(void){unsignedchara=0
;unsignedcharb=0;unsignedintt=0;floattt=0;inti;Init_DS18B20
();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0x44);//启动温度转换
Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0xBE)
;//读取温度寄存器等(共可读9个寄存器)前两个就是温度for(i=3;i>=0;i--){a=ReadOneCha
r(i);b=ReadOneChar(i);t=b;if(t<8){fu[i]=0;//fu为0则数据为正t<<=8;t=t|a;
}else{fu[i]=1;//数据为负t<<=8;t=t|a;t=~t;t=t+1;}tt=t0.0625;t=tt10
;//放大10倍输出并四舍五入temp_data[i]=t;}}4.2串口通信模块的调试为了能够在电脑端看到单片机发出的数据
,我们必须借助一个WINDOWS软件进行观察,这里我们利用一个免费的电脑串口调试软件。软件界面如图4.2所示,我们先要设置一下串口
通讯的参数,将波特率调整为4800bps,勾选十六进制显示。串口选择为COM1,当然将网站提供的52单片机实验板的串口也要和电脑的
COM1连接,将烧写有程序的单片机插入单片机实验板的万能插座中,并接通52单片机实验板的电源。图4.2电脑串口调试界面4.3VB
显示程序设计在上位机做好VB显示界面,接受下位机发送的数据,做到正确显示。如单击串口开关就能显示测的P3.2至P3.5口上测得的温
度。VB显示界面如图4.3所示图4.3VB显示界面5Protues软件仿真5.1Protues软件介绍Proteus软件是英
国Labcenterelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它
EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片
机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理
图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件
、PCB真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AV
R、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,
它也支持IAR、Keil和MPLAB等多种编译器。5.2功能特点Proteus与其他的仿真软件相比较,在下面的优点:1.能仿真模
拟电路、数字电路、数模混合电路;2.能绘制原理图、PCB图;3.几乎包括实际中所有使用的仪器4.其最大的亮点在于能够对单片机进行实
物级的仿真。从程序的编写,编译到调试,目标版的仿真一应俱全。支持汇编语言和C语言的编程。还可配合KeilC实现程序的联合调试,将
Proteus中绘制的原理图作为实际中的目标板,而用KeilC集成环境实现对目标板的控制,与实际中通过硬件仿真器对目标板的调试几
乎完全相同,并且支持多显示器的调试,即Proteus运行在一台计算机上,而KeilC运行在另一台计算机上,通过网络连接实现远程的
调试。5.3Protues的电路仿真功能在Protues绘制好原理图后,调入已编译好的目标代码文件:.HEX,可以在PROTE
US的原理图中看到模拟的实物运行状态和过程。Protues是单片机课堂教学的先进助手。Protues不仅可将许多单片机实例功能形象
化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。它的元器件、
连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电
路修改、软件调试、运行结果等。课程设计、毕业设计是学生走向就业的重要实践环节。由于Protues提供了实验室无法相比的大量的元器件
库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台随
着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程的统一的特点。可使设计时间大为缩短
、耗资大为减少,也可降低工程制造的风险。相信在单片机开发应用中PROTEUS也能茯得愈来愈广泛的应用。使用Proteus软件进行
单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;在单片机
课程设计和全国大学生电子设计竞赛中,我们使用Proteus开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单
片机的学习比单纯学习书本知识更容易接受,更容易提高。实践证明,在使用Proteus进行系统仿真开发成功之后再进行实际制作,能极
大提高单片机系统设计效率。因此,Proteus有较高的推广利用价值。5.4温度显示模块的仿真本设计对温度显示模块使用Protu
es软件进行了仿真画好仿真电路图后,将Keil软件中调试好的程序所产生的hex文件下载到单片机中,点击开始仿真按钮,软件开始仿真。
仿真图如图5.1所示。图上显示的是第三路DS18B20所测得的温度,数值为18摄氏度。仿真开始后,单位的数码管会交替显示1、2、3
、4,而四位的数码管会显示此路DS18B20测得的温度。各路DS18B20的温度值可以根据需要设定,显示也会随之改变。图5.1温度
显示模块仿结论本次毕业设计的主要任务是通过DS18B20单线数字温度传感器和单片机实现多点测温,在其中添加了数码显示温度的功能,
采集的数据通过串口上传给PC上位机,并在上位机上显示所测的各点温度值。实现远程多点温度遥测功能~它可以实时在电脑上监控室内各点的温
度。通过指导老师的指导和自己的努力,最终实现了这一课题~但是由于时间的关系,设计的软、硬件的许多功能还有待完善和改进。在毕业设计的
整个过程中,让我熟悉了单片机开发的每个步骤,它不但检查了我的整个知识面的掌握程度,知道了自己的不足,让我更加牢固的掌握了单片机方面
的相关知识~也让我学会了在遇到问题时,如何冷静的思考问题,学习、解决问题~更让我懂得了学习贵在坚持,学到了更多以前没有学到过的知识
。此次毕业设计是我们从大学毕业生走向未来工程师重要的一步。从最初的选题,开题到画硬件原理图再到软件调试直到完成设计。其间,查找资料
,老师指导,与同学交流,反复修改设计,每一个过程都是对自己能力的一次检验和充实。毕业设计收获很多,比如学会了查找相关资料相关标准,
分析芯片功能,提高了自己的画图与编程能力,懂得了许多经验公式的获得是前人不懈努力的结果。同时,仍有很多课题需要后辈去努力去完善。但
是毕业设计也暴露出自己专业基础的很多不足之处。比如缺乏综合应用专业知识的能力,对材料的不了解,等等。这次实践是对自己大学四年所学的
一次大检阅,使我明白自己知识还很浅薄,虽然马上要毕业了,但是自己的求学之路还很长,以后更应该在工作中学习,努力使自己成为一个对社会
有所贡献的人。致谢经过近一个学期的忙碌和学习,本次毕业设计已经顺利完成。本文是在老师的悉心指导下完成的。承蒙老师的亲切关怀和精心
指导,虽然有繁忙的工作,但仍抽出时间给予我学术上的指导和帮助,特别是给我提供了许多参考资料,使我从中受益非浅。老师对学生认真负责的
态度、严谨的科学研究方法、敏锐的学术洞察力、勤勉的工作作风以及勇于创新、勇于开拓的精神是我永远学习的榜样。在此,谨向老师致以深深的
敬意和由衷的感谢!其次,还要感谢大学三年来所有指导过,教育过我的老师们,正是你们不倦的教诲,使我打下了扎实的专业基础;同时还要感
谢所有的同学们,正是因为有了你们的支持和鼓励,此次毕业设计才会顺利完成。最后,我仅用一句话来表达我无法言语的心情:感谢你们!参考文
献[1]胡振宇.刘鲁源,杜振辉.DS18B20接口的C语言程序设计[J].单片机与入式系应用,2002.7.1.[2]金伟
正.单线数字温度传感器的原理与应用[J]。电子技术应用.2000.(6).[3]李朝青.单片机原理及接口技术[M].北京:航空航
天大学出版社,1994.[4]廖卫东.VisualBasic编程手册[M].北京:机械工业出版社,1996.[5]周月
霞,孙传友.DS18B20硬件连接及软件编程[J].传感器世界,2001(12).[6]单线数字温度传感器资料[M].武汉
:武汉力源电子有限公司,1996.[7]贾东耀,汪仁煌.数字温度传感器在仓库温度检测系统的应用[J].传感器世界,2001.[8
]徐淑华.单片微型机原理及应用[M].哈尔滨:哈尔滨工业大学出版社,1994.[9]何立民.单片计应用系统设计[M].北京:航
空航天大学出版社,1990.1.[10]刘君华.智能传感器系统[M].西安:西安电子科技大学出版社,1999.1.[11]沙占
有.智能化集成温度传感器原理与应用[M].北京:机械工业出版,2002.7:84-102附录1.室温检测系统总原理图2.DS18
B20温度采集源程序#include#include#defineuintunsigned
int#defineucharunsignedchar#defineSET0x0f#defineZERO0xf
0sbitDQ=P3^5;//定义通信端口uintaa=0;flag=0;inttemp_data[4];intfu[
5];unsignedinttemp1;intback[5];voidInit_Max7219(void);void
Write_Max72191(unsignedcharaddress,unsignedchardat);voiddela
y(intz){inti,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}voiddelay
us(unsignedinti){while(i--);}voidinit(void){TMOD=0x21;//定时器1为
方式2,定时器0为方式1SCON=0x50;//TH0=(65536-50000)/256;//TL0=(65536-50000)
%256;TH1=0xf3;TL1=0xf3;EA=1;TR1=1;//ET0=1;//TR0=1;}voidInit_DS18
B20(void){P3|=SET;//复位delayus(8);//稍做延时P3&=ZERO;//单片机将总线拉低
delayus(80);//精确延时大于480usP3|=SET;//拉高总线delayus(14);//稍做延时后d
elayus(20);}unsignedcharReadOneChar(intsel){unsignedchari=0;
unsignedchardat=0;for(i=8;i>0;i--){P3&=~(0x01<冲信号dat>>=1;P3|=0x01<elayus(4);}return(dat);}//写一个字节voidWriteOneChar(unsignedchard
at){unsignedchari=0;for(i=8;i>0;i--){P3&=ZERO;(dat&0x01)?(
P3|=SET):(P3&=ZERO);delayus(5);P3|=SET;dat>>=1;}delayus(4);
}//读取温度voidreadtemp(void){unsignedchara=0;unsignedcharb=0;u
nsignedintt=0;floattt=0;inti;Init_DS18B20();WriteOneChar(0xCC
);//跳过读序号列号的操作WriteOneChar(0x44);//启动温度转换Init_DS18B20();Write
OneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存
器)前两个就是温度for(i=3;i>=0;i--){a=ReadOneChar(i);b=ReadOneChar(i
);t=b;if(t<8){fu[i]=0;//fu为0则数据为正t<<=8;t=t|a;}else{fu[i]=1;//数据为负
t<<=8;t=t|a;t=~t;t=t+1;}tt=t0.0625;t=tt10;//放大10倍输出并四舍五入temp_
data[i]=t;}}voiddis18b20(intnum){intbai,shi,ge,t;t=temp_d
ata[num];Write_Max72191(5,num);bai=t/100;shi=t/10%10;ge=t%10;if(f
u[num]){if(bai==0){Write_Max72191(0x09,0xff);Write_Max72191(6,10
);Write_Max72191(7,shi+128);Write_Max72191(8,ge);}if(bai==1){Writ
e_Max72191(0x09,0xdf);Write_Max72191(6,0x31);Write_Max72191(7,sh
i+128);Write_Max72191(8,ge);}if(bai>1){Write_Max72191(0x09,0xff)
;Write_Max72191(6,10);Write_Max72191(7,bai);Write_Max72191(8,shi)
;}}else{Write_Max72191(0x09,0xff);if(bai==0)Write_Max72191(6,15)
;elseWrite_Max72191(6,bai);Write_Max72191(7,shi+128);Write_Max721
91(8,ge);}}voidmain(void){uintge,shi,bai,t;intnum=1;init();I
nit_DS18B20();Init_Max7219();while(1){readtemp();dis18b20(num++);
if(4==num)num=0;t=temp_data[0]+temp_data[1]+temp_data[2]+te
mp_data[3];t=t/4;bai=t/100;shi=t/10%10;ge=t%10;//readtemp();t=1
;TI=1;//用printf之前先将TI置1printf("%d%d%c%d",bai,shi,''.'',ge);//把A1给b
再传出去//while(!TI);//保证数据发送完TI=0;delay(1000);}}3.MAX7219控制数码管显示源程序#
include#defineHIGH1#defineLOW0#defineTRUE1
#defineFALSE0#defineZERO0#defineMSB0x80#defineLSB
0x01//max7219part#defineDECODE_MODE0x09//解码模式,0xff全部解码,0x0f
,解前四个,不解的话显示为乱码//各数位D0-D7为0表示该数位非解码,为1则为BCD解码#defineINTENSITY
0x0A#defineSCAN_LIMIT0x0B//扫描限度,扫描到第几个数码管,0x00-0x07#define
SHUT_DOWN0x0C//关机模式,0x00为关机,0x01为正常#defineDISPLAY_TEST0x0F/
/显示测式sbitLOAD1=P2^1;//MAX7219Load-DataInput:risingedgepin
12sbitDIN1=P2^0;//MAX7219Serial-DataInput:risingedgepin1s
bitCLK1=P2^2;voidWrite_Max7219_byte1(unsignedchartemp);//writ
emax7219abytevoidWrite_Max72191(unsignedcharaddress,unsigne
dchardat);//writemax7219commandanddatavoidInit_Max7219(void
);//Initizemax7219delay(intz);voidWrite_Max7219_byte1(unsigne
dchartemp){unsignedchari;for(i=0;i<8;i++){CLK1=LOW;DIN1=(bi
t)(temp&MSB);temp<<=1;CLK1=HIGH;}}voidWrite_Max72191(unsignedch
araddress,unsignedchardat){LOAD1=LOW;Write_Max7219_byte1(addre
ss);Write_Max7219_byte1(dat);LOAD1=HIGH;}voidInit_Max7219(void){
Write_Max72191(SHUT_DOWN,0x01);//NormalOperationXXXXXXX1Sh
utdownModeXXXXXXXX0Write_Max72191(DISPLAY_TEST,0x00);//Norma
lOperationXXXXXXX0DisplayTestModeXXXXXXXX1Write_Max72191(D
ECODE_MODE,0xff);//DecodeModeSelectD7~D01Bdecode0Nod
ecodeWrite_Max72191(SCAN_LIMIT,0x07);//SCANLIMIT0~70xX0~0x
X7Write_Max72191(INTENSITY,0x04);//SetIntensity0xX0~0xXf}4.V
B显示程序Dimtxt2AsByteDimonerecAsBooleanDiminbyte()AsByteDim
str2AsStringPrivateSubCombo1_Change()MSComm1。CommPort=Val(
Right(Combo1。Text,1))EndSubPrivateSubCommand1_Click()EndEndS
ubPrivateSubCommand2_Click()If(MSComm1.PortOpen=False)ThenM
SComm1.PortOpen=TrueCommand2.Caption="串口已经打开"ElseMSComm1.Port
Open=FalseCommand2.Caption="串口已经关闭"EndIfEndSubPrivateSubF
orm_Load()OnErrorResumeNextMSComm1.PortOpen=FalseCommand2.Ca
ption="串口开关"MSComm1.CommPort=1''设置端口1MSComm1.InputLen=0''读取
缓冲区全部内容MSComm1.InBufferCount=0''清除接收缓冲区MSComm1.RThreshold=12''设置接收12个字节产生OnComm事件InBufferSize=12MSComm1.InputMode=comInputModeBinary''二进制方式MSComm.Settings="9600,N,8,1"''9600波特率,无校验,8位数据位,1位停止位onerec=FalseEndSubPrivateSubMSComm1_OnComm()Dimstr1AsString,a1AsStringDimiAsInteger,sjAsIntegerDimjAsIntegerDimstr1AsString,str2AsStringDimstr3AsString,str4AsStringDimstr5AsString,str6AsStringDimstr7AsString,str8AsStringDimbitweenAsStringSelectCaseMSComm1.CommEventCasecomEvReceiveinbyte=MSComm1.Inputbitween="0"Fori=LBound(inbyte)ToUBound(inbyte)SelectCaseiCase0str1=inbyte(i)Case1If(inbyte(i)<10)Thenstr2=str1&"."&bitween&inbyte(i)Elsestr2=str1&"."&inbyte(i)EndIfText1(0).Text=str2+"℃"Case2str3=inbyte(i)Case3If(inbyte(i)<10)Thenstr4=str3&"."&bitween&inbyte(i)Elsestr4=str3&"."&inbyte(i)EndIfText1(1).Text=str4+"℃"Case4str5=inbyte(i)Case5If(inbyte(i)<10)Thenstr6=str5&"."&bitween&inbyte(i)Elsestr6=str5&"."&inbyte(i)EndIfText1(2).Text=str6+"℃"Case6str7=inbyte(i)Case7If(inbyte(i)<10)Thenstr8=str7&"."&bitween&inbyte(i)Elsestr8=str7&"."&inbyte(i)EndIfText1(3).Text=str8+"℃"EndSelectNextiMSComm1.InBufferCount=0EndSelectEndSub西安铁路职业技术学院毕业设计(论文)西安铁路职业技术学院毕业设计(论文)室内温度自动检测系统的设计与应用西安铁路职业技术学院毕业设计(论文)西安铁路职业技术学院毕业设计(论文)II-1--22--21-
献花(0)
+1
(本文系笑谈人生5tr...首藏)