毕业设计论文-油水界面报警检测系统设计_第1页
毕业设计论文-油水界面报警检测系统设计_第2页
毕业设计论文-油水界面报警检测系统设计_第3页
毕业设计论文-油水界面报警检测系统设计_第4页
毕业设计论文-油水界面报警检测系统设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

安徽建筑工业学院毕业设计(论文)PAGE1PAGE1

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

课题名称:油水界面报警检测系统设计专业: 。。 班级: 。。。。。。。 学生姓名: 。。。。。 学号: 。。。。。指导教师: 。。。。。。。。 。。。。年0。。月。。7日摘要水分对柴油机供油系统危害极大,该系统利用油和水阻值不同及水的导电性,专门用于检测油水分离器中油水的液位情况,可以通过输出的不同信号,驱动相应的报警方式,提示是否要把水排除,从而保证燃油系统的正常供油,保护发动机及喷油系统。本设计可以实现对油水分离器油水界面的检测,能及时准确地判断水界面所在的位置,并给出报警信号提示进行放水,从而对保证燃油系统的正常供油,保护发电机及喷油系统,都有十分重要的作用。首先,该设计包括三个部分:(1)上电自检功能电路的设计;(2)遇水延时报警电路的设计;(3)报警信号后续处理电路的设计。其次,设计工程中主要从以下几点考虑:(1)电源部分;(2)积水信号检测部分;(3)信号处理部分;(4)输出部分。最后,本文的特色在于采用了介质变化型电容传感器和简单实用的电容检测电路,引入了单片机实现了对其界面的模拟显示和界面液位的上下限报警功能,并可以根据设定的上下限参数进行对收油器的液压系统各个阀体进行开关控制,实现了无需人工参与的智能油水界面检测控制系统。为油水界面检测技术和新型收油器的控制难题提出了一种解决方案。关键字:传感器报警电路处理电路ABSTRACTSWatersupplysystemfordieselenginegreatharm,thesystemusingoilandwaterresistanceandwaterconductivity,differentspeciallyforthedetectionoftheoilandwaterseparator,liquidlevelbythedifferentsignaloutput,drivethecorrespondingalarmway,whethertoputthewaterouttips,soastoensurethenormalfuelsystem,engineprotectionandfuelinjectionsystem.Thisdesigncanrealizetotheoil-waterseparatorwater-oilinterfacialdetection,itcanpromptlyaccuratelywaterinterfacelocation,andalarmsignalhint,soastoensurethewateronthefuelsystemofnormaloilsupply,protectgeneratorandtheinjectionsystem,allhaveveryimportantrole.First,thedesignincludesthreeparts:(1)toelectricityself-checkfunctioncircuitdesign;(2)inwaterisdelaythealarmingcircuitdesign;(3)alarmsignalprocessingcircuitdesignfollow-up.Second,thedesignoftheprojectmainlyfromthefollowing:(1)thepowertoconsiderpart;(2)watersignaldetectionpart;(3)signalprocessingparts;(4)outputpart.Finally,thisarticlefeaturesusedthemediatypecapacitancesensorandchangesimpleandpracticalcapacitancedetectioncircuit,theintroductionofthesinglechipmicrocomputertotheinterfaceofthesimulationsshowthattheupperlevelandinterfacealarmfunction,andcanbesetaccordingtotheupperparametersofhydraulicsystemistoShouYoueachbodytoswitchcontrolandrealizedwithouttheartificialintelligentdetectionintheboundaryofthecontrolsystem.FortheboundarydetectiontechnologyandnewShouYoudevicecontrolproblemputsforwardakindofsolution.Keyword:sensoralarmcircuitprocessingcircuitPAGE2PAGE1目录摘要1英文摘要21绪论11.1引言1

1.2油水分离在国内外的研究情况以及发展趋势12系统的总体设计22.1系统总体结构设计22.2系统采用的关键技术23矩阵键盘、显示及报警电路设计33.1矩阵键盘电路33.1.1矩阵键盘简介33.1.2矩阵键盘的工作原理33.2显示电路43.3报警电路54传感器及调理电路64.1电容传感器64.1.1传感器的工作原理64.1.2介质变化型传感器原理图64.1.3介质变化型电容传感器的优点64.2部分电路的设计74.2.1电源部分74.2.2限幅电路74.2.3滤波、放大电路85数据采集及处理系统105.1AD转换电路105.2智能数据处理电路105.2.1智能数据处理电路结构图105.2.2AT89C51单片机简介115.2.3时钟电路155.3系统数据传输和上位机数据处理16

6软件设计176.1延时子程序176.2AD转换子程序176.3液晶驱动子程序186.4矩阵键盘子程序206.5蜂鸣器报警子程序246.6LCD显示子程序276.7主程序297结论33参考文献34附一:系统电路原理图35致谢36PAGE36油水界面检测报警系统设计总体方案设计电子信息工程学院电子信息工程专业07城建电子(3)班杜锌镭指导老师:王坤侠1绪论1.1引言由于发动机是长期作业,环境变化非常快,在发动机工作过程中,油中的水分沉降在容器的底部,占据大量的容积,影响发动机的工作效率以及寿命,故要及时将水排出,才能充分利用容器的容量,提高燃烧效率。应用领域:船厂废柴油过滤、破乳、油水分离;变压器油过滤;发电厂透平油过滤、油水分离、脱色、精滤;海上原油泄漏事故处理,收集、过滤、油水分离;油田落地油过滤、清洗、油水分离;海上钻井平台浮油收集、油水分离、加温分离;1.2油水分离在国内外的研究情况以及发展趋势研究情况:油水分离的方法主要有重力式分离,离心式分离,电分离,吸附分离,气浮分离。油水分离仪器:LYS陆用油水分离器,聚集油水分离器,M170428HB-WYF-20油水分离器,ZYFM系列舱底水分离器等等。发展趋势:2011-2015年油水界面的调研及未来的发展前景,发展策略,价格趋势等等预测,油水分离的产业发展在国民经济中的地位的前景研究。等等的研究充分说明:燃油系统的市场是很大的,汽车行业的发展和资源短缺也是这个课题的一个外动力,技术的革新必然是慢慢前进的。对发动机的保护同样有很重要的地位和研究意义。2系统的总体设计。2.1系统总体结构设计图2—2:系统结构示意图该油水界面检测及报警系统用电容传感器把油水界面的变化转换为电信号的变化,测量电路把被测对象电容转换成为电信号的电路,为了方便检测,利用信号调理电路把电容的变化转换为电信号的变化,处理电路模块包括限幅电路、放大电路、滤波电路、A/D转换电路、显示模块、外设控制模块、报警模块。处理系统采用功能强、价格低的AT89C51单片机。2.2系统采用的关键技术单片机控制技术,智能数据处理技术,信号处理及调理技术,信号放大、滤波技术,A/D转换技术,串口通讯技术,计算机控制技术,无线传输技术,数据显示技术等等3矩阵键盘、显示及报警电路设计3.1矩阵键盘图5—1:矩阵键盘电路图3.1.1矩阵键盘简介

矩阵键盘又称行列键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4*4个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。3.1.2矩阵键盘的工作原理

最常见的键盘布局一般由16个按键组成,在单片机中正好可以用一个P口实现16个按键功能,这也是在单片机系统中最常用的形式,4*4矩阵键盘的内部电路如图所示。图5—2:矩阵键盘内部电路图

当无按键闭合时,P10~P13与P14~P17之间开路。当有键闭合时,与闭合键相连的两条I/O口线之间短路。判断有无按键按下的方法是:第一步,置列线P14~P17为输入状态,从行线P10~P13输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线P14~P17读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。3.2显示电路图5—3:LCD显示电路图工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)注:为了表示的方便,后文皆以1表示高电平,0表示低电平。管脚功能:1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VDD接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平(1)时选择数据寄存器、低电平(0)时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。以下是1602的16进制ASCII码表地址:读的时候,先读左边那列,再读上面那行,如:感叹号!的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。[编辑本段]指令集1602通过D0~D7的8位数据端传输数据和指令。显示模式设置:(初始化)00110000[0x38]设置16×2显示,5×7点阵,8位数据接口;显示开关及光标设置:(初始化)00001DCBD显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)000001NSN=1(读或写一个字符后地址指针加1&光标加1),N=0(读或写一个字符后地址指针减1&光标减1),S=1且N=1(当写一个字符后,整屏显示左移)s=0当写一个字符后,整屏显示不移动数据指针设置:数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。3.3报警电路图5—4:蜂鸣器报警电路图用一个三极管,平时导通,短接基极和发射极该管截止蜂鸣器不响,一旦断开,三极管导通蜂鸣器鸣响。该报警电路简单方便,且成本很低,与其他报警电路相比较而言,这些优点更是突出。4传感器及调理电路4.1电容传感器4.1.1传感器的工作原理本设计的油水界面探测器采用介质变化型电容传感器。假设电容器为两平极结构,作绝缘处理后的电容器两极间浸入不同的界质中,由于电容器中的介质相对介电系数不同,电容量是不同的;而当电容器两极处在两不同介质的界面处,当液体介质的液面发生变化,也将导致电容器的电容C也发生变化。作为界面探测系统其重点是后者,即检测电容传感器在油水界面位置变化导致电容器的电容C变化情况。电容传感器处在大气中、浸入不同液体或浸入不同液体深度不同,其电容量的变化,采用专用的信号调理电路把电容量转换比例电压输出。在大气中相对介电常数为1,电容传感器的电容量为C0,经调理转换后输出电压为V0,在油品中相对介电常数变大,在水中相对介电常数更大,电容传感器的电容量将随着浸入不同液体深度加大而变大,经调理转换后输出电压也将随之变大。这电压信号再经放大器放大和A/D转换,得到不同的A/D值。A/D值的大小表明传感电容器所处的介质或淹没入油、水介质的深度。4.1.2介质变化型传感器原理图图3—1:介质变化型传感器原理图4.1.3介质变化型电容传感器的优点采用高性能的电容量测量及调理集成电路,提高测量精度,而且不受周围环境的影响。用部分电路组成测试系统,以数字形式进行传输,提高仪表的可靠性。传感器配备单片机对信号进行预处理后,以数字形式进行传输。单片机接收到数字信号,进行后处理后再显示和报警。在传感器中只需增加极少的硬件开支,便可附加其他传感器,如温度传感器测量温度,压力式液位传感器测量液体深度,以实现多参数的同时测量。4.2部分电路的设计4.2.1电源部分图3—2:电源部分原理图其作用是为整个系统提供稳定的5V电压,保证系统的正常运行。4.2.2限幅电路限幅电路的作用是把输出信号幅度限定在一定的范围内,亦即当输入电压超过或低于某一参考值后,输出电压将被限制在某一电平(称作限幅电平),且再不随输入电压变化。图3—3:限幅电路时,

A点电压低于二极管的导通电压为:UA<(UR+UD),二极管截止,输出电压为:

当输入电压等于或大于门限电压时,二极管导通,A点电压被箝制在电平上,输出电压不再随输入电压变化而变化,成为一个固定电平:

4.2.3滤波、放大电路图3—5:放大电路图电路由滤波和放大两部分组成。其中MAX267是MAXIM公司出产的一个集成滤波器,可以构成低通、带通、高通、等多种方式,使用灵活,性能远远优于采用集成运放组成的滤波电路。根据驱动信号的频率,运用锁相倍频原理为MAX267提供时钟信号,使其带通滤波中心频率将跟随特征信号频率变化,克服了传统滤波器带通中心频率不易改变的缺点,解决了大功率超声应用中基波信息的提取问题,为频率跟踪和功率控制提供了可靠的信息.该滤波器较好地实现了自适应带通滤波的功能.MAX4471是MAXIM公司的一款低功耗的放大器。MAX4471系列微功耗运算放大器工作电压范围为+1.8V至+5.5V,仅吸取750nA的电源电流。MAX4471放大器在100kΩ负载时,能够驱动输出电压至电源摆幅的4mV以内,+5V供电时吸入或灌出电流11mA,提供同相或反相放大,双路MAX4471单位增益稳定。\o"MAX9028"MAX9028是MAXIM公司的一个低功耗的比较器。滤波电路采用\o"MAX267"MAX267构成带通滤波器(允许0.8~38Hz的信号通过),滤掉信号中的直流成分和电源以及皮肤与袖带摩擦的高频噪声和工频干扰,然后经过\o"MAX4471"MAX4471进行进一步放大,得到单片机匹配的电压信号,进入ADC2,监视血压的交流分量。同时该信号通过低功耗比较器\o"MAX9028"MAX9028转换成脉冲信号,触发ADC1工作。5数据采集及处理系统5.1AD转换电路图4—1:AD转换电路数据采集部分的功能是对介质变化型电容传感器对应的不同界面的电容进行检测,转换成数字量采集到单片机进行处理运算,再由串口通讯接口输出油水界面的数字信息供单片机进行分析处理。整个单片机系统由A/D转换、单片机、矩阵键盘、RS232串口通讯等几部分构成。单机工作时,电容检测电路待测的传感器的电容量转化为直流电压信号,经过调理放大,再经过A/D转换部分转化为数字信号输入单片机,经过单片机进行一系列的运算处理后,将处理结果通过LCD显示及报警,并控制排水阀排出发动机箱内的最下层的水。5.2智能数据处理电路5.2.1智能数据处理电路概述

为了使电容传感器能更加精确的检测油水界面的变化细节,系统需要检测许多模拟信号,对单片机有更高的要求,由于单片机I/O引脚要与触点的开关电路相连接,考虑到AT89C51单片机的I/O引脚数有限和电路结构复杂性因素,外加了连接触点的插槽,方便了单片机的性能扩充。

系统中其它主要芯片还包括时钟芯片DS1302、AD转换芯片(ADC0804),这两种芯片和单片机之间的数据传输采用I2C总线形式,节省了单片机的I/O引脚。其中时钟芯片DS1302内部有32K的非易失性E2PROM,可用来存储测量数据。为了便于管理人员能够分析大量的测量数据,仪器内还加入了DS卡座,使用1GB的DS卡可以保存一年以上的测量数据。图4—2:智能数据处理电路结构示意图5.2.2AT89C51单片机简介(1)AT89C51单片机最小系统图4—3:单片机最小系统图AT89C51是一种带4K字节闪烁可编程可擦除只读存贮器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。(2)主要特性·与MCS-51兼容·4K字节可编程闪烁存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24MHz·三级程序存储器锁定·128×8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路(3)管脚说明

VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8个TTL门电流。当P1口的管脚第一次写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。P1口管脚写入“1”后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下所示:

口管脚备选功能

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)

P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)

P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。(4)振荡器特性XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。(5)芯片擦除

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。(6)串口通讯单片机的结构和特殊寄存器,这是编写软件的关键。至于串口通信需要用到那些特殊功能寄存器呢,它们是SCON,TCON,TMOD,SCON等,各代表什么含义呢?SCON串行口控制寄存器通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制寄存器。SCON就是51芯片的串行口控制寄存器。它的寻址地址是98H,是一个可以位寻址的寄存器,作用就是监视和控制51芯片串行口的工作状态。51芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON寄存器。REM为允许接收位,REM置1时串口允许接收,置0时禁止接收。REM是由软件置位或清零。如果在一个电路中接收和发送引脚P3.0,P3.1都和上位机相连,在软件上有串口中断处理程序,当要求在处理某个子程序时不允许串口被上位机来的控制字符产生中断,那么可以在这个子程序的开始处加入REM=0来禁止接收,在子程序结束处加入REM=1再次打开串口接收。大家也可以用上面的实际源码加入REM=0来进行实验。TB8发送数据位8,在模式2和3是要发送的第9位。该位可以用软件根据需要置位或清除,通常这位在通信协议中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是数据帧。RB8接收数据位8,在模式2和3是已接收数据的第9位。该位可能是奇偶位,地址/数据标识位。在模式0中,RB8为保留位没有被使用。在模式1中,当SM2=0,RB8是已接收数据的停止位。TI发送中断标识位。在模式0,发送完第8位数据时,由硬件置位。其它模式中则是在发送停止位之初,由硬件置位。TI置位后,申请中断,CPU响应中断后,发送下一帧数据。在任何模式下,TI都必须由软件来清除,也就是说在数据写入到SBUF后,硬件发送数据,中断响应(如中断打开),这时TI=1,表明发送已完成,TI不会由硬件清除,所以这时必须用软件对其清零。RI接收中断标识位。在模式0,接收第8位结束时,由硬件置位。其它模式中则是在接收停止位的半中间,由硬件置位。RI=1,申请中断,要求CPU取走数据。但在模式1中,SM2=1时,当未收到有效的停止位,则不会对RI置位。同样RI也必须要靠软件清除。常用的串口模式1是传输10个位的,1位起始位为0,8位数据位,低位在先,1位停止位为1。它的波特率是可变的,其速率是取决于定时器1或定时器2的定时值(溢出速率)。5.2.3时钟电路DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配及内部结构,DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。图4—4:DS1302的内部结构5.3系统数据传输和上位机数据处理

由于拥有轿车的车主通常是很繁忙的人士,他们不仅需要在驾驶车时能知道发动机内燃油的情况,也想在其他地方很方便的知晓其变化,利用公共GSM或GPRS网络进行采集现场和计算机或手机之间的数据通信是一种有效的办法。这种通信方式不受空间,地域的限制,随时随地获取所需的界面变化信息。本系统采用GSM或GPRS方式来实现现场数据的远程实时传送。

GSM传输方式和GPRS传输方式有各自的特点。当选用GSM方式时,发送的数据需要按照一定的帧格式处理后发送才能被手机识别。由于受到手机短信格式和容量的限制每一次只能发送140bt(70个汉字),所以适宜于小批量数据信息的远程传输。但GSM传输方式的可靠性好,当一条数据信息此刻没有发送成功时,会自动继续发送直到发送成功,保证了数据信息的连贯性。GPRS是在GSM网络上发展出来的新的承载业务,采用分组的方式进行数据交换,支持互联网协议,能为用户提供更高的数据传输速率,同时又允许多个用户的数据在同一个信道上进行传送,提高资源的利用率,适宜于大批量数据信息的远程传输,可以实现“永远在线”。GPRS方式是透明传输,数据无需处理传送到GPRS调制解调器,由GPRS调制解调器完成数据的IP打包后上传到GPRS网络实现与Internet网络的连接。但GPRS方式有时会出现丢失数据包的现象。如果某一时刻网络出现中断,此时刻传送的数据就会丢失,影响数据信息的连贯性。在实际应用时,可根据具体要求选择GSM方式或GPRS方式,达到使用要求。

上位机按GSM或GPRS方式进行数据的接收。选用GSM方式时,上位机需要和另一个GSM调制解调器通过RS232串口连接。而采用GPRS方式时,只需上位机通过网线和Internet网络连接,但上位机必须有固定的IP地址或域名或建立虚拟专网。对比两种方式,GPRS方式前期投资成本较高。6软件设计6.1延时子程序#ifndef__DELAY_H__#define__DELAY_H__/*宏定义用uchar代替unsignedchar用uint代替unsignedint*/#defineucharunsignedchar#defineuintunsignedint/*延时函数*/voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}#endif6.2AD转换子程序#ifndef__ADC0804_H__#define __ADC0804_H__/*宏定义用uchar代替unsignedchar用uint代替unsignedint*/#defineucharunsignedchar#defineuintunsignedint/*定义ADC0804的控制引脚*/sbitwr=P1^7;sbitrd=P1^6;sbitad_cs=P1^5;/*定义几个全局变量*/ucharad_value=0;uintad_result=0;/*ADC0804的初始化函数*/voidad_init(){ ad_cs=0;}/*ADC0804的启动转换函数*/voidad_start(){ wr=1; wr=0; wr=1; }/*读取ADC0804转换后的值*/uintread_ad_value(){ ad_init(); ad_start(); delay(20); rd=0; delay(10); ad_value=P2; rd=1; delay(10); ad_result=ad_value*1.0/255*500; returnad_result; //returnad_value;}#endif6.3液晶驱动子程序/*宏定义用uchar代替unsignedchar用uint代替unsignedint*/#defineucharunsignedchar#defineuintunsignedint/*定义液晶的三个控制引脚*/sbitlcden=P1^4;sbitlcdrs=P1^2;sbitlcdwr=P1^3;/*写指令函数函数*/voidwrite_com(ucharcom){ lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;}/*写数据函数*/voidwrite_data(uchardate){ lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0;}/*液晶初始化函数*/voidlcd1602_init(){ lcden=0; lcdwr=0; write_com(0x38); write_com(0x0c); //write_com(0x0f); write_com(0x06); //write_com(0x80+0x40);}#endif6.4矩阵键盘子程序

#ifndef__KEYBOARD_H__#define__KEYBOARD_H__/*两个宏定义,用uchar代替unsignedchar,用uint代替unsignedint*/#defineucharunsignedchar#defineuintunsignedint/*定义全局变量*/ucharnum=0;uchartemp;ucharkey_flag=0;/**************************************************************函数功能:按键扫描扫数,采用逐行扫描的方法形参:无返回值:无**************************************************************/voidkey_scan(){ /*扫描第一行按键*/ P3=0xfe; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xee:num=1; break; case0xde:num=2; break; case0xbe:num=3; break; case0x7e:num=4; break; } /*按键松手检测*/ while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } //display(num); } } /*扫描第二行按键*/ P3=0xfd; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xed:num=5; break; case0xdd:num=6; break; case0xbd:num=7; break; case0x7d:num=8; break; } /*按键松手检测*/ while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } //display(num); } } /*扫描第三行按键*/ P3=0xfb; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xeb:num=9; break; case0xdb:num=10; break; case0xbb:num=11; break; case0x7b:num=12; break; } /*按键松手检测*/ while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } //display(num); } } /*扫描第四行按键*/ P3=0xf7; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xe7:num=13; break; case0xd7:num=14; break; case0xb7:num=15; break; case0x77:num=16; break; } /*按键松手检测*/ while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } //display(num); } } /*当有键按下的时候,将按键标志位设置为1*/ if((num>=1)&&(num<=16)) { key_flag=1; } /*当没有键按下的时候,将按键标志位设置为0*/ else { key_flag=0; }}#endif6.5蜂鸣器报警子程序#include<reg51.h> //包含51单片机寄存器的标准头文件#include<intrins.h>//包含_nop_()函数定义的头文件/*以下分别包含各个自定义的头文件*/#include"delay.h"#include"1602.h"#include"adc0804.h"#include"keyboard.h"#include"keyjudge.h"/*宏定义用uchar代替unsignedchar用uint代替unsignedint*/#defineucharunsignedchar#defineuintunsignedint/*定义程序中用到的一些变量*/uintad_temp=0;ucharbai=0;ucharshi=0;ucharge=0;/*定义控制蜂鸣器的引脚是P1^2*/sbitbeep=P1^1;sbitled=P1^0;voidmain(){ /*初始化控制蜂鸣器的引脚P1^1为高电平*/ beep=1; led=1; /*调用LCD1602液晶的初始化函数对液晶进行初始化*/ lcd1602_init(); /*调用DS1302时钟芯片的初始化函数对时钟芯片进行初始化*/ ad_init(); while(1) { ad_temp=read_ad_value(); ge=ad_temp%10; shi=(ad_temp/10)%10; bai=(ad_temp/100)%10; write_com(0x80); write_data(number[bai]); write_com(0x80+1); write_data('.'); write_com(0x80+2); write_data(number[shi]); write_com(0x80+3); write_data(number[ge]); if(flag==0) { if(ad_temp>=140) { beep=0; led=0; } /*否则不报警*/ else { beep=1; led=1; } } elseif(flag==1) { if(ad_temp>=set_value) { beep=0; led=0; } /*否则不报警*/ else { beep=1; led=1; } } key_scan(); key_judge(); }}6.6LCD显示子程序#ifndef__KEYJUDGE_H__#define__KEYJUDGE_H__bitset_flag=0;bitflag=0;bitfirst=0;bitsecond=0;bitthird=0;ucharcodeset[]="setto:";ucharnumber[]="0123456789";ucharkey_count=0;ucharkey_num=0;uintset_value=0;voiddisplay_set(){ uchari; write_com(0x01);//clearscreen write_com(0x80); for(i=0;i<7;i++) { write_data(set[i]); } write_com(0x80+8); write_data('.');}voidkey_judge(){ if(num==16) { num=0; flag=1; set_flag=1; display_set(); set_value=0; } while(set_flag) { key_scan(); if(key_flag==1) { key_flag=0; key_num=num; num=0; key_count++; if(key_count==4) { key_count=1; } switch(key_count) { case1:first=1;break; case2:second=1;break; case3:third=1;break; } } if(first==1) { first=0; write_com(0x80+7); write_data(number[key_num-1]); set_value=set_value+(key_num-1)*100; } if(second==1) { second=0; write_com(0x80+9); write_data(number[key_num-1]); set_value=set_value+(key_num-1)*10; } if(third==1) { third=0; write_com(0x80+10); write_data(number[key_num-1]); set_value=set_value+key_num-1; while(num!=16) { key_scan(); } num=0; set_flag=0; write_com(0x01);//clearscreen } }}#endif6.7主程序C51COMPILERV8.02,COMPILATIONOFMODULEMAINOBJECTMODULEPLACEDINmain.OBJCOMPILERINVOKEDBY:D:\PROTUES\C51\BIN\C51.EXEmain.cBROWSEDEBUGOBJECTEXTENDlinelevelsource1#include<reg52.h>//包含51单片机寄存器的标准头文件2#include<intrins.h>//包含_nop_()函数定义的头文件3/*以下分别包含各个自定义的头文件*/4#include"delay.h"5#include"1602.h"6#include"adc0804.h"7#include"keyboard.h"8#include"keyjudge.h"9/*宏定义用uchar代替unsignedchar用uint代替unsignedint*/10#defineucharunsignedchar11#defineuintunsignedint12/*定义程序中用到的一些变量*/1314uintad_temp=0;15ucharbai=0;16ucharshi=0;17ucharge=0;18/*定义控制蜂鸣器的引脚是P1^2*/19sbitbeep=P1^1;20sbitled=P1^0;2122voidmain()23{241/*初始化控制蜂鸣器的引脚P1^1为高电平*/251beep=1;261led=1;271/*调用LCD1602液晶的初始化函数对液晶进行初始化*/281lcd1602_init();291/*调用DS1302时钟芯片的初始化函数对时钟芯片进行初始化*/301ad_init();311while(1)321{332ad_temp=read_ad_value();342ge=ad_temp%10;352shi=(ad_temp/10)%10;362bai=(ad_temp/100)%10;372382write_com(0x80);392write_data(number[bai]);402write_com(0x80+1);412write_data('.');422write_com(0x80+2);432write_data(number[shi]);442write_com(0x80+3);452write_data(number[ge]);462if(flag==0)472{483if(ad_temp>=140)493503{514beep=0;524led=0;534}543/*否则不报警*/553elseC51COMPILERV8.02MAIN563{574beep=1;584led=1;594}603}612elseif(flag==1)622{633if(ad_temp>=set_value)643653{664beep=0;674led=0;684}693/*否则不报警*/703else71

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论