基于C8051F020车辆散热系统参数检测仪的设计

更新时间:2024-02-27 23:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

密级:公开 基于C8051F020车辆散热系统

参数检测仪的设计

Design of the cooling system parameters of vehicle detector based on C8051F020

学 院: 专 业 班 级: 学 号: 学 生 姓 名: 指 导 教 师:

年 月

摘要

车辆散热系统的参数是车辆安全行驶的保障,其散热系统的稳定性也是衡量车辆先进性的重要标志。因为车辆的各个系统都有一定的参数范围,当各零件的参数都在此范围内时其性能指标才最正常,所以需要很好的监测系统指标的准确性和稳定性,给汽车行业以有力的保障。

当前,我国车辆系统的制造虽已进入自主创新的发展阶段,但由于客观条件的限制,无法长期准确的向工程设计部门提供有效的实车实验数据,严重影响我国车辆总体技术的进一步发展,危害着驾驶者的人身安全。

为了保证在不改变车辆现有结构和性能的前提下,实时监测车辆散热系统的参数,我制作了以单片机C8051F020作为控制核心的车辆散热系统参数检测仪,通过使用DS18B20温度传感器和MPX2100压力传感器,能够准确的获得车辆散热系统的参数,并采用LED实时显示测量的温度和压力,将其与计算机应用软件结合,能够很好的控制参数的范围并采用蜂鸣器来实现报警功能起到预防作用,通过RS-485进行异步串行通信,更好的接收参数信息。

此次车辆散热系统参数检测仪的设计,我查阅了大量的相关资料,制作了较完备的原理图,并且通过编译、调试程序,使系统的性能满足毕业设计的各项要求,整个系统的设计比较成功。

关键词:C8051F020;车辆散热系统;测温;测压

I

Abstract

Parameters of the vehicle cooling system is to protect the safety of vehicles traveling, the stability of its advanced cooling system is also an important indicator to measure the vehicle. Because each system has a certain vehicle parameters, when the parameters of the components are within this range,its performance was the most normal, so the accuracy and stability requires good monitoring system indicators give a strong automotive industry guarantee.

Currently, the manufacture of vehicle systems have entered into the stage of development of independent innovation, but because of objective conditions, it is unable to provide effective long-term accurate experimental data to the real vehicle engineering and design departments, seriously affect the further development of China's overall vehicle technology, hazard the driver's personal safety.

In order to ensure that the vehicle does not change the premise of the existing structure and performance parameters of real-time monitoring of the vehicle's cooling system, I made C8051F020 microcontroller core vehicle cooling system as the control parameter detector by using DS18B20 temperature sensors and pressure sensors MPX2100, which are able to obtain accurate parameters of the vehicle's cooling system , and the use of LED time display of temperature and pressure measurements will be combined with computer applications, which can be a good range of control parameters to achieve using the buzzer alarm function play a preventive role via RS-485 asynchronous serial communication, better reception parameter information.

In order to design the vehicle cooling system parameter monitoring , I read a lot of relevant information,making a more complete schematic,and by compiling, debugging procedures,the system performance to meet graduation requirements designed to compare the overall system design success.

Keywords: C8051F020; vehicles cooling system; temperature; manometry

II

目 录

摘 要 ............................................................................................................................ I Abstract ........................................................................................................................ II 第1章 绪论 ............................................................................................................... 1

1.1 课题研究的背景和意义 .............................................................................. 1 1.2 国内外研究现状及其发展 .......................................................................... 1 1.3 本课题主要研究的内容 .............................................................................. 1 1.4 本章小结 ...................................................................................................... 2 第2章 方案的比较和论证 ....................................................................................... 3

2.1 基于C8051F020车辆散热系统参数检测仪的设计原则 ......................... 3 2.2 本系统所用元器件的选取 .......................................................................... 3

2.2.1 压力传感器的选择 ........................................................................... 3 2.2.2 温度传感器的选择 ............................................................................. 4 2.2.3 即时显示器件的选择 ......................................................................... 5 2.2.4 通信接口的选择 ................................................................................. 6 2.3 总体设计思想 ............................................................................................ 7 2.4 本章小结 ...................................................................................................... 8 第3章 车辆散热系统参数检测仪的硬件电路设计 ............................................... 9

3.1 C8051F020单片机模块介绍 ......................................................................... 9

3.1.1 C8051F020单片机中断系统 .............................................................. 9 3.1.2 C8051F020单片机复位电路 ............................................................ 10 3.1.3 C8051F020单片机端口输入/输出 ................................................... 13 3.2 压力传感器模块 ....................................................................................... 13

3.2.1 MPX2100半导体压力传感器的性能特点 ...................................... 13 3.2.2 差分放大电路的构成 ....................................................................... 14 3.2.3 压力采集模块与单片机的连接 ....................................................... 14 3.3 温度信号采集模块 .................................................................................... 13

3.3.1 DS18B20的性能特点 ....................................................................... 11 3.3.2 DS18B20的测温原理 ....................................................................... 14

III

3.3.3 DS18B20与单片机的连接 ............................................................... 14

3.4 CH451实现扫描驱动和数码显示功能 ................................................... 15

3.4.1 显示驱动功能 ................................................................................... 16

3.4.2 键盘扫描功能 ................................................................................... 17

3.5 报警电路的设计 .......................................................................................... 18

3.6 本章小结 ...................................................................................................... 18 第4章 系统的软件设计 ......................................................................................... 18

4.1 系统主程序流程图 .................................................................................... 19 4.2 压力检测(MPX2100)子程序流程图 ................................................... 21 4.3 温度检测(DS18B20)子程序流程图 .................................................... 21 4.4 键盘扫描和数码显示流程图 .................................................................... 23 4.5 本章小结 .................................................................................................... 24 第5章 结论 ............................................................................................................. 25 参 考 文 献 ............................................................................................................... 26 致 谢 ..................................................................................................................... 26 附 录 ..................................................................................................................... 28

IV

沈阳工业大学本科生毕业设计(论文)

第一章 绪论

1.1课题研究的背景和意义

汽车产业是国民经济重要的支柱产业,产业链长、关联度高、就业面广、消费拉动大,在国民经济和社会发展中发挥着重要作用。随着科技的发展和人民生活水平的不断提高,人们对汽车的需求也急剧增加,当汽车普及率大幅度提高后,人们对汽车的消费观念已由奢侈品转移为生活必需品,相对的,对产品的质量要求,售后服务水平也日益提高,为了能更好的让汽车为我们的生活服务,更安全的行驶,需要保证车辆散热系统的稳定。

此次课题研究的重点在于通过软件编程来实现复杂实用的功能,充分利用了单片机对数字信号的高敏感性、实时性、可控性和温度传感器与压力传感器的准确性,并使用LED显示,功能齐全且应用方便。同时,系统结构电路简单,成本低,可以很好的普及应用于汽车行业。

1.2国内外研究状况及其发展

车用传感器是汽车计算机系统的输入装置,在20世纪60年代,汽车上仅有机油压力传感器、油量传感器和水温传感器,它们与仪表或指示灯连接。进入70年代后,为了治理排放,又增加了一些传感器来帮助控制汽车的动力系统,因为同期出现的催化转换器、电子点火和燃油喷射装置需要这些传感器来维持一定的空燃比以控制排放。80年代后,防抱死制动装置和气囊提高了汽车安全性[1]。如今,传感器应用于汽车行业可以用来测定各种流体温度和压力(如进气温度、气道压力、冷却水温和燃油喷射压力等),但就我国汽车行业的发展状况看,由于缺乏实车试验测试条件,加上车辆工作环境的复杂性,使得有效的实车试验数据严重缺乏,试验周期长,数据可复现性差,无法向工程设计部门提供准确有效的实车试验数据,严重影响车辆总体技术的进一步发展。所以从这个角度来说,我国的车辆散热系统参数监测的研究存在着一定的发展空间。

1.3本课题主要研究的内容

本课题以C8051F020单片机为核心,将信息采集技术、信息存储技术及信息处理技术、信息传输技术等相互融合,来对车辆散热系统的压力和温度参数进行高精度的测量,以便实时发出报警提示,在汽车行驶中提示用户注意安全。

1

沈阳工业大学本科生毕业设计(论文)

压力采集模块采用的MPX2100半导体压力传感器可以把压力转换成毫伏级的差模电压,具有良好的线性度,它的输出电压与外加的压力成精确的正比例关系,温度采集模块采用DS18B20对温度进行实时监测,单片机可随时读取压力和温度数据,并通过远程异步通信设备传输出来,并将采集来的信息通过LED实时清晰的呈现给用户,以便用户随时了解当前的设备工况。

本设计主要做了如下几个方面的工作:首先是确定系统的总体功能设计方案;其次是进行温度传感器的硬件电路和软件系统的设计;再次是进行压力传感器的硬件电路和软件电路的设计;最后对设计的车辆散热系统进行调试运行。整个系统最终系统要完成的功能如下:

1) 实现对车辆散热系统压力参数的显示; 2) 实现对车辆散热系统温度参数的实时显示; 3) 实现通过程序设置温度与压力的正常范围; 4) 实现检测车辆散热系统参数溢出报警; 5) 将采集信号通过异步通信传输。

1.4 本章小结

本章首先介绍了汽车对当今人们生产、生活所带来的影响,以及压力传感器和温度传感器的现状和发展,其次对国内外压力传感器和温度传感器的发展前景进行了简单陈述,最后交待本次设计的主要内容和要求。

2

沈阳工业大学本科生毕业设计(论文)

第二章 方案的比较和论证

2.1 基于C8051F020车辆散热系统的参数监测仪的设计原则

(1)设计合理。设计的检测仪是为了能够完成相应的功能,所以能够保证可以使用是所有设计原则的基础,本次设计是为了检测车辆散热系统的参数,即应用相应的温度传感器和压力传感器,通过驱动和数码管相连,进行实时检测,并连接蜂鸣器进行报警提醒,由于检测的是车辆内部结构的参数,所以需要将数据传输出来。整个过程的核心是C8051F020单片机,联系着各个模块,使整个过程趋于完整。

(2)设计方便实用。系统的设计最终是要给用户使用的,所以在系统的软硬件设计时,应本着从使用者角度考虑操作和维护的简洁性和灵活性,尽量使得系统操作简单易懂,避免要进行专业培训,从而使系统有很大的实用价值和广阔的市场空间。所以在设计系统时按键个数少功能简单便于记忆,数码管显示参数更直观易懂,报警设置更加人性化。

(3)设计系统价格合理。设计系统应选择更廉价功能更强大的器件,单片机的型号已经选定,所以应该比较选择好各个传感器以及驱动部分元器件,同时外围硬件电路在保持基本功能的同时做相应的简化处理,在系统性能和速度可以满足的情况下尽可能用软件是先来取代硬件实现。

2.2 本系统所用元器件的选取

现在的市场上器件各种各样,不同的设计要求决定了需要不同的元器件,本文基于上面所提到的设计原则,提出几种备选方案,经过论证对比,以确定选用的最佳方案。 2.2.1 压力传感器的选择

压力传感器主要用于检测气缸负压、大气压、涡轮发动机的升压比、气缸内压、油压等。吸气负压式传感器主要用于吸气压、负压、油压检测。汽车用压力传感器应用较多的有电容式、压阻式、差动变压器式(LVDT)、表面弹性波式(SAW)。设定方案如下:

方案一:采用应变片压力传感器。其原理是:当导体或半导体在受到外界

3

沈阳工业大学本科生毕业设计(论文)

力的作用时,会产生机械形变,从而导致阻值的变化,通过测量阻值的大小,就可以反应外界作用力的大小。但是由于电源电压或电流的增加会造成应变片自身发热,从而造成测量误差,所以若应用此方案,应考虑温度补偿电路。此外,由于应变片阻值的分散性,即使应变片处在无压的状态,应变片电桥仍会有压力输出,故在测量电路中应设置调零电路。

方案二:采用压阻式压力传感器。压阻式传感器是利用晶体的压阻效应制成的传感器。当它受到压力时,应变元件的电阻会发生变化,从而使输出的电压发生变化。在硅膜片上做成四个等值的电阻应变元件。构成惠斯顿电桥。当受到压力作用时,一对桥臂的电阻变大而另一对桥臂电阻变小,电桥失去平衡,输出一个与压力成正比的电压。由于硅压阻式压力传感器的灵敏系数比金属应变的灵敏系数大50~100倍,故硅压阻式传感器多的满量程输出可达几十毫伏至二百多毫伏,有时不需要放大就可以直接测量。此外压阻式传感器采用集成电路工艺加工,尺寸小,重量轻。且分辨率高,频率响应好。但其对温度很敏感,在应用电路中要采用温度补偿。

方案三:采用压电式压力传感器。压电式压力传感器可用来测量压力范围为104~108Pa、频率为几赫至几十千赫的动态压力。在内燃机的气缸、油管、进排气管的压力测量、枪炮的膛压、航空航天等领域都得到了广泛的应用。其弹性元件是由膜片、膜盒等把压力收集起来,转换成集中力,再传递给压电元件。在使用时要考虑到加速度、温度等环境干扰的补偿[2]。

综合上述方案,考虑到使用方便简洁,元件成本问题,采用方案二的压阻式压力传感器作为本次设计的压力传感器。 2.2.2 温度传感器的选择

对于温度传感器来说,温度传感器主要用于检测发动机温度、吸入气体温度、冷却水温度、燃油温度以及催化温度等。温度传感器大致分为三类:数字式温度传感器、逻辑输出温度传感器、模拟式温度传感器。设定方案如下:

方案一:采用热敏电阻,利用电阻随温度的变化情况来测量温度,可满足40~90℃的测量范围,但热敏电阻精度、重复性、可靠性都比较差,其测量温度范围相对较小,稳定性较差,对于本系统对温度的要求无法满足。

方案二:采用温度传感器铂电阻 Pt1000。铂热电阻的物理化学性能在高温和氧化性介质中很稳定,它能用作工业测温元件,且此元件线性较好。在 0~

4

沈阳工业大学本科生毕业设计(论文)

100 摄氏度时,最大非线性偏差小于 0.5 摄氏度。铂热电阻与温度关系是,Rt = R0(1+At+Bt*t) ;其中 Rt 是温度为 t 摄氏度时的电阻;R0 是温度为 0 摄氏度时的电阻;t 为任意温度值,A,B 为温度系数。当然其价格也相对比较昂贵。

方案三:采用数字温度传感器DS18B20,其温度测量范围可以从-55℃~+125℃,-10~+85℃时测量精度为±0.5℃,测量分辨率为0.0625℃,电源电压范围从3.3~5V 。它只需要一根总线做数据传输,同时还可以组建传感器网络,其每个传感器均有单独编号,核心控制器可以进行识别,不需要校正,接口简单,通俗易懂,成本低廉,方便获得。与传统的热敏电阻温度传感器不同,它能够将测量的温度直接显示出来,具体运算过程在程序中实现即可,也可以根据要求改变测量的精度,可以分别在93.75ms和750ms内将温度值转化9位和12位的数字量。因其体积小,接口方便,数据获取简洁,内含寄生电源而得到广泛应用[3]。系统有如下4个特点:

(1)适合于恶劣环境的现场温度测量,系统的抗干扰性好; (2)可实现零功耗等待;

(3)数据串行通信,无需要外部元件; (4)通过信号线供电,不需要备份电源;

综合以上三种方案以及手中拥有的资源,本着为用户着想的原则,数字式温度传感器使用简单,测量数据准确,精度高,功能全,可靠性强,是我们的首选。所以本设计采用第三种方案,利用数字温度计DS18B20作为温度传感器。 2.2.3 即时显示器件的选择

现在使用最多的显示器件有两种:LED显示和LCD显示。设定方案如下: 方案一:LCD显示屏具有体积小、重量轻、省电、辐射低,显示内容丰富且便于携带等特点,LCD显示可以满足用户自定义的需求,可以显示用户需要的自己设计的图案和数据,应用相当灵活方便。尤其是在显示复杂数据时,根本不需要改变硬件电路结构,只需要编写相应的软件代码即可不断地完善和扩展显示的能力。其外围电路设计简单,显示能力的改变不会涉及到硬件电路的结构,可更改性极佳。LCD显示现在已经为广大用户所熟知并广泛应用于现实生活中,美中不足之处是LCD显示屏的价格要稍微高一点,驱动程序的编写对用户要求比较高。

5

沈阳工业大学本科生毕业设计(论文)

方案二:LED(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。LED数码管常用段数一般为7段有的另加一个小数点。LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的LED,除了它们的硬件电路有差异外,编程方法也是不同的。在现实数据比较少的电路中使用LED显示方便,因为程序编写以及外围电路设计均十分简单,但是当遇到要显示大量数据时,LED就显得不那么实用了,这样的特点限制了其扩展能力。

数码管是现在电子设计中使用相当普遍的一种显示设备,每个数码管由7个发光二极管按照一定的排列结构组成,根据七个发光二极管的正负极连接不同,又分为共阴极数码管和共阳极数码管两种,选择的数码管不同,程序设计上也有一定的差别。数码管显示的数据内容比较直观,通常显示从0到F中的任意一个数字,一个数码管可以显示一位,多个数码管就可以显示多位,在显示位数比较少的电路中,程序编写,外围电路设计都十分简单。但是电路一旦被确定,相应的显示能力基本上也随之确定,倘若要显示多为数据时就不得不更改硬件电路,这样给设计带来很多麻烦,不利于扩展[4]。

鉴于本设计需要显示温度值和压力值,和对元件的了解程度,我们选用LED来显示。由于需要即时显示,我们采用动态扫描的方式,同时又减少了使用I/O端口,这样一来既降低了成本也获得了良好的设计效果。 2.2.4通信接口的选择

C8051F单片机具有并行和串行两种基本通信方式,并行通信时指数据的各位同时进行传送,其优点是传送速度快,缺点是数据有多少位就得用多少根传送线[5]。串行通信是指数据一位一位按顺序传送,只需要一对传送线,大大降低了传送的成本,特别适用于远距离通信。本次设计的系统按照设计要求,应选择串行通信方式。

串行通信的传送方向通常有3种,一种为单工配置,只允许数据向一个方向进行传送;另一种是半双工配置,允许数据向两个方向中的任何一个方向传送,但一次只能有一个发送,一个接收;第三种传送方式是全双工配置,允许同时双向传送数据,因此,全双工配置是一对单工配置,他要求两端的通信设备都具有完整和独立的发送接收能力。

6

沈阳工业大学本科生毕业设计(论文)

串行通信分为异步通信和同步通信,异步串行通信用起始位0表示字符的开始,然后从低位到高位逐位传送数据,最后用停止位1表示字符的结束。同步串行通信每一块开头要发送一个或两个同步字符,使发送与接收双方取得同步,数据块的各个字符间取消了起始位和停止位,通信速度得以提高。

C8051F020包含两组异步串行通信接口TX0,RX0和TX1,RX1。用TX0,RX0可以实现RS-232通信;用TX1,RX1可以实现RS-485通信。RS-232为全双工方式通信,通信距离为15m,RS-485为半双工方式通信,通信距离为1200m[6]。

本次设计的车辆散热系统参数检测仪结合单片机和使用方便的特点,选择RS-485异步串行通信。

2.3总体设计思想

综合上述方案的对比论证,本设计选用的主要器件有:C8051F020单片机,温度传感器DS18B20,压阻式压力传感器,数码显示LED,异步串行通信接口MAX485等。系统的整体框图如图2-1。 LED显示模块 温度参数采集模块 键盘显示模块 C8051F0 20 单片机 图2-1 硬件系统设计总体框图

蜂鸣器报警装置 RS-485串行接口 压力参数采集模块 数据存储模块

7

沈阳工业大学本科生毕业设计(论文)

2.4 本章小结

本章主要介绍车辆散热系统参数监测仪中的主要元器件的选择,如压力传感器、温度传感器、通信接口及输出显示设备等。经过对比论证,考虑各器件的性价比,以及现有的元器件,从而选择适合本设计的各种器件以完成所要到达的设计目的。

8

沈阳工业大学本科生毕业设计(论文)

第三章 车辆散热系统参数检测仪的硬件电路设计

通过对上一章提出几种方案进行详细的对比和论证,提出系统的总体设计方案框图。最终系统由要求的C8051F020单片机作为核心器件,DS18B20作为温度传感器,MPX2100压阻式传感器作为压力传感器,LED显示电路和MAX485串行异步通信接口共同构成。本章将对系统的各部分结构和功能进行分类阐述,主要是单片机控制模块,MPX2100压力传感器模块,DS18B20温度传感器模块,LED显示模块,MAX485串行接口模块这几个部分。

3.1 C8051F020单片机模块介绍

C8051F系列单片机是集成的混合信号片上系统(SOC),具有MCS-51内核及指令集完全兼容的微控制器,除了具有标准8051的数字外设部分之外,片内还集成了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件。C8051F020主要特性如下[7]:

(1)高速、流水线结构的8051兼容的CIP-51内核(可达25MIPS)。 (2)全速、非侵入式的在系统调试接口(片内)。

(3)真正12位、100ksps的8通路ADC,带PGA和模拟多路开关。 (4)真正8位、500ksps的ADC,带PGA和8通道模拟多路开关。 (5)两个12位DAC,具有可编程数据更新方式。 (6)64KB可在系统编程的Flash存储器。 (7)4352B的片内RAM。

(8)可寻址64KB地址空间的外部数据存储接口。 (9)硬件实现的SPI、SMBus/IC和两个UART串行接口。 (10)5个通用的16位定时器。

(11)具有5个捕捉、比较模块的可编程计数器/定时器列阵。 (12)片内看门狗定时器、监视器和温度传感器。 3.1.1 C8051F020单片机中断系统

C8051F020单片机中断系统相对于MCS-51的中断系统是一个拓展的中断系统,支持22个中断源,各中断源在片内外与外部输入引脚之间的分配随器件的不同而变化。每个中断源可以在一个SFR中有一个或多个中断标志。当一个外设或外部中断源满足有效的中断条件时,相应的中断标志被置为逻辑1。如果

9

沈阳工业大学本科生毕业设计(论文)

中断被允许,在中断标志被置位时将产生中断。而中断源的开放和关闭以及每个中断源是否被允许中断,都受中断允许寄存器IE、EIE1、EIE2的控制。每个中断源优先级的设定,则由中断优先级寄存器IP、EIP1、EIP2控制。寄存器状态可通过程序由软件设定[8]。 3.1.2 C8051F020单片机复位电路

复位电路是为系统恢复至初始状态而设计的:系统上电时提供复位信号,可以使系统初始化,或者在系统运行出现故障或者运行结束时系统也需要提供复位信号使系统回到初始状态。整个复位电路包括片内外两部分,外部复位信号通过引脚rst加到内部复位电路上,复位信号通过片内一个斯密特触发器与片内复位信号相连。

C8051F020单片机一共有七个复位源,分别是:上电/掉电复位,外部/rst引脚复位,外部CNVSTR信号复位,软件命令复位,比较器复位,时钟丢失检测器和看门狗定时器超时复位。同时在复位电路中还添加了上拉去耦电路以防止由于强噪声引起的复位。复位电路如图3-1所示。

图3-1 C8051F020单片机复位电路

3.1.3 C8051F020单片机端口输入/输出

C8051F020单片机是高度集成的混合信号片上系统,有8个8位I/O端口、64个数字I/O引脚。低端口(P0、P1、P2和P3)既可以按位寻址也可以按字节寻址。高端口(P4、P5、P6和P7)只能按字节寻址。所有引脚都耐5V电压,都可以被配置为漏极开路、推挽输出方式和弱上拉。优先权交叉开关译码器,又称为交叉开关,按优先权顺序将端口0~3的引脚分配给器件上的数字外设。

10

沈阳工业大学本科生毕业设计(论文)

端口引脚的分配顺序是从P0.0开始,可以一直分配到P3.7。为数字外设分配端口引脚的优先权顺序为UART0具有最高优先权,而CNVSTR具有最低优先权。优先权交叉开关的配置是通过3个特殊功能寄存器XBR0、XBR1和XBR2来实现的,当交叉开关配置寄存器XBR0、XBR1和XBR2中外设的对应使能位被设置为逻辑1时,交叉开关将端口引脚分配给外设[9]。如图3-2所示:

图3-2 C8051F020单片机引脚图

3.2 压力传感器模块

本设计采用MPX2100半导体压力传感器来完成压力的测量,此传感器与差动放大电路结合,能够准确的检测到电压,并接入C8051F020单片机进行A/D转换。

3.2.1 MPX2100半导体压力传感器的性能特点

采用的MPX2100半导体压力传感器线性度高,灵敏度高,模拟输出电压与输入的压力值和电源偏置电压成正比。另外,MPX2100所具有的温度补偿特性克服了半导体压力敏感器件存在温度漂移问题。它具有如下特点[10]:

11

沈阳工业大学本科生毕业设计(论文)

(1)由于采用激光微调技术,使电桥零漂输出很小,一般小于±1mV; (2)传感器由热敏电阻组成温度补偿网络,在-40℃~+125℃范围内有较好的温度补偿效果,从而提高了传感器的精度;

(3)具有极好的线性度(±0.25%F.S); (4)有较宽的工作温度范围(-40℃~+125℃); (5)允许过载大(400%);

(6)工作压力范围: 0kPa 到 100kPa 。 3.2.2 差分放大电路的构成

为了保证测量电路的精度,采用LM324放大器。LM324是四运放集成电路,它采用14管脚双列直插塑料(陶瓷)封装。它的内部包含四组形式完全相同的运算放大器,除电源共用外,四组运放相互独立。每一组运算放大器可用图3-3所示的符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“Vdd”、“Vss”为正、负电源端,“7”为输出端。两个信号输入端中,6(-)为反相输入端,表示运放输出端的信号与该输入端的相位相反;5(+)为同相输入端,表示运放输出端的信号与该输入端的相位相同[11]。

图3-3 LM324符号

3.2.3 压力采集模块与单片机的连接

总体来说,该压力检测电路由放大和电压频率变换两部分组成,并由一个4运放和一些电阻组成放大电路,它具有高差模增益和高共模抑制比,而且输入阻抗高,可以调整电路的偏置。测压电路如图3-4所示。在系统电路设计中,VD1采用LM385,其稳定电压为2.5 V,为传感器提供1.5 mA恒流源的基准电

12

沈阳工业大学本科生毕业设计(论文)

压。U2与U3构成差动输入与差动输出的放大电路,通过U5变换为对地的单端信号输出,该输出信号接入C8051F012的模拟输入通道AINO进行A/D转换。

图3-4 测压模块电路图

3.3 温度信号采集模块

本设计采用DS18B20温度传感器来完成温度的测量,此款温度传感器内部具有A/D转换功能,所以输出的信号可以直接和单片机进行通讯而不需要外加A/D转换电路。其内部转换速度很快,可以满足通讯需求,同时简化了外部电路,降低了成本,使得系统的集成度进一步提高,满足简化电路的原则。 3.3.1 DS18B20的性能特点

关于的DS18B20的一些特性我们在第二章中已经简单介绍过,DS18B20的一线接口是其突出的特点,此款温度传感器只需要一根数据线即可完与单片机的通讯。随着科技的发展,现在的DS18B20的集成度更高,性价比也较以前大有改善,其中DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地),供电电压范围:+3.0~+5.5V。实物图如图3-5。

13

沈阳工业大学本科生毕业设计(论文)

图3-5 DS18B20实物图

3.3.2 DS18B20的测温原理

下图即为DS18B20的温度采集流程图,在使用这个温度传感器的时候要对其手册进行认真阅读,其在采集温度和通信十分简单,但是与此同时其对时序的要求也十分严格,因此要想正确的使用它,就必须对它的工作时序了然于心,这样在程序的编写和相应的功能实现上才有可能做到万无一失。

在DS18B20的使用中,对各种脉冲的持续时间有明确的规定。比如说所有读/写时序均必须维持60us以上,否则会出现错误,类似于这样的要求在这款传感器中还有很多,因此要求用户对每个中间模块的正常运行的脉冲持续时间要严格按照说明文档的值进行给定,以确保各个中间环节运行正常,从而最终使得传感器工作在设定的模式,来实现温度的采集和单片机之间的数据传输

[12]

。 计数比较器 斜率累加器 减法计数器 增加 温度寄存器 停止 减到0 减到 0 减法计数器 图3-6 DS18B20测温原理图

高温度系数振荡器 低温度系数振荡器 DS18B20的测温原理如图3-6所示。

预置设定 预置设定

14

沈阳工业大学本科生毕业设计(论文)

3.3.3 DS18B20与单片机的连接

在实际应用中,DS18B20与单片机的连接可以有两种方式。一种是使用外部电源进行供电,使用VDD接外部电源, GND接地,其I/0与单片机的I/0线相连;第二种是用寄生电源供电,即 DSI8B20的VDD接地,其它接法不改变。在使用DS18B20时,不管采用哪种电源模式,传感器I/O口都要接上拉电阻[14]。

温度传感器有两种供电方式:一种为外部供电方式即使用VDD接+5V,相应的完成温度测量的时间较短。第二种是数据线供电方式,此时使用用VDD,它直接从数据线上获取能量,直接完成温度的转换,但是完成的时间相对长一些。采取数据线供电的情况下,用单片机的I/O口实现上拉[13]。本设计中采用第一种模式来实现,其接口电路如图3-7所示。

图3-7 温度传感器与单片机的接口电路

3.4 CH451芯片实现数码显示和键盘扫描

CH451 是一个整合了LED显示驱动和键盘扫描控制以及μP 监控的多功能外围芯片。使用CH451芯片来实现数码显示和键盘扫描非常简单而且占用很少的I/O端口。CH451 内置有RC 振荡电路,可以动态驱动8 位LED或者64 位LED,具

15

沈阳工业大学本科生毕业设计(论文)

有BCD 译码、闪烁、移位等功能;同时还可以进行64 键的键盘扫描;CH451 通过1 线或者可以级联的4 线串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能。本系统的设计主要应用CH451芯片来实现LED显示和键盘扫描功能,同时采用4线与单片机进行通讯连接,因此下面对这两项功能进行简单说明。

3.4.1显示驱动功能:

CH451对LED采用动态扫描驱动,从DIG0到DIG5,如果有一个引脚吸入电流其它引脚则不再吸入电流。因其有强大的电流驱动级,故可以直接驱动共阴极LED。段引脚SEG6~SEG0分别对应着LED的段G到段A,小数点由段驱动引脚SEG7控制,字驱动引脚DIG5~DIG0分别连接6个LED的阴极。实际上,在系统板上的LED并不是同时显示的,而是从左到右依次被点亮和显示的,由于LED之间显示的时间差特别小,人的肉眼是无法分辨出来的,故在LED显示的时候我们看到的是连续的LED数字显示。这样一来我们就可以方便的编写程序,来实现所要达到的功能。

CH451默认工作在不译码方式,这时候多数应用于发光二极管阵列的显示驱动。当然我们可以通过设定使其工作在BCD译码方式,这种方式主要应用于LED驱动,单片机只要给出二进制数BCD码,CH451将对其译码后直接驱动LED显示相应的字符,使得单片机自身不再需要进行译码操作,简化了单片机的运算和处理。本系统的设计中就是采用这样的方法,使用CH451的BCD译码方式来驱动LED显示功能[14]。如图3-8所示。

16

沈阳工业大学本科生毕业设计(论文)

图3-8 显示驱动CH451

3.4.2键盘扫描功能:

CH451的键盘扫描功能支持8×8的矩阵键盘扫描。其在矩阵扫描期间,SEG7~SEG0引脚均带有内部带有下拉电阻,这些引脚用于行扫描输;DIG5~DIG0引脚用于列扫描输出。需要注意的是当启动键盘扫描功能后,DOUT引脚的功能将会由串行接口的数据变为键盘中断以及数据输出。

键盘扫描是定期在显示驱动过程中插入的。在键盘扫描期间,DIG5~DIG0 引脚按照DIG0 至DIG5 的顺序依次输出高电平,其余5 个引脚依次输出低电平;此时SEG7~SEG0 引脚的输出被禁止,当没有键被按下时,SEG7~SEG0 都被下拉为低电平;当有键被按下时,例如连接DIG5 与SEG6 的键被按下,则当DIG5 输出高电平时SEG6 检测到高电平;CH451实行两次扫描,只有两次扫描结果相同时,按键才会被确认,这样做的目的就是为了防止键盘因抖动而误判断。一旦CH451检测到有效按键,则其会记录下按键,并会通过DOUT产生中断,这个时候单片机可以读取按键的代码,确定那个按键被按下。在没有检测到新的有效按键之前,CH451不会再产生任何有效中断。简言之,CH451不支持组合键,同一时刻只能有一个有效按键被按下。

CH451 所提供的按键代码为7 位,位2~位0 是列扫描码,位5~位3 是行扫描码,位6 是状态码(键按下为1,键释放为0)。事实上单片机可以在任何时候读取按键代码,但是通常情况下单片机都会在CH451产生有效中断时读取按键代码。此外,假如想知道按键何时被释放,单片机可以用查询的方式来实现。键盘模块如图3-9所示。

17

沈阳工业大学本科生毕业设计(论文)

图3-9 键盘模块

3.5 报警电路设计

本系统的设计中要求对满足相应条件时提供蜂鸣器发生报警,要求条件为:测定温度大于80℃。压力大于70kPa.在这种情况下即认为车辆散热系统不符合安全要求,此时系统必须发声提示用户当前状态,使得用户在知晓当前情况后进行相应的调整,保证设备的正常运行。蜂鸣器电路的揭发特别简单,只要将其接到单片机的I/O口上,通过内部软件程序的编写即可完成规定的要求。外部电路清晰简单,内部发声的程序也不难,只要将相应的程序加到准确的位置,在正确的时候进行调用即可。蜂鸣器与单片机的连接如图3-10所示。

图3-10 蜂鸣器与单片机的连接

3.6 本章小结

本章主要论述了系统整体的设计,分为压力采集模块、温度采集模块、单片机系统以及使用CH451芯片实现的数码显示和键盘扫描。在每一部分的设计中涉及到各个部分的内部基本结构,基本功能,和基本的实现要求等内容,使得用户对系统的每一个部分都有清晰鲜明的认识和理解,对功能的实现有深入的认识,做到原理功能都了然于心。

18

沈阳工业大学本科生毕业设计(论文)

第4章 系统的软件设计

单片机系统的设计可以说是层出不穷,但是单片机的程序设计却比较有其自身的特点。单片机系统的设计上必须兼顾软件和硬件各自的特点,硬件电路设计一般都是视具体需要而设计的,通用性不强,既定的硬件电路决定了软件的编写难易程度和一系列的编写要求,所以软件的编写受制于硬件,基于这一点考虑,硬件电路的设计要合理,从而方便软件的编写和运行。当然在一些时候相应软件的编写可以代替硬件实现一些功能,但是这样的话一般会以牺牲单片机的运行速度问代价的。总的来说如果可以讲硬件设计与软件设计有机结合起来,不但可以保证运行速度还可以使得软件的编写清晰简单。

在软件设计中,用户通常要根据硬件电路的实际情况来编写软件,受制于相应的电路和连接方式。在这样的情况下,软件的设计一般会将程序分成若干功能模块,然后写相应模块的程序,最后在主程序中进行调用,这样的软件设计清晰易懂,良好的软件设计就应该是这样一个流程。

4.1 系统主程序流程图

本设计中系统的主控制器是C8051F020单片机,系统的工作的过程基本上可描述为:系统上电后,完成各部分的初始化工作。初始化主要包括DS18B20模块初始化,MPX2100压阻式传感器测压模块初始化,单片机相应设置初始化,CH451数码显示驱动芯片初始化等。初始化结束后,系统进入正常工作状态,测压、测温开始进行,温度,压力的上下限初始值由程序设定好,单片机控制各个部分做出相应操作,并将数据在LED上予以显示和控制蜂鸣器是否发出报警信号。系统上电复位后,不再需要人工干预,系统会自己正常工作。系统内部软件会对当前温度和压力做出相应判断,完成设计之初的各项功能。整个系统完全自动化,整个系统程序调试完成后,装入系统运行调试,通过后系统就会像人的大脑一样工作,使用者只需要查看显示数据就可以知道被控对象的当前状态,系统使用方便简单。主程序的流程图如图4-1所示。

19

沈阳工业大学本科生毕业设计(论文)

开始 系统初始化

温度采集 压力采集 温度键是否按下 是 执行温度子程序 否 温度是否超出范围 否 压力键是否按下 是 执行压力子程序 是 蜂鸣器报警 否 压力是否超出范围 否 是 蜂鸣器报警 20

沈阳工业大学本科生毕业设计(论文)

图4-1 系统的程序流程图

4.2压力检测(MPX2100)子程序流程图

对于MPX2100压力检测模块的使用,我查阅了使用手册,具体的程序流程图如下:

开始 初始化 收到应答? N Y 检测压力参数 经过运放电路放大 输入到单片机进行A/D转换 通过单片机和驱动,显示到LED上 返回 图4-2 MPX210021

程序流程图

沈阳工业大学本科生毕业设计(论文)

4.3 温度监测(DS18B20)子程序流程图

DS18B20温度传感器的使用有严格的时序要求,因此在使用它的时候必须按照手册的说明进行相应的设置,否则将无法正确得到温度的数值。依据DS18B20与主控器的通信协议要求,DS18B20完成温度转换要分三步来完成。注意每一次的读写执行之前都要对其进行复位操作,成功复位后会发ROM指令,再发RAM指令,只有按照这样的要求和顺序才能对DS18B20进行用户需要的操作,因其与单片机只用一条数据线进行通信,所以相应的时序和设置要求比较严格,用户在使用时必须严格遵守。

DS1820的使用过程中复位操作使用的次数非常多,复位操作要求主控器将数据线拉低,持续时间为500us后释放总线,传感器收到信号后并不立即做出操作,延时16us至60us后发出60~240us的低脉冲,当主控器接到此信号时则表示传感器复位成功。DS18B20的正确运行包括很多流程每一部分都要做相关的设置和定义,所以对每一部分的运行流程有清晰的认识是非常必要的。做到这些才能真正的会使用DS18B20。现将传感器的程序流程提绘制如图4-3所示。

图4-3 DS18B20程序流程图

发送温度转换指令 读取温度值 收到应答? Y 发送跳过ROM指令 N 初始化DS18B20 初始化DS18B20 N 开始 延时等待温度转换完收到应答? Y 发读暂存器指令 返回 22

沈阳工业大学本科生毕业设计(论文)

4.4 键盘扫描和数码显示流程图

本系统的设计中采用CH451来完成键盘的定时扫描和LED的即时显示。CH451芯片的使用节省了I/O口的使用,同时芯片具有很大的驱动级,可以直接驱动LED进行显示。显示和键盘的功能的实现,均通过单片机与CH451连接后再连接到相应电路,来完成相应的要求。键盘显示流程图如图4-4。数码显示流程图如图4-5。

返回 图4-4 键盘显示

CH451的使用上,是在数码显示驱动的过程中定时插入键盘扫描,一旦有按键被按下,则系统会产生中断,转而执行中断服务子程序,待执行完相应操作后关闭中断,返回中断前的程序继续执行。CH451具有强大的电流驱动,这一点应用于我们的LED显示电路上十分方便简单,同时我们采用即时显示,对测量的距离实时显示在LED上。这样要求CH451芯片实时扫描单片机发来的数据,扫描到数据后立即送到LED上予以显示。

返回 执行中断服务子程序 N 按键按下? 数据到? N Y 显示子程序 启动CH451键盘扫描功能 启动CH451数码显示初始化 开始 初始化 开始 图4-5 数码显示

23

沈阳工业大学本科生毕业设计(论文)

4.5 本章小结

本章主要介绍车辆散热系统参数监测的软件设计流程图,包括系统主程序流程图,测压流程图、测温流程图,键盘扫描流程图、数码显示程序流程图等。对流程图的清晰绘制,会让设计者以及使用者耳目一新,对系统的运行和功能的实现有清楚地认识,在应用的过程中真正理解系统的结构和运行状况。这些在系统的设计中是不可或缺的内容。

24

沈阳工业大学本科生毕业设计(论文)

第5章 结论

本系统的设计应用了大学本科阶段所学习的很多内容,也提高了自学能力。比如去图书馆查找单片机应用的资料,传感器的应用资料,数字电路、模拟电路的综合运用资料以及数码显示的应用等,同时也回顾了C语言编程的过程,将这些内容从理论应用到实践,完成了车辆散热系统参数检测仪的设计,真正的做到了学以致用。同时介绍了整个系统外围电路的搭建以及最终使用C语言编写相应软件来实现所要达到的效果,基本上完成了一下几个方面的工作:

(1) 传感器技术和单片机系统的有机结合,完成了单片机对传感器的控制和数据的采集传输;

(2)系统的软件设计采用模块化编写思想,这样的程序编写简单,清晰易懂;绘画硬件电路原理图,回顾电子线路CAD软件的使用方法;

(3) 显示部分采用LED即时显示,LED的控制采用CH451芯片来实现,占用I/O口少,性能可以达到要求;

(4)温度监测部分采用DS18B20进行温度的采集,压力监测部分采用MPX2100进行压力的采集。在软件中进行温度、压力阈值设定,辅助报警系统;

(5)键盘按键设置的实现也采用的CH451芯片的扫描按键功能,节省资源,实现了预期目标。

基于C8051F020的车辆散热系统参数检测仪的设计基本上可以满足预期的要求,当然也还有很多不足和可以提高的地方。但综合考虑个人能力和所学内容的限制,本系统只能做到现在的程度,虽然没有达到非常完美,但是理论上基本的功能和要求均已经实现,达到了预期设想的目标。

25

沈阳工业大学本科生毕业设计(论文)

参 考 文 献

[1]QIAN Cheng-hui,SU Jian,LIU Yu-mei.Application of the Field Bus Technology in the Automobile Inspection System[J].2006-2

[2]余成波.传感器与自动检测技术[M].北京:高等教育出版社,2009.7 [3]吴畏;黄倩.模拟集成温度传感器设计[J].传感器世界,2012(3). [4]赖寿宏.微型计算机控制技术[M].北京:机械工业出版社,2012.1 [5]鲍可进.C8051F单片机原理及应用[M].北京:中国电力出版社,2006.1

[6]蔡晓雯,杨恢先,李正义,蒋海军.基于C8051F020的外部存储器扩展[J].测控技术,2008(3).

[7]潘琢金,施国君.C8051FXXX高速SOC单片机原理及应用[M],北京航空航天大学出版社,2006.5

[8]万光毅,孙久安,蔡建平.Soc单片机实验、实践与应用设计——基于C8051F系列[M].北京航空航天大学出版社,2006.5

[9]孙求国,聂一雄.C8051F020单片机的应用实践[J]《武汉(南方九省)电工理论学会第22届学术年会、河南省电工技术学会年会论文集》,2010

[10]王卫兵.传感器技术及其应用实例[M].北京:机械工业出版社,2013.5

[11]Duane Taudeske,Pressure Sensors,Selection and Application,Marcel Dekker,Inc.,2001. [12]何希才.传感器及其应用[M].北京:国防工业出版社,2006

[13]Wang Min.The research of measurement and control system of temperature and humidity, carbon dioxide in Greenhouse . March 2007.

[14]Peng Hong li. Design of intelligent monitoring and control system in greenhouse Environment.April 2007

26

沈阳工业大学本科生毕业设计(论文)

致 谢

这次毕业设计的完成是我大学四年学习的检验,我从中重温了曾经学过的知识,提高了自学能力,也最终将理论与实际紧密的结合起来,做到了学以致用。我能够很好的完成车辆散热系统参数检测仪的设计取决于老师的教导,同学的帮助以及学校图书馆的丰厚资源。所以我由衷地感谢他们,感谢沈阳工业大学给我学习成长的机会。

在这里,我首先感谢我的毕业设计指导教师吴丹老师。吴丹老师学术理论知识扎实,做事尽职尽责,一心为学生考虑,总会兢兢业业的为我们设定论文题目,每周会召集我们进行毕设上的学术交流,以便了解我们的制作进度和进行下阶段的指导。每当我遇到难解决的问题时,她总是会提出一些可行性的建议,帮助我共度难关。我毕业设计的顺利完成与吴丹老师的悉心教导是分不开的,由衷地感谢老师为我做的一切。同时我也感谢在大学四年教我专业知识的各位老师,没有模数电老师教给我的专业基础知识就不会搭建起我毕设的轮廓,没有C语言的老师就不会有软硬件结合的本事,没有单片机老师就更不会有设计系统的思路??这些老师缺一不可,没有你们就不会有如今的我,更不会有我设计的车辆散热系统参数监测仪。

其次,我要感谢在百忙之中抽出时间对我进行答辩、评审的各位老师,是你们的高标准严要求让我对设计的系统要求更加精益求精,让我对毕设拥有了更高的热情,感谢你们的无私奉献,感谢你们对我无私的爱。

最后,感谢大学四年曾经在学习和生活中给予我支持和帮助的人,是你们让我成长,让我进步。你们不经意的善举为我心中带来了美好的回忆,让我乐观快乐的成长。同时也促进了我对知识的渴求,让我快乐的在知识的海洋里尽情遨游。你们的善意帮助和支持我将永远铭记,由衷地感谢你们。

27

沈阳工业大学本科生毕业设计(论文)

附 录

附录A:系统总体电路图

28

沈阳工业大学本科生毕业设计(论文)

附录B: 系统源程序

源代码一:主程序部分

#include \#include #include

/************************************************************* _crol_ 字符循环左移 _cror_ 字符循环右移 _irol_ 整数循环左移 _iror_ 整数循环右移 _lrol_ 长整数循环左移 _lror_ 长整数循环右移 _nop_ 空操作C8051 NOP 指令

*************************************************************/ #define uchar unsigned char #define uint unsigned int

#define Timer0_H (65536-36864)/256 //定时器0初值:20ms 高8位 #define Timer0_L (65536-36864)%6

sbit P4=P0^4;

xdata int temp_l[60]; unsigned int Temperture; unsigned int Pressure; int t-LOW=50 int p-HIGH=70; int p-LOW=40;

char flag = 1;

//锁存测量值标志位

char Warning_Flag=0;

void SystemInit(void);

//系统初始化程序 //报警控制程序

void WarningControl(void);

//报警标志

//定义一个数组,用来存取60次的测量值

//测量压力值

//温度值

//蜂鸣器引脚定义

int t-HIGH=80; //定义温度上,下限变量值

extern unsigned char Send_Buf[7]; //发送数据数组

29

沈阳工业大学本科生毕业设计(论文)

extern void Send(unsigned char *S); 入串口发送数据缓冲区等待发送

extern void CH451_Init(void); extern void GetKeyNum(void); extern void KeyControl(void);

//CH451初始化 //获取键值 //键盘控制

extern void ch451_write(unsigned int command); //CH451写程序

//将串口发送数据缓冲区中所有数据发出

extern void DataChang(unsigned int Pre,unsigned int Tem); //将压力、温度数据处理后存

extern void Display_Temp(int tt); extern void Display_Pres(int tt);

//显示温度 //显示压力

extern unsigned int Get_Tmp(void); //获取温度 /*************精确延时函数*****************/ void delay(uint i) { }

//*************************************************// void SystemInit(void) {

SMB0CN=0x44; EIE1|=2; SMB0CR=0xc9; SM_BUSY=0; SI=0; EA=1; }

void SYSCLK_Init(void) { int i;

OSCXCN=0x67; for(i=0;i<256;i++); While (!(OSCXCN&0x80)); OSCICN=0x88; }

Void PORT_Init(void) {XBRO=0x01; XBR2=0x40; }

while(--i);

30

沈阳工业大学本科生毕业设计(论文)

Void SLA_SEND(char chip_select,char*wr_data,char number) {

SENDMODE=0x01; Totalnumber =number; Sendnumber=number; While(SM_BUSY); SM_BUSY=1; SMBOCN=0x44;

COMMAND=(chip_select|WRITE); STO=0; STA=1;

while(SM_BUSY); }

void Init18b20(void) {

SkipROMCode(); WriteDS18b20(0x44); }

void main(void) {

P26=1; tsound=0;

//关闭蜂鸣器

WDTCN=0xde;

WDTCN=0xad;

SystemInit();

void SYSCLK_Init(void); void PORT_Init(void); void Init18b20(void);

void uchar Adc0832(unsigned char channel) //获取压力参数

CH451_Init();

Temperture=Get_Tmp(); //读出当前温度 while(1) {

//测量压力、温度实时显示

if(flag) {

Display_Pres(Pressure);

Display_Temp(Temperature);

31

沈阳工业大学本科生毕业设计(论文)

}

//中断子程序 使用定时器中断T0// void Timer0_ISR() interrupt 1 {

TH0=Timer0_H; TL0=Timer0_L;

//定时器初值装载

static unsigned char counter=0; }

}

KeyControl(); if(Sendflag==1) { }

WarningControl();

//报警控制

//读出当前温度

Temperture=Get_Tmp(); Send(Send_Buf); Sendflag=0;

//键盘控制

DataChang(Pressure,Temperature); //串口通信,发送数据

counter++;

if(counter==50) { }

if(SensorFlag==0) { }

if(Warning_Flag==1) //报警服务程序 { }

P4=~P4; tsound=1; delay(20); tsound=0;

//发送触发信号

//至少延迟10us以上,保证超声波传感器被触发 //禁止触发信号,等待回波信号

//若测量标志清零,则触发下一次测量的触发信号

counter=0; Sendflag=1;

//串口通信,定时发送数据

SensorFlag=1;

32

沈阳工业大学本科生毕业设计(论文)

}

void Timer1_ISR(void)interrupt 3 //定时器1中断服务子程序 { }

void PCA0(void) interrupt 6 {

CCF1=0; csb=sound;

if(csb&&SensorFlag) { }

else if(Count_Flag) {

CR=0;

//停止计数,并取出计数值

stempl=CCAP1L; stemph=CCAP1H; CL=0; CH=0; CCAP1L=0x00; CCAP1H=0x00;

temp_l[SensorCounter] = Get_distance();

//若返回引脚为低,且测量标志位为高

CR=1;

//计数开始

Count_Flag=1;

//若返回引脚为高

//关模块1中断

else if(Warning_Flag==2) { } else { }

P4=1;

//防止结束时候是低电平

static char WFlag=0; WFlag++; if(WFlag==5) { }

P4=~P4; WFlag=0;

33

沈阳工业大学本科生毕业设计(论文)

}

void WarningControl_temp(void) { }

void WarningControl_pressure(void) {

if(pres>HIGH) //如果压力大于上限 {

if(pres>HIGH) //可以消除蜂鸣器非正常响 { }

Warning_Flag=1; //如果压力大于 HIGH,蜂鸣器报警

if(temp>HIGH) //如果温度大于上限 {

if(temp>HIGH) //可以消除蜂鸣器非正常响 { }

Warning_Flag=1; //如果温度大于 HIGH,蜂鸣器报警

}

SensorCounter++; { }

DistanceDataProcess(); SensorCounter=0;

//数据处理

//温度数据个数计数器自加

if(SensorCounter==60)

SensorFlag=0; Count_Flag=0;

}

else if(temp

Warning_Flag=0;

//其它情况蜂鸣器不报警

if(temp

Warning_Flag=2; //如果温度小于 LOW,蜂鸣器报警

}

34

沈阳工业大学本科生毕业设计(论文)

}

}

else if(pres

Warning_Flag=0;

//其它情况蜂鸣器不报警

if(pres

Warning_Flag=2; //如果压力小于 LOW,蜂鸣器报警

}

源代码二:MAX485串口通信部分

#include \

unsigned char Send_Buf[7]={'#',0x04,0,0,0,0,0x55}; //发送两个字节数据

void Send(unsigned char *S);

void DataChang(unsigned int Dis,unsigned int Tem); /*--------------------------------------------------*/ //函数名称:serial

//功能描述:串口接收中断服务 //入口参数:无 //返回值:无 void serial() interrupt 4 { }

/*--------------------------------------------------*/ //函数名称:Send

//功能描述:将串口发送数据缓冲区中所有数据发出 //入口参数:缓冲区地址 //返回值:无

void SendOneByte(uchar ch) // MAX485异步串行通信 {

ES = 0; TI = 0; SBUF=ch; while (TI == 0 ); TI= 0 ;

RI=0;

35

沈阳工业大学本科生毕业设计(论文)

ES = 1; }

/*--------------------------------------------------*/ //函数名称:DataChang

//功能描述:将压力、温度数据处理后存入串口发送数据缓冲区等待发送 //入口参数:压力、温度值 //返回值:无

void DataChang(unsigned int Dis,unsigned int Tem) { }

unsigned char h,l; h=Dis/256; l=Dis%6; Send_Buf[2]=h; Send_Buf[3]=l; h=Tem/256; l=Tem%6; Send_Buf[4]=h; Send_Buf[5]=l;

源代码三:测压部分

#include \#include #include sbit YL=AINO

uchar Adc0832(unsigned char channel) //AD转换,返回结果 {

uchar i=0; uchar j; uint dat=0; uchar ndat=0;

if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_();

ADCS=0;//拉低CS端

36

沈阳工业大学本科生毕业设计(论文)

_nop_(); _nop_();

ADCLK=1;//拉高CLK端 _nop_(); _nop_();

ADCLK=0;//拉低CLK端,形成下降沿1 _nop_(); _nop_();

ADCLK=1;//拉高CLK端 ADDI=channel&0x1; _nop_(); _nop_();

ADCLK=0;//拉低CLK端,形成下降沿2 _nop_(); _nop_();

ADCLK=1;//拉高CLK端 ADDI=(channel>>1)&0x1; _nop_(); _nop_();

ADCLK=0;//拉低CLK端,形成下降沿3 ADDI=1;//控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i<8;i++) {

dat|=ADDO;//收数据 ADCLK=1; _nop_(); _nop_();

ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); dat<<=1;

if(i==7)dat|=ADDO; }

for(i=0;i<8;i++)

37

沈阳工业大学本科生毕业设计(论文)

{ j=0;

j=j|ADDO;//收数据 ADCLK=1; _nop_(); _nop_();

ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); j=j<<7; ndat=ndat|j; if(i<7)ndat>>=1; }

ADCS=1;//拉低CS端 ADCLK=0;//拉低CLK端

ADDO=1;//拉高数据端,回到初始状态 dat<<=8; dat|=ndat;

return(dat); //return ad k }

源代码四:DS18B20部分

#include \#include #include sbit DQ=P0^3;

extern void delay(unsigned int i);

/**********************4*******************/ /*****************DS18B20******************/

void Init_Ds18b20(void) //DS18B20初始化 { }

DQ=0; //单片机拉低总线 delay(900); //精确延时,维持至少480us DQ=1; //释放总线,即拉高了总线

delay(400); //此处延时有足够,确保能让DS18B20发出存在脉冲。

38

沈阳工业大学本科生毕业设计(论文)

/*****************************************************************************************/

unsigned char Read_One_Byte(void) //读取一个字节的数据 从总线移出

{ 效。

_nop_(); _nop_();

_nop_(); //至少维持了1us,表示读时序开始

dat>>=1; //让从总线上读到的位数据,依次从高位移动到低位。 DQ=1; //释放总线,此后DS18B20会控制总线,把数据传输到总线上 delay(10); //延时7us,此处参照推荐的读时序图,尽量把控制器采样时间

放到读时序后的15us内的最后部分

}

/********************************************************/ void Write_One_Byte(unsigned char dat) {

unsigned char i=0; for(i=8;i>0;i--) {

DQ=0; //拉低总线 if(DQ) //控制器进行采样 {

dat|=0x80; //若总线为1,即DQ为1,那就把dat的最高位置1;若为0,则不进行处理,保持为0 } }

return (dat);

delay(100); //此延时不能少,确保读时序的长度60us--很重要 unsigned char i=0; unsigned char dat=0; for(i=8;i>0;i--) {

DQ=0; //将总线拉低,要在1us之后释放总线

//单片机要在此下降沿后的15us内读数据才会有

//读数据时,数据以字节的最低有效位先

39

沈阳工业大学本科生毕业设计(论文)

}

/***********************************************************************/ unsigned int Get_Tmp(void) //获取温度 {

unsigned int temp; float t;

unsigned char a=0,b=0;

Init_Ds18b20(); //初始化 Write_One_Byte(0xcc); //忽略ROM指令 Write_One_Byte(0x44); //温度转换指令 Init_Ds18b20(); //初始化 Write_One_Byte(0xcc); //忽略ROM指令

Write_One_Byte(0xbe); //读读RAM的存储器指令 a=Read_One_Byte(); //读取到的第一个字节为温度LSB b=Read_One_Byte(); //读取到的第二个字节为温度MSB temp=b; //先把高八位有效数据赋于temp

temp<<=8; //把以上8位数据从temp低八位移到高八位 temp=temp|a; //两字节合成一个整型变量 t=temp*0.0625; //得到真实十进制温度值

//因为DS18B20可以精确到0.0625度 //所以读回数据的最低位代表的是0.0625度 temp=t*10+0.5; //此处放大十倍

//这样做的目的将小数点后第一位也转换为

//临时中间变量

_nop_();

nop_(); //至少维持了1us,表示写时序(包括写0时序或写1时序)开始 DQ=dat&0x01; //从字节的最低位开始传输

//指令dat的最低位赋予给总线,必须在拉低总 //因为15us后DS18B20会对总线采样。

delay(100); //必须让写时序持续至少60us ----很重要 DQ=1; //写完后,必须释放总线, dat>>=1;

//因为15us后DS18B20会对总线采样。 delay(2); }

线后的15us内,

40

沈阳工业大学本科生毕业设计(论文)

可显示数字

}

//同时进行一个四舍五入操作。 return(temp);

源代码五:CH451数码显示、键盘扫描部分

#include \

sbit ch451_dclk=P0^2; //串行数据时钟上升延激活

sbit ch451_din=P3^4; // 串行数据输出,接CH451的数据输人 sbit ch451_load=P0^0; //串行命令加载,上升延激活 sbit ch451_dout=P0^1; //键值数据输入,接ch451数据输出

/***********************CH451宏定义************************/ #define CH451_RESET 0x0201 //复位

#define CH451_LEFTMOV 0x0300 //设置移动方式-左移 #define CH451_LEFTCYC 0x0301 //设置移动方式-左循 #define CH451_RIGHTMOV 0x0302 //设置移动方式-右移 #define CH451_RIGHTCYC 0x0303 //设置移动方式-右循 #define CH451_SYSOFF 0x0400 //关显示、键盘、看门狗 #define CH451_SYSON1 0x0401 //开显示 #define CH451_SYSON2 0x0403 //开显示、键盘

#define CH451_SYSON3 0x0407 //开显示、键盘、看门狗功能 #define CH451_DSP 0x0500 //设置默认显示方式 #define CH451_BCD 0x0580 //设置BCD译码方式 #define CH451_TWINKLE 0x0600 //设置闪烁控制——正常显示 #define CH451_DIG0 0x0800 //LED位0显示 #define CH451_DIG1 0x0900 //LED位1显示 #define CH451_DIG2 0x0a00 //LED位2显示 #define CH451_DIG3 0x0b00 //LED位3显示 #define CH451_DIG4 0x0c00 //LED位4显示 #define CH451_DIG5 0x0d00 //LED位5显示 /*************************************************************/ unsigned int display[8]={0x0a00,0x0900,0x0b00,0x0800, 0x0c00,0x0d00,0x0e00,0x0f00};

unsigned char BCD[10]={0xbe,0x24,0xea,0xe6, //0,1,2,3, 0x74,0xd6,0xde,0xa4, //4,5,6,7, 0xfe,0xf6 //8,9

41

沈阳工业大学本科生毕业设计(论文)

};

unsigned char ch451_key=0; // 存放键盘中断中读取的键值

extern char flag;

//锁存标志位

//定义压力下限变量 //定义温度下限变量

//CH451初始化程序 //获取键值程序 //键盘控制程序 //显示温度程序 //显示压力程序

//关闭压力、温度显示程序

extern int p-HIGH; //定义压力上限变量 extern int p-LOW; extern int t-LOW;

void CH451_Init(void); void GetKeyNum(void); void KeyControl(void); void Display_Temp(int tt); void Display_Pres(int tt); void CloseDisplay(void);

void ch451_write(unsigned int command); //CH451写程序 extern int t-HIGH; //定义温度上限变量

/***********************************************************************/ //定义一无符号整型变量存储12字节的命令字// void ch451_write(unsigned int command) { 前

}

void CH451_Init(void) {

ch451_din=0; //先低后高,选择4线输入 ch451_din=1;

ch451_write(CH451_RESET); //CH451复位 }

ch451_load=1; //上升沿加载数据

ch451_din=command&1; ch451_dclk=0; command>>=1;

ch451_dclk=1; //上升沿有效 unsigned char i;

ch451_load=0; //命令开始 for(i=0;i<12;i++)

{

//送入12位数据,低位在

42

沈阳工业大学本科生毕业设计(论文)

重要

}

void Display_Temp(int tt) { 点

}

void Display_Pres(int tt) { {

ch451_write(display[0]+0); //显示温度个位 ch451_write(display[1]+0); //显示温度十位 ch451_write(display[2]+0); //显示温度百位 ch451_write(display[3]+0); //显示压力个位; ch451_write(display[4]+0); //显示压力十位 A2=(tt00)/100; //百位 A1=(tt0)/10; //十位 A0=tt; //个位

ch451_write(display[3]+BCD[A0]); //显示压力个位 ch451_write(display[4]+BCD[A1]); //显示压力十位 ch451_write(display[5]+BCD[A2]); //显示压力百位 }

unsigned char A0,A1,A2; //记录压力各位数的变量 ch451_write(display[2]+BCD[A2]); //显示温度十位 A2=(tt00)/100; //百位

A1=(tt0)/10; //十位——这么处理的目的是显示小数点,因为A1实A0=tt; //个位

ch451_write(display[0]+BCD[A0]); //显示温度小数位

ch451_write(display[1]+BCD[A1]+1); //显示温度个位 此处加一为了加入小数unsigned char A0,A1,A2; //记录温度各位数的变量

ch451_write(CH451_TWINKLE); //设置闪烁控制——正常显示 ch451_write(CH451_SYSON2); //开显示、键盘

ch451_write(CH451_DSP); //设置BCD不译码方式 由于板画错了 此设置很

际是温度的个位

void CloseDisplay(void)

43

沈阳工业大学本科生毕业设计(论文)

}

void GetKeyNum(void) {

unsigned char i; //定义循环变量

unsigned char command,keycode; //定义控制字寄存器,和中间变量定时器 ch451_write(display[5]+0); //显示压力百位

command=0x07; ch451_load=0;

for(i=0;i<4;i++) { ch451_din=command&1; ch451_dclk=0;

command>>=1; ch451_dclk=1;

}

ch451_load=1; keycode=0;

for(i=0;i<7;i++) { keycode<<=1; keycode|=ch451_dout; ch451_dclk=0; ch451_dclk=1;

}

ch451_key=keycode;

}

void KeyControl(void) { if(!ch451_dout) { GetKeyNum(); switch(ch451_key) { case 0x40:

{

temperature= 1;

}break;

//读取键值命令的高4位0111B

//命令开始

//低位在前,高位在后

//右移一位

//产生时钟上升沿锁通知CH451输入位数据

//产生加载上升沿通知CH451处理命令数据//清除keycode

//数据左移一位,高位在前,低位在后

//从高到低读入451的数据

//产生时钟下升沿通知CH451输出下一位

//保存上次的键值

//按键1显示温度测量值

44

沈阳工业大学本科生毕业设计(论文)

{

}

case 0x41:

} break;

Display_Temp(t-HIGH);

//测量值锁定后,按键2显示上限温度

case 0x43: {

if( temperature == 1)

{ if( temperature == 1) {

}break; }

}

}

case 0x49: {if(pressure==1 ){ }break; default:break;

case 0x48: {

pressure=1 //按键4显示压力测量值 }break; case 0x4b: {if(pressure==1 )

Display_Pres(p-HIGH); //测量值锁定后,按键5显示上限压力

Display_Temp(t-LOW);

//测量值锁定后,按键3显示下限温度值

}; break;

Display_Pres(p-LOW); //测量值锁定后,按键6显示下限压力值

45

本文来源:https://www.bwwdw.com/article/reea.html

Top