·摘要
随着社会的进步和科技的发展,越来越多的人开始使用上了液位计,本文设计的液位计是利用89C52单片机作为核心处理器,辅以报警电路,阈值设置电路,检测电路,显示电路从而实现液位计的功能。
本文的液位计可以通过按键设置液位计的高低阈值;利用LCD进行显示,显示设置的高阈值、低阈值以及当前液位高度值;当液位高度值超过高阈值或者液位高度值低于低阈值都会触发报警电路;报警电路利用蜂鸣器进行声音报警。
关键词:89C52单片机;LCD显示屏;蜂鸣器;报警
Abstract
Withtheprogressofsocietyandthedevelopmentofscienceandtechnology,moreandmorepeoplehavebeguntouseliquidlevelgauges.Theliquidlevelgaugedesignedinthispaperuses89C52microcontrollerasthecoreprocessor,supplementedbyalarmcircuits,thresholdsettingcircuits,anddetectioncircuits.thedisplaycircuitthusrealizesthefunctionoftheliquidlevelgauge.
Theliquidlevelgaugeinthispapercansetthehighandlowthresholdsoftheliquidlevelgaugethroughthekeys;useLCDtodisplay,displaythesethighthreshold,lowthresholdandcurrentliquidlevelvalue;whentheliquidlevelvalueexceedsthehighthresholdvalueortheliquidlevelvalueislowerthanthelowthresholdvalueAllwilltriggerthealarmcircuit;thealarmcircuitusesthebuzzertogiveanaudiblealarm.
Keyword:89C52microcontroller;LCDdisplayscreen;buzzer;alarm
1、绪论
1.1选题背景及意义
随着社会的进步和科技的发展,液位计的形式发生了翻天覆地的变化,从最初单纯只是应用尺子量或者用刻度来量取液位。但是随着工业精度要求的提高,这种传统的液位测量方式已经不适用了,人们开始探索新的测量方式。
目前在市面上出现了很多种液位计,他们的测量精度与使用年限各不相同,个厂家都有自己独特的设计方案与设计思路。但是按照正常的市场规律,精度越高的测量仪器那么他对应的价格就会相当的高,那么设计一款精度越高,价格反而非常的便宜的液位计就十分必要了。
电容式液位计是通过将不可测量的物理量液位高度值转化为可以测量的电容大小值,进而得到液位的高度。它的基本原理是:液位高度的变化转化为电容极板间隔的大小变化从而影响电容大小的变化。所以只需要知道电容的大小就可以知道液位的高度变化。电容式液位计使用上价格比较低廉、设计结构也较为简单、使用的寿命还很长,。但是测量电容值大小也会存在误差精度的问题,该怎么解决这个问题成为了本设计的一个出发点。
本设计将测量电容的大小转化为测量电容两端电压大小,用电压值进而反映出电容的大小变化值。
1.2国内外研究现状
在液位计研发设计方面我们国家参与的比较晚,但是随着国家的大力扶植与社会各企业的不断努力研发,研发出来的电容式液位计的精度越来越高,液位计的应用场景也越来越广泛,不仅可以在高压、腐蚀的环境中进行使用还能够在强辐射的环境中应用自如[9]。
国内研发的比较成熟的液位计包括:伺服液位计、浮子液位计、雷达液位计等但是这些基本不太适合作为轻便便宜、实用性较强的液位计进行使用。
电容式液位计价格便宜、设计简单的特点吸引了一种厂商进行大力研发[11],目前虽然已经有了一些成果但还是存在很大的缺点待改进,测量精度一直是一个比较棘手的问题,很早提出来的精度补偿方法是利用温度对其精度进行补偿从而让液位计达到应有的测量精度[10]。但是采用这种方式对液位计的精度依然存在很大的的不足。
而且温度补偿方法操作起来的难度也非常的大,那么本设计从最基本的测量误差本身就很小的液位计就能够从一定程度上减少在测量精度上出现的困难。
2、系统总体设计
2.1设计要求及内容
本文设计的电容式液位计设计是一款利用89C52单片机作为核心处理器的控制系统,利用LCD进行显示设定的高低阈值和当前的液位高度值,当当前液位高度值超过高阈值或者低于低阈值都会触发报警装置。
Object:word/embeddings/Microsoft_Visio_Drawing.vsdx首先通过按键设置好高低阈值这两个阈值送到单片机内部,然后利用测量电压值进而得到液面高度,测量之后的数据通过ADC进行数模转换后被送到单片机内,单片机将到来的数据与设置好的高低阈值进行比较,当送来的数据低于低阈值或者高于高阈值时,单片机会利用引脚发出低电平触发报警电路进行报警。
图2.1系统设计框图
2.2设计方案的选择
2.2.1中心控制器选择
现在的系统设计中主流的控制器一般有单片机、PLC、DSP等,但是这些处理器在使用的过程中都有自己的使用环境和实现功能的难易程度。单片机主要用于小型的控制系统中,应用起来小巧轻便而且功能实现简单;PLC主要应用于大型机械中,控制对象都是较为庞大且复杂的大型机械于本文设计不符,所以不选择它,DSP类控制器主要用于图像处理类的设计,本文的设计不需要产生图像所以这种控制器与本文也不符所以本文不选择这类控制器。
在针对本文的设计较为简单,而且不需要较为复杂的设计功能,所以我们选择现在在小型控制系统中普遍应用的核心控制器单片机。
制作单片机的厂家有很多,例如生产89系列的ATML公司、生产系列的英特尔公司、生产较为出名的STM32系列以及4位单片机的Microchip公司、台湾华邦生产的W78单片机等。但是经常使用的单片机型号就几种,具体型号包括89C51、89C52、STM32,本文使用的是89C52单片机它比89C51功能更加完善且稳定,比STM32应用起来较为简单不需要过多的复杂调用寄存器。
2.2.2显示器选择
目前在显示器这方面应用较多的主要有两样显示器分别为:数码管、LCD显示器,本文应用的LCD显示器。因为本文的设计需要显示很多的数据和字符如果单单使用数码管,设计起来会很麻烦所以本设计采用了LCD进行显示,设计的时候分成两行上面一行显示当前液位高度,下面这行显示的是设置好的高阈值与低阈值。
2.3检测原理
电容式液位计的液位测量是利用了在电机中间被液体覆盖的区域会随着被测液位的变化而变化,从而会引起极板电容的电容大小发生变化。
式中C表示电容值的大小,D表示外电极的直径,d表示内电极的直径,L为整个电容的高度,ε表示中间介质的介电常数,ε0为真空介电常数,大小为8.85*10-12F/m。
Object:word/embeddings/Microsoft_Visio_Drawing1.vsdx在整个测量的过程中传感器的大小形状不改变所以,公式中D、d、L、ε0不变,我们需要考虑的是被测液体的介电常数ε。
图2.1检测装置主视图
如图2.1所示为液位检测装置的主视图,图中标出了具体各个物理量所代表的位置,高度H表示液位的高度,L表示装置的高度,在计算过程中我们需要将整个计算的过程分割成为两个部分,一部分为被测液体覆盖的部分,另一部分为真空的部分。这两部分分别计算后进行加和处理从而得到最终电容的大小。
式中C表示整个检测装置的电容大小,C1表示装置被被测液覆盖部分的电容大小,C2表示装置未被被测液覆盖部分的电容大小(由于未被被测液覆盖所以该处的介电常数为空气的介电常数)。
将式(2.2)化简得:
式中C0表示装置完全被空气覆盖时的电容值,H表示待测液的高度值,其中K的展开式为:
其中ε2为待测液的介电常数,ε1为空气的介电常数
在计算的过程中,C0是不变的,我们只需要将待测液的介电常数,以及测得的整体电容的大小带入到式(2.4)中即可得到待测液的高度。
分段电容式液位计的检测原理为将一个电容检测装置分成若干个电容并联进行测量,电容与电容之间相互独立,在使用的过程中相当于将一个量程为1的检测装置分成N个两成为1/N的检测装置。此时的测量原理与普通的类似,但也有不同,装置使用过程中需要将装置分成三部分:一、完全被待测液覆盖部分、二、完全被空气覆盖部分、三、一部分被待测液覆盖一部分被空气覆盖。计算得出的总体电容是这三部分计算结果的加和。
在计算时需要先判断出液位所在的电容是第几段电容,然后根据公式(2.1)分别计算出此时其他段的点容大小,再利用液位所在的电容根据公式(2.3)计算出此时液位的高度,将完全被待测液覆盖的电容高度加上当钱此块的高度就是我们要求得的液位高度。
3、硬件电路设计
3.1单片机最小系统设计
单片机最小系统一共包括三部分分别为:单片机本体、晶振电路、复位电路
3.1.C52单片机
STC89C52单片机是宏晶公司发布的一款被广泛应用在各个领域的单片机,这款单片机在使用的过程中的传输速度非常快、来自外部的干扰对它几乎不会产生太大的影响、而且在使用中它的消耗也非常的低。该型号的单片机具有8位CPU和可编程闪存器。89C52单片机可接入的电压为直流电压3.3V-5.5V,它能工作在0-40MHZ的频率中[1],在室温条件下也能良好的运行,它采用PDIP-40来进行封装。下面来介绍它的具体引脚功能以及中断等功能:
该单片机的制造使用的存储器技术是一种高密度且非易失的存储器技术,在内部集成了FLASH存储器[2],单片机的使用成本很低,无形之中降低了开发的成本,而且它还可以有效保存近十年之间的数据信息。芯片在程序烧写擦除的过程中可以反复少些擦除上千次,一旦程序发生了错误,只需要将单片机拆卸下来进行修改即可,在使用的过程中很少有废品的产生,除了正常的模式以外,单片机还有空闲模式以及掉电模式两种工作模式,当频率降至0HZ时,可进行静态逻辑操作。空闲模式维持单片机在低功耗、RAM、中断系统、定时计数器及串口部分可以进行正常工作,但是CPU暂时停止工作,这样可以有效的节约能源。当单片机处于掉电模式时,振荡器会停止工作,但是单片机中的数据不会丢失,RAM中存储的内容很容易地就被保存了下来,掉电之后单片机还可以被成功唤醒,但是在下个硬件复位之前单片机不会进行一切工作。
51系列的单片机虽然型号不同,工作模式不同但是他们的引脚都是兼容的,在进行仿真的时候可以相互替代使用。芯片引脚图如图3.1所示,引脚一共分为三大类:控制引脚、基本工作条件引脚、I/O引脚。
VSS(20引脚):供电端口,接低电平GND端。
VCC(40引脚):供电端口,接高电平电源正极。
PSEN(29引脚):外部ROM的读选通信号端。
RESET(9引脚):复位端口。外接R、C,高电平复位。
XTAL2(18引脚):内部振荡电路反相放大器的输出端。
XTAL1(19引脚):内部振荡电路反相放大器的输入端。
ALE/PROG(30引脚):当访问外部存储器时,用于锁存地址的低位字节。
图3.1单片机引脚图
EA/VPP(31引脚):内外ROM选择/片内编程电源。复位后CPU从内部ROM开始执行还是从外部取指令取决于接的电平,接VCC的时候从内部,接地的时候从外部[5]。
P1口(1~8引脚):是结构简单的8位准双向I/O口,内部有阻值比较大的上拉电阻,输入不能锁存,输出没有高组态,信息仅来自于内部总线,所以用途相对比较单一[6]。
P2口(21~28引脚):8位准双向端口,作输出、输入端均可,可以选择独立控制,也可八个为一组去控制,可用作高八位地址总线,缓冲级能够驱动4个TTL门电路。
P0口(32~39引脚):漏极开路型双向端口,可作为低八位地址总线,此端口较其他三者而言有独特作用,使用者可以自行配置外部电路实现,扩展用时不需加上拉电阻。
芯片的内部ROM可以容纳4K的字符,具有在系统可编程特性,程序可直接通过串口飞速下载。片上集成了AT系列没有的存储空间RAM它能容纳的字符。芯片有4个并行端口且都是8位的端口,一共有32个可编程的I/O线,在使用的过程中一共有3个16位定时计数器可供使用,它的EEPROM可容纳2K字符。内部拥有3级的加密程序存储器,看门狗、数据指针以及掉电标识符,它的封装方式一共有三种,有8个中断源,以及通用的异步串行口。
表3.1P3口的引脚及功能
3.1.2晶振电路设计
如图3.2所示,是单片机最小系统的晶振电路,晶振电路相当于最小系统的时钟电路,常常被视作单片机的心脏.它由两个电容与一个晶振组成。两个电容的作用是稳频。该电路与单片机内的反相放大器两端进行跨接,这两段就是单片机的18、19引脚。晶振采用的是内部时钟方式,它的正常运行是单片机进行工作的先决条件,晶振频率越高单片机的运行速度就越快,然而稳定性会相应的降低。
图3.2晶振电路
时钟信号是振荡器产生的振荡脉冲经过二分频之后产生的。振荡器延时起振,电容增大起振时间会相映的延长,电容减小,又不利于振荡器的稳定运行,所以在使用的过程中本文将电容的大小选择为30pF这样会帮助单片机单片机良好的起振、消减单片机产生的谐振、增加单片机在运行过程中的稳定性。在日常使用的过程中经常选用的晶振一共分为两类:一种是11.M,由于它可以产生比较精准的波特率,所以在使用的过程中经常被用在红外遥控和通信系统的电路里,另一种就是12M的晶振,
3.1.3复位电路设计
图3.3复位电路
如图3.3所示,是单片机的复位电路,主要用于单片机的外部复位。设计电路开机之后电容C3开始充电,引脚REST有一段高电平,充满后不再导通,下方有一个下拉电阻然后直接接地,使电阻变成低电平。人们通过按键能够进行认为复位。C3电容的大小影响的是单片机的复位时间,电容值越大单片机的复位时间越短。我们接的是10uF的电容,因为其他大小的电容需要按下复位键单片机的程序才会运行。单片机的复位键,有掉电保持功能,单片机接入备用电源可有效的防止内部的RAM数据丢失。当需要复位时,只需要按下按键电容就处于短路状态,电阻两端的电压会瞬间变大,单片机会接收到很多个机械周期的高电平,这样单片机就实现了复位操作
3.2显示电路设计
图3.4显示电路
本设计的显示电路主要实现的功能是将设置的液位高低阈值,以及当前检测到的液位值。设计中选择的是LCD显示 器,该芯片可以容纳16*2个字符,而且它可以工作在4.5V-5.5V的电压下,最佳显示位置在5.0V,此时的电流值为2.0mA。[13]液晶显示在使用中有很强的直观性、观察的灵活性比较强、而且显示的质量较高、接口的排布较为简单所以接线的复杂程度也较低[14]。显示电路如图3.4所示。
液晶显示下方接移位寄存器74HC,它是一款可以进行三态并行输出的并行移位寄存器。在上升沿来到的时候[15],串行数据经过入口SDL输入到内部的寄存器这个寄存器是8位寄存器,并且由8个输出端并行输出。
该寄存器主要受总线进行驱动,能够穿行输入,并行输出。它的引脚功能介绍如下:
Q0-Q7,第1-7引脚,第15引脚,8位并行数据输出
GND,第8引脚,引脚接地
Q7’,第5引脚,串行数据输出位(也可叫做级联输出端,接下一个的DS端)
/MR,第10引脚,主复位引脚、而且在低电平时有效
SH_CP,第11引脚,数据输入的时钟脉冲
ST_CP,第12引脚,输出存储器锁存时钟脉冲
/OE,第13引脚,输出有效位、且低电平有效
DS,第14引脚,串行数据输入位
VCC,第16引脚,接电源
3.3按键电路设计
图3.5按键电路
本设计因为要实现设置阈值的功能,所以在设计的时候加入了三个按键进行控制。按键一共有三个,分别对应三个不同的功能。第一个为设置按键,第二个为增加按键,第三个为减少案件。按一下设置按键显示光标会在高阈值处开始闪烁,这时我们可以通过增加按键以及减少案件对高阈值进行增加或者减少操作;按第二下设置按键,显示光标会在低阈值出进行闪烁,此时我们通过增加按键以及减少按键就可以对低阈值进行增加或者减少操作;第三次按下设置按键,显示光标会消失表示已经确定设置,此时就已经完成了高低阈值的设置。按键电路如图3.5所示。
3.4报警电路设计
报警电路设计时选择的是一个蜂鸣器,蜂鸣器的一侧接地直接置为低电平,蜂鸣器的另一个端口连接的是一个三极管,它的基极连接的是单片机的P2.3端口,中间用一个电阻进行分压,它的集电极连接5V电压。当液位高度值处在高低阈值之间时,单片机的P2.3端口出发出的是高电平蜂鸣器不会导通,但是当当前液位高度值低于低阈值或者高于高阈值时,单片机的P2.3引脚会发出低电图3.6报警电路
平,致使三极管导通,蜂鸣器得到供电开始发生报警。如图3.6所示为报警电路。
3.5检测电路设计
本文的检测电路主要用于检测液位高度值,我们设计的思路是将液位的高度转化为电容的电容大小,因为电容的大小不能直接测量所以我们选择利用电容两端的电压来对应的表示液位的高度值。那么我们要测量得到液位的高度值,就只需要得到电容两端的电压大小。在仿真的过程中,发现软件中无法实现这样的设想,我们利用滑动变阻器来近似模拟电容的大小变化,然后利用电压表测量滑动变阻器两端的电压值就可以近似的得到当前的液位值。如图3.7所示为检测电路。
该电路一共分为两部分,上一部分为检测电路的主题检测部分,一个滑动变阻器与电压表并联接地,这样就可以得到滑动变阻器两侧的电压;下面的部分为一个差分放大器,这个放大器的功能是将电压值放大到单片机可以识别的电压值,便于设计的正确稳定运行。
图3.6检测电路
4、软件设计
4.1软件介绍
4.1.1keil介绍
单片机相关的设计开发语言使用的是C语言进行开发,它是年研发出来的一种编程语言,在B语言的基础上进而发展形成出来的。C语言现在在软件开发领域是通用的,而且它是面向运行过程中的编程语言,能够跨平台进行使用,所以在当下软件开发领域它是编程的主流语言。该语言的编写不依赖于硬件系统的样式,它的普适性很强,既兼顾了汇编语言等语言的有点又可以跨平台地进行编译,程序的本身没有输入与输出语句,主要的输入输出都要依赖于C语言库函数来实现,这样很大程度上地提高了编程的效率。
Keil作为一款C51程序编译器,允许设计者在编译器内部使用C语言进行编写的程序,并且程序在编写的过程中还会具有使用汇编语言的过程的效率和速度、而且因为这个软件的延展性在使用的过程中可以完全访问所有的库文件资源、
该软件将使用C语言编写的源文件转化为可移动的对象模块,该模块能够提供完整的符号信息,该软件输出的文件可以应用到调试器中或者放着电路中进行仿真调试、从而达到软件开发的目的、
Keil在使用的过程中会有一下特点:
芯片的中断功能可以使用C语言进行编写
具有完整的符合和字符类型信息,可用于源代码的调试
充分利用的库文件
在编写的过程中使用的是AJMP以及ACALL命令
它在使用的过程中的数据对象是位地址
作为世界上广受欢迎的编译器,KeilC51是现在市面上能找到的C编译器具有功能最多的,我们可以在使用中央的L51文件进行创建我们自己的库文件,也可以利用特L51文件的特殊文件链接到库文件从而来创建特定的想要创建的目标文件,文件类型是(.ob)。编写中的抽象文件是从O-51转化为多普勒51或者更早的解码文件,并且该仿真器可以直接解码目标文件的面板或者直接写入应用程序的内存(例如EPROM等)。
4.1.2proteus介绍
Proteus作为一款仿真设计平台,Proteus在同类的仿真软件中算是效果最完整的一款软件。它的设计与兴起源于英国,它能够与很多平台进行交互编译合作完成编译工作。Proteus自带的元件库内容相当的丰富,大概有几十个元件库,而且每一个元件库中都有数以万计的元器件。不光有元器件还有许多交互式的外围设备,有的在外界价格非常昂贵的器件例如:示波器、信号发生器等常用仪器在这里都可以找到他们的对应虚拟仪器,而且功能一致,在日常使用和仿真过程中可以很大程度上地节约教学成本以及设计成本。因为它自身元件库丰富的优势,它可以为电路设计增加更多的可能性,在设计方面也能够更加的灵活产生的成果也会更加的丰富,而且也为设计使用者提供了一个非常适合自己的研究平台。本设计是根据单片机进行的设计,所以在设计时只需要将设计中想要使用的元件从元件库中调出来,通过恰当的符合实际的连线将对应的引脚连接起来,并且将通过编译器编写的编译好的程序导入到单片机芯片中,即可运行仿真。
Proteus本身的功能非常的强大,它除了能将许多市面上能见到的模拟信号和数字信号都作为测试信号应用到仿真的测试电路上之外,还能通过利用线上的图形编号对线路上信号发生的变化进行显示,这种实时显示能够将仿真测试的功能实现的过程通过这种方式将它的过程形象化地呈现在了设计者地眼前。该软件在设计的过程中支持多重的输入输出格式[4]。它在使用的时候可以帮助设计者很好地原理图布局,还可以对电路继续宁仿真分析。很大程度上利用它可以很好地提高设计者地使用效率。
Proteus具有以下几个特点:
元件库丰富,可以支持很多主流的单片机进行选型例如:51系列、AVR系列等
软件在使用的过程中可以帮助代码编译以及调试的功能。它不仅自身配备了汇编编译器[7],而且它支持第三方编译软件进行合作开发
可以绘制印制电路板、原理图、PCB设计等
完善的电路仿真系统、可以与单片机进行协同仿真。拥有庞大的虚拟仪器库和虚拟元件库。
4.2主程序设计
主程序是整个系统的核心,它能将系统的各个部分进行合理的调配与运行从而达到设计者想要达到的功能效果。本设计的主程序是调控LCD显示器与报警器之间协同工作的程序。
首先系统运行需要将显示器进行初始化操作,以免造成我们在使用的过程中出现显示错误的情况。然后程序就要进到不断检测不断显示的过程,为了实现这种效果,在主程序中加入了一个while循环,达到不断检测的效果。在这个循环程序中需要加入显示程序以及控制蜂鸣器报警的程序还有实现按键功能的程序,以上程序和谐调配才能完成本设计的功能。
Object:word/embeddings/Microsoft_Visio_Drawing2.vsdx首先在循环中不断检测按键是否有动作,其次加入一个if条件语句,语句中询问当前显示值是否正常,如果正常则只显示,否则进行报警。
图4.1系统主程序框图
如图4.1所示是本设计的主程序的设计框图。
4.3显示程序设计
显示程序一共分为两部分:一个是显示器的初始化,另一个是显示器显示的程序。针对于显示器的初始化设计时需要将LCD内部的端口进行初始化以及LCD内的数据进行初始化。首先需要将写入数据的端口进行初始化。再次需要将特定位置写上特定的字符,在高阈值的位置写入‘YH=’,在低阈值的位置写入‘YL=’写入时需要分别调用写入程序进行写入。
显示器显示的程序编写的过程首先调用AD转换程序将传输过来的数值进行数模转换,转换成为可以被单片机识别的数字信号,利用数据写入程序将当前液位高度值数据写入当前液位值的位置,并且在当前液位值的位置还要利用写入程序在第一行写入‘YW=’。
4.4按键程序设
按键程序的设计是针对三个按键对应需要实现的功能来设置。
第一个按键设置为设置按键,按下按键时系统会有1秒的延时,进入判断阶段。判断阶段是为了判断刚才的按键是否为误触,如果是误触就会退出并重新检测,如果判断不是误触,计数位加1(计数位初始值为0),之后进入条件语句部分。当计数位等于1时,表明按键按下一次,显示器显示光标在液晶第二行第4个位置闪烁,这个位置就是高阈值的设置位置。当计数位等于2时,表明按键按下两次,显示器显示光标在第二行第12个位置闪烁,这个位置是低阈值的设置位置。当计数位等于3时,表明按键按下三次,此时表示确定键,系统回位,计数位归零,光标也不闪烁。
第二个按键是增加键,检测到按键被按下后有1秒的延时,进入判断阶段,判断阶段是为了判断该按键是否为误触被按下,如果是误触就会退出并重新检测,如果不是误触,检测当前计数位的数值,也就是检测光标闪烁的位置是在高阈值还是低阈值的地方,无论在哪个位置,那个位置的数值随即加一,按下一次加一一次。
第二个按键是减少键,检测到按键被按下后有1秒的延时,进入判断阶段,判断阶段是为了判断该按键是否为误触被按下,如果是误触就会退出并重新检测,如果不是误触,检测当前计数位的数值,也就是检测光标闪烁的位置是在高阈值还是低阈值的地方,无论在哪个位置,那个位置的数值随即减一,按下一次减一一次。
4.5报警程序设计
报警程序也分为两部分:一部分是系统是否正常运行;另一部分是关于阈值的报警。
对于第一部分的程序在主程序中进行编写,系统程序运行后进入条件语句,该语句进行判断系统是否正常运行,如果系统正常运行,则显示器正常显示且报警器不会报警,如果当系统不正常运行时,显示器不显示,而且报警器进行报警。
第二部分的程序是当前液位高度值与设置的高阈值与低阈值之间做比较从而使报警器进行报警。这部分的程序在显示程序中编写,在程序中需要将检测到的数值与设置的高阈值与低阈值进行比较。比较准则分为三部分:第一部分,当前液位高度值低于低阈值时,报警器报警;第二部分,当前液位高度值大于低阈值小于高阈值时,报警器不报警;第三部分,当前液位高度值大于高阈值时,报警器报警。
5、仿真调试与实验结果
5.1系统仿真调试
图5.1系统仿真接线图
在Proteus中将系统所需的元件从元件库中选出后,进行合理的连线,将事先应用Keil编写的系统程序文件导入Proteus内后进行仿真调试。如图5.1所示是系统仿真接线图。
图5.2系统仿真开始图
如图5.2所示是系统仿真开始图。
图5.3设置按键第一次按下效果图
图5.3所示为设置按键第一次按下的效果图。显示光标闪烁在高阈值设置位。并可以在这个位置进行增加或减少设置。
图5.4设置按键第二次按下效果图
图5.4所示为设置按键第二次按下的效果图。显示光标闪烁在高阈值设置位。并可以在这个位置进行增加或减少设置。
图5.5所示为增加键按下的效果图。在光标闪烁的位置对阈值进行增减操图5.6减少键按下效果图
图5.5增加键按下效果图
作,设置我们想要的阈值大小。
图5.6所示为减少键按下效果图。在光标闪烁的位置对阈值进行增减操作,设置我们想要的阈值大小。
在仿真的过程中遇到了以下的问题:
LCD显示器不亮,
液位值达到报警的条件,但是蜂鸣器不响不报警。
经过查阅资料最终解决了以上的问题:
1、显示器不亮可能是显示程序设计好以及仿真时接线接错或接反,经过反复检查程序与仿真图最后发现设计仿真图的时候显示器的引脚接错从而导致显示器不亮。
2、蜂鸣器不响可能是设计的程序逻辑关系设计的不清晰从而导致蜂鸣器得不到响应。经过审查程序发现在比较阈值的环节出错,从而导致了蜂鸣器不响,将程序修改之后蜂鸣器就可以重新发出声音。
5.2实验结果
系统开机,仿真开始。我们滑动滑动变阻器改变滑动变阻器的电阻大小从而改变滑动变阻器两端的电压。显示器第一行显示的时当前滑动变阻器两端的电压,这个电压模拟的就是系统检测到的液位高度值,显示器第二行显示的是高阈值与低阈值。当第一行的数据小于低阈值,蜂鸣器开始报警;第一行的数据大于第二行的高阈值,蜂鸣器开始报警。当第一行的数据处于高阈值低阈值之间蜂鸣器无变化。成功实现想要实现的功能。
致谢
时间过得真快,转眼间已经来到了大四的最后一个学期,回想整个大学生涯所到之处都是满满的回忆。操场旁的打闹声,教室里的嬉笑声,都仿佛是在昨天响起。
感谢这四年时光中认识的同学们和老师们,因为有了他们的帮助。我的大学时光才能顺利地度过。每当我遇到困难与挫折地时候我身边地同学总能及时的伸出他们的小手帮助我渡过难关。
这里要着重感谢我的毕业导师XXX导师,因为有了他的帮助我的毕业设计才能顺利完成,因为我的设计思路不明确,XXX老师就悉心地为我解答设设计上的疑问。不论多晚,我的