【《基于单片机的地下停车场火灾自动报警器系统设计》18000字(论文)】_第1页
【《基于单片机的地下停车场火灾自动报警器系统设计》18000字(论文)】_第2页
【《基于单片机的地下停车场火灾自动报警器系统设计》18000字(论文)】_第3页
【《基于单片机的地下停车场火灾自动报警器系统设计》18000字(论文)】_第4页
【《基于单片机的地下停车场火灾自动报警器系统设计》18000字(论文)】_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

页共53页1绪论1.1课题背景随着停车场的广泛使用,其安全隐患也越发突出,特别是火灾隐患,对人们的正常生活的开展造成了很大的威胁。为了预防停车场火灾的发生,防止火灾引起燃烧、爆炸等事故,造成严重的经济损失和保护人身和财产安全,人们必须采取有效措施避免事故发生,确保人们的人身安全和地下停车场生活安全。人们需要针对性的设计火灾报警器来加以检测,从而对事故隐患第一时间加以发现,尽量减少这样的事故。基于此,在火灾报警器方面的研究课题便主要聚焦于火灾的检测方法。本文的主要设计是选择STC89C51单片机、DS-18B20数字温度传感器和MQ-2半导体气体烟雾传感器作为核心组件,再配以其他硬件电路实现声光报警的功能。一旦所测温度或烟雾值超过预设值,系统就会立即自动报警,可以较为准确的探测火灾灾情。根据地下停车场环境需要,可以自行设置报警值,并且可以手动开启报警。本设计的火灾报警器性能优良,结构简单,操作简单,经济实用,对于各类环境中的火灾检测非常有效。1.2设计概述单片机和传感器是火灾自动报警系统的两个核心。我们在理解单片机时,要充分认识到其媒介的具体作用,从而在其助力下,使得传感器和报警电路设备得到了充分的连接。事实上,单片机正是在集成电路技术的助力下,使得多个处理器能够功能电路能够达到集成效果,共同在一个微型计算机系统上得以实现。它的功能齐全,体积小,价格低、可靠性高以及开发应用简单,因此可以成为嵌入式应用系统和小型智能化产品开发的首选。近年来,单片机的应用越来越广泛,像工农业生产、人们生活的各个方面、航天事业和军工方面等。根据社会发展的需要,人们开发了各种类型的单片机,单片机技术已经越来越成熟。火灾报警器需要一种精度高、准确度高传感器来感测火灾息,然后处理信息,将信息传输给中央处理器,中央处理器给报警系统信号,报警系统发出警报,启动消防措施。具体需要基于环境的不同,从而选择综合方面都较为合适的传感器和单片机芯片。从本文的设计来看,主要选择的则是几个主要型号的器件来完成了核心组件的组合。从如今地下停车场的具体情况来看,会有选择性地安装不同功能的火灾报警系统,这一系统是停车场的神经系统,可以对火灾的早期信号加以感应,并且及时基于此发出具体的警报。它发出警报并同时通知用户和周围的居民。它就像一个经常巡逻的士兵,可以发现在地下停车场中不安全的隐患,带给人们极大的安全感。从火灾初期来看,需要在第一时间发现火灾,并且报警处理,从而及时对人们进行疏散,使得人们能够在第一时间离开火灾现场,有效对火灾加以控制,使得火灾的损失能够最大限度地得到控制。1.3火灾报警器的国内外现状欧美等国家在十九世纪八十年代就开始研究和开发火灾报警器,并且发展很快。一方面,社会经济发展太快,人们对环境安全和生活舒适性的要求提高了;另一方面,人口居住密集带来了许多火灾安全隐患。我们从一些发达国家的具体发展实际来看,他们已经创立了相对较为健全的消防系统,国家通过财政支出的方式耗用大量的资金在消防设备的更新上,从而使得广大居民的安全意识得到持续的推广,使得消防设备能够及时得到维护和更新。这些发达国家非常重视消防设备以及传感器的建设上,持续对火灾自动报警设备等加以监控,从而便于在第一时间做出及时地消防应对措施。我国在具体发展的过程中,可以尝试对其成功的经验加以借鉴,从而使得城市火灾自动报警监控系统能够得到切实的建设和应用。他们的监控系统早就已经将自动火灾报警系统接入,并开发和研究多年,从而使得消防指挥中心能够在第一时间得到火灾地点的具体火灾详情,从而基于火灾的具体情况通知消防部队及时赶往现场进行救火,由此可见,自动报警监控系统发挥出了较大的效果,与此同时,国家对这些监控系统的管理是十分重视的,甚至专门成立了相应的火灾监控服务机构,从而对火灾报警数据的实时性加以保障。这一机构具体对数据的使用者负责,第一时间将火灾报警的具体信息告知消防部门。但是这一类型的机构需要进行资质的审查,并且受到消防部门的监管。我们应该要借鉴这种管理运作的方式用于火灾预防。发达国家针对火灾报警系统的研究显然时间更久,我国相对而言起步得要晚的多。到了80年代以后,国内市场才刚刚开始发育,生产厂家大都是仿制外国产品或者是引进国外技术进行生产,没有研制属于自己的核心技术。随着国家实施改革开放,国外大量的企业纷纷入驻中国,并带来了大量先进消防技术和产品。切实使得我国自身的相关企业得到切实的发展,甚至在部分技术方面已经取得了较大的突破,形成了很多综合实力较强的企业。近年来由于和外国企业技术合作,我国的火灾自动报警工程应用技术发展空前迅猛。在实际展开应用时,这一系统的建立显然并不全面,没有切实形成较为密集的网络,而这一系统所传输的火灾情况并不精确,在使用时依然存在着诸多的问题。

(1)适用范围太小。我国火灾自动报警系统是基于相关防火规范的具体要求来予以安装的,在一些中小型企业或者公共场所和社区城镇居民家庭等建筑存在着一些没有规定安装火灾自动报警系统或漏装的现象,安装数量少,安装范围小,防范措施没有到位。

(2)智能化程度低。事实上,我国所研制出来的火灾探测器尚未能够达到真正意义上的智能化的设计,这是由于在探测的参数方面依然有些缺失,并不全面,并且软件功能也是较为单一的,算法相对而言也是较为复杂的,验证起来也较为不容易,尚未建立起相关的火灾现场参数数据库,从而使得火灾自动报警系统所提供的具体指标数据并不能保证精确性,在具体使用的效果上也自然是大打折扣的,存在着较为典型的滞后性表现。

(3)网络化程度低。我国的火灾报警系统往往是区域性的,在进行安装时也是通过集散控制的方式来具体实现的,尚未形成区域一体化的自动报警系统模式。

(4)组件连接方式单一。我国的火灾自动报警系统一般是由多线式组件连接为主,总线式组件连接较少。从组件的具体连接方式来看,主要是通过铜芯绝缘导线来具体实现的,这样一来,综合的耗材便很多,成本耗用较大,而且抗性相对不足。与此同时,铜导线相对而言导热性较强,硬度还低,从而使得系统的安装和维护难度较大,从而不利于这一系统报警的准确性的最大程度地实现。

(5)火灾自动报警系提供的信息不够准确。由于建筑环境复杂,安装的火灾探测器无法准确地探测各种火灾发生现场的需探测物质的浓度,比如可燃气体、温度、颗粒浓度和光波的强度等指标数据。

(6)超早期火灾探测报警技术还不成熟。我国的超早期火灾探测报警技术尚且处于开发阶段,但是国外已超越我国研制出了智能烟火灾探测报警系统,从而通过这些较为智能化的探测手段,达到比普通火灾探测报警系统要好得多的探测效果。通过这些系统的智能化的监控,从而对火灾的发生与否加以判断,系统可以在火灾活动发生之前进行报警,从而使得火灾报警能够真正实现提前实现。但是我国尚未形成这一技术,依然在研发和摸索阶段。1.4火灾报警器的发展趋势面对国内火灾报警器的发展现状以及存在的问题,我们要努力去改变当今的现状,持续加大研制的力度,使得这一技术和功能能够切实实现,切实使得这一系统的数据能够更加准确,并且能够向着智能化的方向而迈进。当然,我们在具体对这一系统技术加以打磨的过程中,主要从以下方面来具体实现的。(1)网络化这一系统的网格化主要强调的是通过网络协议来对系统进行远程数据的实时收集,在需要使用时,能够第一时间加以调用;用网络来监控和管理火灾自动报警系统,将所有系统连接成一个大的网络,这样就可以实现各系统间的数据共享;报警人员能够基于此对火灾的具体信息加以掌握,并且让消防部队能够在第一时间派人前往现场处理这一火灾问题。(2)智能化这一系统的智能化显然正是大势所趋,从而使得系统能够真正达到智能化的效果,能够对数据的模拟量加以自动采集,并且对收集到的各项数据进行综合的分析,从而对现场是否发生火灾进行自动分析,使得探测和报送能够达到高精确度,减少误报的几率。在火灾发生之后,自动报警系统能跟据探测到的各种数据对火灾进行分析,甚至可配合电子地图进行形象提示,然后对消防部队的灭火方案给出合理的建议,持续使得多方面的反应实现联动,从而使得人员和财产的损失能够降到最低,而火灾自动报警系统所获取的信息能够帮助起火原因的排查,从而便于后续对火灾事故责任加以调查。(3)多样化①火灾探探测技术的多样化。从当前的应用情况来看,主要的火灾探测器主要是单一型的或是复合型的。这些落后的火灾探测技术已经跟不上时代的发展,其难以发现和分析早期火灾事故的隐患情况,不能实现其“预警”的功能,它们也只能在一般的建筑环境发挥作用,但对于复杂的环境就完全没用。目前我国消防科研工作者的重点研究方向是多参量火灾探测技术

、智能化火灾探测技术等。②设备连接方式的多样化。随着无线通信技术的不断发展,根据不同的环境和场所来选择经济实用的通信方式和技术,可以用无线技术连接设备,让有线、无线连接互补,同时研究寻找新型通信材料可解决铜线连接存在的缺点。通过这样的方式,切实方便各种探测器能够切实达到数据信息的传输以及共享,从而使得探测器能够达成系统化的运作,使得这一过程中的信息传递工作变得更为便捷而高效。

(4)小型化、在强调火灾自动报警系统的小型化的发展趋势时,主要强调的在体积方面尽量变小,从而使得携带变得方便,综合的使用效果也更为简单。那要怎样实现小型化呢?要想切实达到这样的效果就需要通过网格化来具体实现,从而使得设备越发实现小型的特点,甚至不需要进行独立安装,从而使得火灾自动报警系统的使用能够不受空间的限制,能够快速对其加以携带,进而使其综合的使用变得更为简单易行。(5)社区化从安装的地点来看,我国的火灾自动报警系统主要安装在公共场所,而非应用在家庭之中,那些较为偏远的地带更是如此,无从安装火灾自动报警系统。而在经济持续发展的同时,人们对安全问题的关注程度也越来越高,这一系统逐步在社区地区得到了普及,政府也耗费了较大的力气在推广和应用上,从而使得广大居民的预防火灾的意识得到持续的加强,从而使得广大居民家庭能够很好地对火灾加以预防。1.5设计任务分析本文的火灾自动报警器系统设计任务:(1)系统规划和结构优化。(2)选择适合的单片机作为控制核心;设计和改进硬件电路,让其功能更加完善和强大。系统的硬件电路由数据采集电路、声光报警电路、A/D转换电路、1602液晶显示电路等组成。(3)系统软件开发。根据设计需求,用keil编程软件来编写程序,用Proteus8Professional仿真软件来实现电路仿真。在编写程序的同时,还要标注文本来注释程序的意思,以方便调试和改错优化。(4)进行软硬件调试。

2、总体方案设计如果对火灾自动报警器的功能加以了解的话,便可以知晓,其电路模块是多方面共同组成的结果,这一过程的实现绝非某一器件的单一作用效果。由于收集的信号非常小,因此有必要使用运算放大器来放大信号。放大的信号被发送到单片机,并且首先执行A/D转换,然后执行信息处理。处理结果通过无线通信技术发送。系统从整体可分为数据采集端和报警端俩部分。数据采集控制端有显示模块、传感器检测模块,按键选择模块、电源模块1、无线发射模块;报警端内包括蜂鸣器模块、LED指示模块、无线接收模块、电源模块2。以下分别对每个设计模块实现功能进行介绍。显示模块:采用LCD1602液晶显示屏显示当前检测气体浓度值。传感器检测模块:采用MQ-2盘热式结构半导体式可燃气体敏感传感器检测以烟雾、可燃气体;采DS-18B20数字温度传感器检测温度。按键选择模块:采用液晶显示屏和按键相结合实现对温度、烟雾浓度值设置。电源模块:电源模块1和电源模块2相同,由电池盒或USB提供电压。无线收发模块:采用无线模块进行报警信号的无线传输。报警模块:通过LED灯和蜂鸣器实现声光报警。单片机在地下停车场火灾检测中的作用:在火灾检测系统中,单片机主要完成以下功能:(1)检测功能:通过传感器采集数据,放大所采集到的信号,单片机接受所采集的数据,进行A/D数据转换。(2)报警功能:单片机所检测到烟雾的浓度与标准值进行比较,当浓度超过标准值时,单片机发出警报并启动排气扇和水泵。电路总题框图如图1所示:电源开关电源开关电源STC89C52单片机AD采集电路显示电路报警电路按键控制图1总体设计框图根据设计需求,选用51系列单片机STC89C52作为核心控制器件。整个系统由单片机STC89C52控制下工作的。烟雾传感器将检测到的烟雾浓度和温度传感器将检测到的温度变换成电信号,送出模拟信号,给A/D采集电路采集放大,由软件比较已设计好的报警值,如果超过报警值就给出信号,让报警器执行声光报警,最后启动安全措施。本方案需要将传感器检测技术、单片机相结合,应用于实践,这是一次考验,需要不遗余力去完成。2.1烟雾检测传感器选型烟雾传感器的选取对于火灾报警器是最优先的环节。事实上,火灾报警器的信号采集工作的顺利实现是基于烟雾传感器以及温度传感器来切实实现的,前者可以使得收集到的气体和浓度情况能够从物理层面上的信息形成相对应的电信号,后者则可以对停车场具体是否存在火灾的情况加以综合的了解,从而总体上达到检测的具体效果。事实上,通过精确的自动检测以及报警系统的实现,从而达到精确的数据输出主要依靠的便是传感系统的可靠性了。从具体结构来看,主要呈现为:图2烟雾传感器及其结构图2.2烟雾传感器的介绍烟雾传感器可以使得空气之中的烟气浓度达到一定程度时通过电信号的方式来加以检测。烟雾传感器的工作原理:当烟雾探测器检查到烟雾中某种物质浓度超标时,烟雾探测器的内部敏感元件电阻随着发生变化,并会生成一个电信号传输给单片机进行判定。烟雾传感器的选择主要由建筑环境和探测器技术决定。随着探测器探测技术的不断发展,传感器朝着体积小型化和集成化方向发展,使得烟雾传感器的体积不断的缩小,从而大大提高了烟雾传感器的便携性,使它更容易安装、运输和维护。目前,在许多领域烟雾传感器已得到广泛应用,例如城市公共场所安全、城镇居民家庭安全、工厂防火安全、学校防火全、地下停车场、加油站等人口聚集的地方。但国内所生产的烟雾传感器都不可以准确探测到早期火灾的发生,并且探测功能单一,安装使用困难和维护艰难。由于企业所生产的设备不是通用的,生产零件也就不能通用,不仅不能相互替代,更不用说彼此通信了。国内制造商生产的很多烟雾传感器让用户选哪一种比较好,这是国内烟雾传感器产品市场的主要缺陷。(1)烟雾传感器应满足的基本条件从烟雾传感器的特点来看,主要是单一功能的烟雾传感器,当然,市面上也是有着多功能的烟雾传感器的,但是综合来看,主要的特点主要聚焦于:(a)它对某种单一烟雾非常敏感,可以起到检测作用,但对其他共存烟雾不响应或响应低;(b)能准确地探测出在火灾环境的烟气浓度;(c)对检测信号的快速反应和良好的重复性;(d)长期稳定的工作;(e)使用寿命长;(f)经济适用,便于使用和维护。(2)烟雾传感器的分类从不同的烟雾探测器对不同烟雾的感应特性的不同之处,我们可以据此对不同的烟雾传感器进行选择,从而达到想要的烟雾传感的效果。气敏式烟雾传感器气敏探测器这一传感器主要是基于特定气体来实现检测效果的,从特性角度,可以进一步对其进行细化分类。事实上,其中应用程度最高的当属半导体气敏传感器了。这一过程中主要检测到的是烟雾中占比最大的气体,从而对这些气体加以探测之后,会对其获取到的信息进行内部处理,使其能够通过电信号的形式具体呈现出来。而通过对电信号的变化情况的了解,便可以了解到环境之中实际的气体浓度信息,并且基于此可以对其达到监控和报警等后续处理操作,使得对现场的安全性加以实时的探测。(b)离子烟雾传感器离子式烟雾传感器对烟雾粒子的感应非常灵敏,性能也比气敏电阻类的火灾传感器要强。离子式烟雾传感器的内部有俩个电离室,分为内外电离室。它的电离室有放射源镅241。事实上,电离室所形成的离子在电场的作用下会形成同性离子靠近的效果。从工作原理角度来看,具体基于电离室所带来的电压变化来具体了解其粒子所实现的微电流的具体变化情况。在烟雾粒子切实进入到电离室之后,使其空气的电离状态受到了改变,从而使得电离室两端的电压因此增高,从而使得空气之中的实际的烟雾情况得以被感知,从而针对其浓度的大小来具体判断其是否真的发生了火灾,并予以报警处理。离子烟雾传感器对于在火灾的初始阶段和闷燃阶段检测非常精准,它检测的是0.03um~10um范围烟雾颗粒径比其他烟雾传感器要小。(b)光电烟雾传感器光电烟雾传感器由发射板、发光装置、光敏电阻和开关组成。自然光通过折射反射到达光敏元件,电路状态保持不变。如果光源被烟雾阻挡,使光敏元件无法接收到正常的光信号,因此光敏元件将接收到的光强度的变化转化为电信号。光电烟雾探测器按照接收光的方式大致分为减光式光电烟雾探测器和散射光式光电烟雾探测器俩种。(1)减光式光电烟雾传感器该探测器的检测室内装有发光装置及接收光源装置。在正常情况下,光敏器件能够接收到发光装置发出一定量的光,电阻会保持在一定范围内波动;而在探测到烟雾时,因为烟雾的遮挡使发光装置发射的光无法全部到达检测室,于是接收光源装置接收的光量减少,光敏电阻降低,探测器发出报警信号。(2)散射光式光电烟雾传感器该探测器在探测室内也装有发光装置和接收光源装置,但它们的工作原理不同。从正常的情况来看,接收光源装置无法接收到发光装置所发出的光,因此无法实现报警功能。在实际需要火灾时,一旦有烟雾进入其中,那么这一过程中的粒子会形成光反射的效果,从而使得这一过程中光发生漫射现象,这样一来,光敏感器件的阻抗会因此发生不同程度的改变,基于此,光电流因此产生,进而使得烟雾信号不再成为烟雾信号,而是切实成为电信号,在接收到电信号之后,探测器会负责进行传输,使其讯息能够及时被传输到单片机那里。而随着这一技术的不断成熟和发展,其类型也是在不断得到丰富的。根据它的特性,该探测器可以检测到早期火灾发生的信息。光电烟雾传感器可应用于大型建筑物外,它们还特别适用于存在电气火灾危险的环境,例如计算机室、网吧、电缆室、高铁隧道等。根据地下停车场环境特性和比较多种烟雾传感器的应用特性,发现半导体烟雾传感器的特性比较适用于地下停车场火灾报警。半导体烟雾传感器具有广泛的探测范围、高灵敏度、快速响应恢复、优异的稳定性、寿命长、简单驱动电路等等,应用前景非常广泛。因为MQ-2型烟雾传感器所使用的气敏材料是二氧化锡半导体气敏材料,属于表面离子式N型半导体传感器,所以本设计中选择MQ-2半导体气体烟雾传感器作为烟雾传感器。该传感器比一般半导体烟雾传感器灵敏度高、电导率波动大、响应和恢复快、抗干扰能力强MQ-2气体烟雾传感器对检测液化气、丙烷、氢气等可燃气体的灵敏度高,效果好。再加上这种气体传感器比一般的气体传感器检测的可燃性气体多,是一款适合多种应用的经济实用的烟雾传感器。MQ-2半导体气体烟雾传感器的结构如图3所示,它由陶瓷管、气体敏感层、测量电极引线、加热器和防爆网等组成,安装在双层不锈钢防爆网内。图3MQ-2气敏元件的结构图MQ-2半导体气体烟雾传感器对检测烟雾和部分可燃气体非常有效。这种传感器在较大的烟雾气体浓度范围内对烟雾气体有较好的灵敏度,能够检测出多种可燃性气体,非常适合应用在地下停车场的火灾自动报警器中。它是一款多功能火灾检测器,多应于低成本的传感器。其技术指标如下表所示。加热电压(Vh)AC或DC5±0.2V回路电压(Vc)负载电阻(Rl)清洁空气中电阻(Ra)灵敏度(S=Ra/Rdg)响应时间(trec)恢复时间(trec)元件功耗检测范围使用寿命最大DC24V2KΩ≤2000KΩ≥4(在1000ppmC4H10中)≤10S≤30S≤0.7W50—10000ppm2年表1MQ-2的技术指标如果所需要探测的物理量或者是气体浓度发生差别的话那么相应的,传感器的工作机理也是存在着不同之处的。通常而言,这一过程中传输的电信号主要为模拟信号,当然,随着传感器的发展和不断迭代,也有通过数字量来输出电信号的现象。一旦传输的电信号达到预设值的时候,那么A/D转换器通常会不工作。而如果这一数值没有达到既定的预设值的时候,则需要借助于放大器来对其进行放大处理。也正是因此,在提到MQ-2半导体气体烟雾传感器时,需要将其模拟信号进行传输,从而借助于A/D转换器切实实现电信号的具体转化,在做完上述步骤的基础上使其进一步传输到单片机控制器。2.3温度传感器的选择方案1:选用PT100温度传感器。Pt100热电阻是温度测量传感器其中的一种。它一般与、调节器、温度变送器和显示仪表等配套使用,组成测温电路系统,用以测量或调控各种企业生产过程中-200℃-500℃范围内的所有物体的温度。如果对温度传感器有一定的认识的话,一定会了解到其工作原理主要是基于温度的变化而带来的电阻的变化来具体开展的。一旦被测的物体存在一定的温差,就可以据此来加以综合的探测和分析。尽管各种各样的热电阻在形状上是千奇百怪的,但是需要清晰地认识到的是,其总体来说,基本结构是相差无几的,组合要素也是基本相同的。Pt100热电阻的工作原理也是根据热电阻随着环境温度的变化其阻值也变化的特征来测量温度的。当Pt100热电阻阻值发生变化时,PT100温度传感器就可以根据其阻值变化所对应的温度值得出实测温度。Pt100热电阻温度传感器内部装有有压簧式感温元件。它的优点有抗振性强、测温准确、耐压性能强、性能可靠稳定等。唯一不足的是使用起来比较复杂。方案2:采用DS18B20温度传感器。DS18B20的接口方式是总线式,即DS18B20在与其他装置连接时仅需要一条口线即可实现装置与DS18B20的信息双向传输。由于这种总线式连接方式,可以使多个DS18B20温度传感器连接在一起形成传感器网络,可以方便快捷获得某区域环境的温度信息。它还有三个与众不同的寄生电源,使得它在进行远距离测温时,无需本地电源;它在测温精度、转换时间、传输速度、分辨率等方面要比其他温度传感器优秀,还能给用户带来了更方便的使用和更令人满意的效果。通过比较方案2比较符合此设计要求,原因有四个:(1)DS18B20温度传感器比Pt100温度传感器的测温温度范围大,而且DS18B20温度传感器对所测温度误差要小;(2)由于DS18B20温度传感器使用集成芯片,所以它能够直接将被测温度转换成数字温度信号,不需要像Pt100温度传感器那样,还要经过各种转换装置转换成数字信号;(3)DS18B20温度传感器连接方式采用的是总线式,使得它不像Pt100温度传感器那样单点测量温度,能够像网状区域检测环境;(4)DS18B20电路安装方便,维护简单。基于以上综述,选择了DS18B20温度传感器来做本设计的温度传感器。3、系统的硬件电路3.1单片机最小系统STC89C52单片机的最小系统主要由复位电路、晶振电路、电源组成,如图3所示。图4最小系统模块STC89C52单片机适用的电源电压的范围一般都是在4V-5.5V的范围内,若电源电压不足,单片机就无法正常工作。同时,一般对单片机进行供电时我们只需要接入5V的电源就能使单片机工作,同时,需要想单片机的VSS接电源GND,从而使单片机能够形成一个完整的电流回路,不然会使系统出现断路。在这次设计中,要用到的主芯片是STC89C52单片机,那么,就必须建立其最小系统,其最小系统包括以下几个模块:1、时钟电路模块,用于驱动单片机的时钟顺序,相当于现实中的时序,第二,就是复位电路,用于实现对单片机的重置和数据的清空,当单片机处于锁死的状态,可通过复位按键对单片机进行重启的作用。3.2单片机的时钟电路与复位电路设计在这次设计中,选用的主芯片是STC89C52单片机,那么,就必须建立其最小系统,其最小系统包括以下几个模块:1、时钟电路模块,用于驱动单片机的时钟顺序,相当于现实中的时序;2、复位电路,用于实现对单片机的重置和数据的清空,当单片机处于锁死的状态,可通过复位按键对单片机进行重启的作用,具体电路如下图4图5所示:图5时钟电路 图6复位电路3.3MQ-2传感器检测AD采集电路这次用到的二氧化硫传感器是MQ-2传感器,用于采集当地环境的二氧化硫的产生情况,一旦二氧化硫的浓度超过了我们的预设值,那么二氧化硫烟雾探测器就会发出相应的报警信号给ADC0832转换模块,当ADC0832转换模块得到探测后获得的各种二氧化硫浓度下的电压值就会进行AD转换得到数据再传输到单片机进行处理。当预设值比我实时采集的电压要小,那么就会产生相应的告警情况。电路如图6所示。图7二氧化硫浓度采集电路3.4显示屏的选择这里选用的是LCD1602显示屏显示温度,可以比较清楚直观的了解到温度的实时情况,同时通过三极管去驱动LCD1602进行显示。具体的显示的数字,通过C语言程序进行编制,然后经过单片机进行处理之后,进行反馈的。图8LCD1602显示3.5蜂鸣器火灾报警提示电路蜂鸣器报警电路主要由限流电阻、蜂鸣器、三极管三部分组成的,这些都是构成报警电路的元器件。工作原理:由一个三极管去驱动蜂鸣器的开启与停止,当基极处于低电平的状态下,电流通过三极管处,蜂鸣器开始工作发出报警声;但是当基极处于高电平的状态时,这样三极管就处于关闭的状态,蜂鸣器停止发出报警声。从而通过一个三极管控制蜂鸣器的开关作用。图9蜂鸣器报警电路图3.6按键控制温度及应急报警电路要控制温度及应急报警电路,需要设置四个按键,分别是:1、一个烟雾、温度浓度的设置键2、烟雾、温度浓度的数据的加键、一个烟雾、温度浓度的数据的减键、在这次设计中,预设了几个按键,用于满足功能模块的需求:1、用于对烟雾、温度浓度的上下限的设置(S2为设置键,S3为加键,S4为减键),首先通过按键设置烟雾、温度浓度的上下限的数值,当所测烟雾、温度浓度处于反常的状态,即当烟雾、温度浓度超过之前设置的上下限数值时,就会驱动报警装置进行声光报警,达到预警效果。图10功能按键连接电路图3.7电源供电模块本系统采用电池供电,考虑了如下几种方案为系统供电。因为主芯片是STC85C52芯片,所以这个系统需要的电压是在5V左右,所以整个系统的供电的模式由几种,具体如下:1、可以用电脑USB电源或者5V蓄电池做为整个系统的电源供电。最大的原因就是利用蓄电池能进行自我蓄电以及在电源供电中断时候,蓄电池能进行一段时间的电源供电,但是由于但蓄电池的体积过于庞大的劣势,只能选择放弃此方案。2、利用3节1.5V干电池进行串联的方式,能够得到共4.5V,这样就可用作电源供电模块,而且通过查阅单片机的电源供电,发现单片机的供电单元的电压范围在3.3V-5V的电压范围内,因此考虑到上次种种因素,选择了用第二种方式去代替第一种方式,用于给整个系统进行电源输出,作为电源供电模块。具体方案如下图设计:1、电源接口电路如图10所示,从下图可知电源供电模块的接口为P1口,而SW1这个开关控制电源的连接与断开。为了让用户更加清楚直观的了解,利用发光二极管作为电源指示灯。图11电源接口电路3.8温度采集传感器(DS18B20)电路3.8.1DSl8B20作用 这次主要运用到的就是能够直接采集环境中的温度情况,并通过总线与STC89S52芯片进行通信,将采集到的温度数据转换成能够被单片机处理二进制并传输,同时通过LCD1602显示屏对采集到的温度与预设值做对比显示,让用户直观了解温度情况,因为此系统是温度报警系统,主要通过C程序在单片机预设一个温度值,然后通过DS18B20传感器在环境中采集到的数据,然后根据预设值,两者进行比较分析,可以很清楚的知道,一旦采集到的温度的数据大于预先设置的温度的数值时,STC89C52芯片随即做出对应的命令,就会驱动三极管和继电器进行执行的操作,同时导通驱动蜂鸣器,从而进行报警的功能。同时,也可通过按键对温度的上下限的数值进行更改,来应对环境中温度的变化,做到精确控制。3.8.2DSl8B20具体参数及工作方式表2部分温度转换值温度输入(2进制)输出(16进制)+125℃000001111101000007D0H+85℃00000101010100000550H+25.0625℃00000001100100010191H+10.125℃000000001010001000A2H+0.5℃00000000000010000008H0℃00000000000000000000H-0.5℃1111111111111000FFF8H-10.125℃1111111101011110FF5EH-25.0625℃1111111101011110EE6FH-55℃1110111001101111FE90H3.8.3DS18B20引脚及系统接口电路图12DS18B20的管脚实物图图13DS18B20温度传感器引脚及接口电路图3.8.4DS18B20电源供电由于DS18B20温度传感器模块本身特性,采用两种不同电源供电的模式。1、直接利用2节干电池进行供电的方式,但是这种方式不利于对电池有效性的使用,2、利用usb供电的方式进行供电,主要的模式就是在原理图画出一个插接口的模块,主要是5V电源模块,包括:VCC、GND、信号线,这刚好跟DS18B20模块的信号吻合,只需要将,温度采集模块的1号因脚接GND,2号脚接信号线,同时将3号引脚接VCC。4系统软件的设计4.1整个系统主程序设计及流程图在这次设计过程中,由于选择的烟雾、温度浓度传感器需要在事先进行通电预热,使得里面的传感芯片能够适应当前的烟雾、温度浓度,在进行测试时,需要对传感器进行预热,烟雾、温度传感器才能正常的采集到烟雾、温度的浓度的信息,并将这些信息经过ADC8032转换成电压信号,将电压信号通过单片机的I/O引脚,转化成单片机可识别的脉冲,然后STC89S52单片机会进行数据的对比与处理,最后驱动不同的执行机构,去做出相应的动作,用于满足不同的需求。图14主程序流程图由于STC89C52单片机只能识别二进制,所以,这次通过DS18B20以及烟雾、温度浓度采集的数据,都需要经过ADC0832模块的电平转化,将电压信号转化成高低电平的信号,这样就能被单片机识别,这里系统主要由以下几个模块组成:(1)、STC89C52单片机;(2)、DS18B20温度采集模块;(3)、烟雾、温度采集模块;(4)、蜂鸣器报警模块;(5)、LCD1602显示屏显示模块;(6)、时钟模块。利用keil编写C程序,然后将程序烧录至单片机主芯片内,然后主芯片通过对采集模块采集的数据进行分析处理,然后驱动三极管进行驱动,使执行模块进行相应的动作,这样就能完成系统所需要的功能和要求了。5、系统电路调试在设计过程中,往往会遇到一些问题和难题,要学会去解决问题:1、单片机时钟无反应,导致芯片无法运行,解决方式:通过直接对晶振进行测试,示波器观察波形,发现晶振不起振,然后,决定更换晶振,当更换晶振后再次测试,问题得到解决。2、当进行程序编译时,keil软件输入的头文件错误,然后,依次去核对头文件,发现少了一个头文件,进行补足,程序编译成功3、程序烧录,用CH340进行程序烧录时,发现程序一直烧录不进去,然后发现自己将接收和发送的引脚反接了,然后进行调整4、在程序烧录成功后,对硬件进行测试,发现当温度和二氧化硫都发生告警时,但是蜂鸣器模块并没有发出报警提示,于是判断1、蜂鸣器是否发生故障2、程序代码是否遗漏3、三极管和继电器驱动模块是否存在一点的问题,比如说三极管未导通,带着上述的几个方面,依次进行排查,最后发现三极管两端没有被导通,于是换个好的三极管进行调试,最后问题顺利解决。因为在学校里平时接触单片机焊接的情况比较少,所以在这次设计过程中,存在着一些问题:1、因为STC89C52芯片的引脚有四十个,而且两引脚之间的间距比较小,导致焊锡时会不小心焊在一起,导致出现短路的现象,第二,LCD1602显示屏驱动电路和现实电路在焊接时,首先是对底座进行焊接,然后将底座固定之后,只需要将显示屏进行插拔的即可。在焊接过程中,首先对线路板进行焊接的布局,首先,焊接的是主芯片,然后依次对其最小系统的外围电路进行焊接,包括晶振、复位及按键电路,然后,固定比较大型的LCD1602显示屏显示屏底座,当底座固定后,不进行面板安装,对面板进行保护,然后依次焊接按键输入模块,蜂鸣器报警模块以及三极管驱动开锁电路,最后的工作就是对电阻电容及一些辅助电路进行焊接及固定。6、总结评价此次设计过程,利用DS18B20温度传感器和MQ-2烟雾传感器进行探测,通过两者采集到的烟雾浓度和温度的数值,与当初设定的数值进行对比的过程,然后将数值转化为电压,传入STC89S52芯片中进行处理和指令的下发,当实时数据大于设定值时,就会产生相应的电信号变化,触发蜂鸣器报警。这次设计利用STC89C52单片机的最小系统模块,利用其高速运转的系统,同时加载了DS18B20温度传感检测模块和烟雾、温度浓度检测模块,通过两者传感器对地下停车场环境的监控,当采集的温度和烟雾、温度浓度大于设定的上限值时,单片机系统就会下发指令给执行模块,三极管就会被导通,当三极管被导通后,就会驱动蜂鸣器进行报警,从而到达预警的效果,这样,整个火灾检测系统就能得到稳定的运行了,同时通过单片机将二进制转化成电压信号,将采集到的温度和烟雾、温度浓度的数据显示在LCD1602显示屏上,这样一方面让用户和直观而且比较清楚的了解到当前温度和烟雾、温度浓度的数值,同时可以让人们通过数据直观感受到环境的变化。根据网上调查与现场测试,获得了烟雾、温度浓度信号的实验数据,然后得出火灾报警器设置的烟雾浓度、温度与实际测得的数据之间的误差为0.4LEL,在误差范围±1%LEL所允许内,所设置的预设值满足检测标准,得出预期设计效果的结论。通过此次毕业设计,在此过程中学会了很多新知识,也学到了很多做人的道理,每当遇到难题解决不了的时候,老师的每一次指导,都能带来无数的灵感,都能很好的将问题的本质和根源找到,并且在老师和同学的帮助和指导下,一次次的在困难面前找到解决的方式。在设计原理图的时候,老师每次都能及时发现问题,并且指导我一次次改善,通过这次毕业设计,理论知识得以在生活中得到实践,及时找到自己身上的不足,并且努力去改进,要学会了解别人的意图,学会合理的分析,找到问题的关键。对于此次设计来说,一种解决问题的思路很关键,需要在设计中考虑到问题的关键点,大学四年的生活即将结束,在此非常感谢身边同学和老师的帮助,在你们的帮助下,按时完成了毕业设计,同时通过自己的努力,将实物完善,就等通过毕业答辩后领毕业证。

参考文献[1]李华.MCS一51系列单片机实用接口技术[M].北京航空航天大学出版社.2002.[2]张毅坤等.单片微型计算机原理及应用[M].西安电子科技大学出版社.2006.[3]潘新民等.微型计算机控制技术[M].北京:电子工业科技大学出版社.2003.[4]陈伟.MCS一51系列单片机实用子程序集锦[M].北京:清华大学出版社.1993.[5]朱明程等.一氧化碳传感器MGS1100原理及应用电子技术[M].1998年第1期.[6]刘迎春.传感器原理设计及应用[M].哈尔滨工业大学出版社.[7]赵负图.数据采集与控制系统[M].北京科学技术出版社.1987.[8]刘广玉.新型传感器技术及应用[M].北京航空航天大学出版社.1989.[9]张毅刚.MCS一51单片机应用设计[M].1990.[10]陈伟.MCS一51系列单片机实用子程序集锦[M].清华大学出版社.1993.[11]余成波.传感器与自动检测技术[M].高等教育出版社.2004.[12]李玮.基于单片机的传感器综合电路的设计[D].《吉林大学》2016年.[13]毛文联.地下停车场喷流导引系统设计浅谈[J].《制冷空调与电力机械》2001年.[14]陈倬.单片机在火灾报警控制系统中的应用[J].《科技资讯》2009年.[15]吕津.一种新颖的火灾自动报警控制器的硬件设计[D].《四川大学》2003年.[16]姜斌.基于多传感器的火灾自动报警器的设计[D].《自动化应用》2014年.[17]付源.火灾自动报警系统的研究[J].《知识经济》2011年.附录附件一:总体原理图设计PCB原理图实物图附件二:部分程序源代码//程序头函数#include<reg52.h>#include<math.h>//宏定义#defineuintunsignedint#defineucharunsignedchar//显示函数#include<display.h> //显示函数display.h在工程里 也可鼠标选中左边右键opendocument<display.h>#include<intrins.h>#include"eeprom52.h"#defineData_ADC0809P1 //定义P1口为Data_ADC0809(之后的程序里Data_ADC0809即代表P1口)//管脚声明sbitLED_wendu=P2^2; //温度报警灯sbitLED_yanwu=P2^1; //烟雾报警灯sbitFENG=P2^5; //蜂鸣器接口sbitDQ=P2^0; //ds18b20的数据引脚sbitfs=P3^4; //继电器风扇引脚sbitfs1=P3^5;//ADC0809sbitST=P3^3;sbitEOC=P3^6;sbitOE=P3^2;//按键sbitKey1=P2^6; //设置键sbitKey2=P2^7; //加按键sbitKey3=P3^7; //减按键signedcharw; //温度值全局变量uintc; //温度值全局变量//气体浓度变量inttemp=0; //用于读取ADC数据intZERO=0;charsec=60; //开机初始化的时间 ucharyushe_wendu=50; //温度预设值ucharyushe_yanwu=45; //烟雾预设值//按钮模式|ucharMode=0; //=1是设置温度阀值=2是设置烟雾阀值//函数声明externucharADC0809();externvoidKey();voiddelay(uintz) //延时函数大约延时zms{ uinti,j; for(i=0;i<z;i++) for(j=0;j<121;j++);} /******************将数据保存到单片机内部eeprom中******************/voidwrite_eeprom(){ SectorErase(0x2000); byte_write(0x2000,yushe_wendu); byte_write(0x2001,yushe_yanwu); byte_write(0x2002,ZERO); byte_write(0x2060,a_a); }/******************把数据从单片机内部eeprom中读出来*****************/voidread_eeprom(){ yushe_wendu=byte_read(0x2000); yushe_yanwu=byte_read(0x2001); ZERO=byte_read(0x2002); a_a=byte_read(0x2060);}/**************开机自检eeprom初始化*****************/voidinit_eeprom(){ read_eeprom(); //先读 if(a_a!=1) //新的单片机初始单片机内问eeprom { yushe_wendu=50; yushe_yanwu=45; ZERO=0; a_a=1; write_eeprom(); //保存数据 } }/*****延时子程序:该延时主要用于ds18b20延时*****/voidDelay_DS18B20(intnum){while(num--);}/*****初始化DS18B20*****/voidInit_DS18B20(void){unsignedcharx=0;DQ=1;//DQ复位Delay_DS18B20(8);//稍做延时DQ=0;//单片机将DQ拉低Delay_DS18B20(80);//精确延时,大于480usDQ=1;//拉高总线Delay_DS18B20(14);x=DQ;//稍做延时后,如果x=0则初始化成功,x=1则初始化失败Delay_DS18B20(20);}/*****读一个字节*****/unsignedcharReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//给脉冲信号dat>>=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;Delay_DS18B20(4);}return(dat);}/*****写一个字节*****/voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;Delay_DS18B20(5);DQ=1;dat>>=1;}}/*****读取温度*****/unsignedintReadTemperature(void){unsignedchara=0;unsignedcharb=0;unsignedintt=0;floattt=0;Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0x44);//启动温度转换Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0xBE);//读取温度寄存器a=ReadOneChar();//读低8位b=ReadOneChar();//读高8位t=b;t<<=8;t=t|a;tt=t*0.0625;t=tt*10+0.5;//放大10倍输出并四舍五入return(t);}//=====================================================================================//=====================================================================================//=====================================================================================/*****读取温度*****/voidcheck_wendu(void){ c=ReadTemperature()-5; //获取温度值并减去DS18B20的温漂误差 if(c<0)c=0; if(c>=999)c=999;}//ADC0809读取信息ucharADC0809(){ uchartemp_=0x00; //初始化高阻太 OE=0; //转化初始化 ST=0; //开始转换 ST=1; ST=0; //外部中断等待AD转换结束 while(EOC==0) //读取转换的AD值 OE=1; temp_=Data_ADC0809; OE=0; returntemp_;}voidKey(){ //模式选择 if(Key1==0) //设置按键 { delay(20); if(Key1==0) { FENG=0; //蜂鸣器响 delay(100); FENG=1; //蜂鸣器关 if(Mode>=3)Mode=0; else { write_烟雾m(0x0f);//打开显示无光标光标闪烁 Mode++; //模式加一 switch(Mode) //判断模式的值 { case1: { write_烟雾m(0x80+7);//为1时温度阀值的位置闪烁 break; //执行后跳出switch } case2: { write_烟雾m(0x80+15);//为2时烟雾阀值的位置闪烁 break; } case3: //当模式加到3时 { write_烟雾m(0x0c);//打开显示无光标无光标闪烁 Mode=0; //模式清零 break; } } } while(Key1==0); } } if(Key2==0&&Mode!=0) //加按键只有在模式不等于0时有效 { delay(20); if(Key2==0&&Mode!=0) { FENG=0; //蜂鸣器响 delay(100); FENG=1; //蜂鸣器关 switch(Mode) //加按键按下时判断当前模式 { case1: //模式为1时 { yushe_wendu++; //预设温度值(阀值)加1 if(yushe_wendu>=99) //当阀值加到大于等于99时 yushe_wendu=99; //阀值固定为99 write_烟雾m(0x80+6); //选中阀值在1602上显示的位置 write_data(0x30+yushe_wendu/10);//将阀值数据分解开送入液晶显示 write_data(0x30+yushe_wendu%10); write_烟雾m(0x80+7); write_eeprom(); //保存数据 break; } case2: { yushe_yanwu++; //同温度阀值设置 if(yushe_yanwu>=255) yushe_yanwu=255; write_烟雾m(0x80+13); write_data(0x30+yushe_yanwu/100); write_data(0x30+yushe_yanwu%100/10); write_data(0x30+yushe_yanwu%10); write_烟雾m(0x80+15); write_eeprom(); //保存数据 break; } } while(Key2==0); } } if(Key3==0&&Mode!=0) { delay(20); if(Key3==0&&Mode!=0) { FENG=0; //蜂鸣器响 delay(100); FENG=1; //蜂鸣器关 switch(Mode) { case1: { yushe_wendu--; //同上 if(yushe_wendu<=0) yushe_wendu=0; write_烟雾m(0x80+6); write_data(0x30+yushe_wendu/10); write_data(0x30+yushe_wendu%10); write_烟雾m(0x80+7); write_eeprom(); //保存数据 break; } case2: { yushe_yanwu--; //同上 if(yushe_yanwu<=0) yushe_yanwu=0; write_烟雾m(0x80+13); write_data(0x30+yushe_yanwu/100); write_data(0x30+yushe_yanwu%100/10); write_data(0x30+yushe_yanwu%10); write_烟雾m(0x80+15); write_eeprom(); //保存数据 break; } } while(Key3==0); } } if(Key2==0&&Key3==0&&Mode==0) { delay(1000); if(Key2==0&&Key3==0&&Mode==0) { FENG=0; //蜂鸣器响 delay(200); FENG=1; //蜂鸣器关 ZERO=temp; while(Key2==0&&Key3==0); write_eeprom(); //保存数据 } }}voidinit() //初始化函数{ TMOD=0x01;//工作方式 TL0=0xb0; TH0=0x3c;//赋初值(12MHz晶振的50ms) EA=1; //打开中断总开关 ET0=1; //打开中断允许开关 TR0=1; //打开定时器开关}/*****主函数*****/voidmain(){ check_wendu(); //初始化时调用温度读取函数防止开机85°C Init1602_init(); //1602初始化 init(); while(sec+1) { write_烟雾m(0x80+0x40+13); write_data(sec/10+0x30); write_data(sec%10+0x30); } Init1602(); //调用初始化显示函数 init_eeprom();//开始初始化保存的数据 EA=0; while(1) //进入循环 { if(Mode==0) //只有当模式为0时才会执行以下的阀值判断部分 { temp=ADC0809(); //读取烟雾值 check_wendu(); //读取温度值 if(c>=(yushe_wendu*10)) { delay(500); check_wendu(); //读取温度值 } Display_1602(yushe_wendu,yushe_yanwu,c,temp,ZERO);//显示预设温度,预设烟雾,温度值,烟雾值 if(temp-ZERO>=yushe_yanwu) //烟雾值大于等于预设值时 { LED_yanwu=0; //烟雾指示灯亮 FENG=0; //蜂鸣器报警 fs=0; //烟雾超限风扇启动 } else //烟雾值小于预设值时 { LED_yanwu=1; //关掉报警灯 } if(c>=(yushe_wendu*10)) //温度大于等于预设温度值时(为什么是大于预设值*10:因为我们要显示的温度是有小数点后一位,是一个3位数,25.9°C时实际读的数是259,所以判断预设值时将预设值*10) { FENG=0; //打开蜂鸣器报警 LED_wendu=0; //打开温度报警灯 } else //温度值小于预设值时 { LED_wendu=1; //关闭报警灯 } if((temp-ZERO>=yushe_yanwu)&&(c>=(yushe_wendu*10))) { fs1=0; } if((temp-ZERO<yushe_yanwu)&&(c<(yushe_wendu*10))) //当烟雾小于预设值并且温度也小于预设值时(&&:逻辑与,左右两边的表达式都成立(都为真,也就是1)时,该if语句才成立) { FENG=1; //停止报警 fs=1; //两个传感器都不超限后关闭风扇 fs1=1; } } Key(); //调用按键函数扫描按键 }}voidtime1_int(void)interrupt1//定时器函数{ uchar烟雾unt; TL0=0xb0; TH0=0x3c; //重新赋初值 烟雾unt++; //计时变量加 if(烟雾unt>=20) //计数到20时,正好是1000ms,就是1s,这里就是让灯灭,蜂鸣器不响,从而做出闪烁的效果 { 烟雾unt=0; //计到1s时,将烟雾unt清零,准备重新计数 if(sec>=0) sec--; }} #include<reg52.h>//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include"intrins.h" #defineu8 unsignedchar#defineu16 unsignedint#defineuchar unsignedchar#defineuint unsignedintucharyushe_wendu=50; //温度预设值ucharyushe_yanwu=100; //烟雾预设值uintwendu; //温度值全局变量ucharyanwu; //用于读取ADC数据//运行模式ucharMode=0; //=1是设置温度阀值=2是设置烟雾阀值 =0是正常监控模式//管脚声明sbitLed_Reg =P2^2; //红灯sbitLed_Yellow=P2^4; //黄灯sbitBuzzer =P2^0; //蜂鸣器sbitFan =P3^3; ///*********************************************************************名称:delay_1ms()*功能:延时1ms函数*输入:q*输出:无***********************************************************************/voiddelay_ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<110;j++);}/***********************************************************************************************************LCD1602相关函数***********************************************************************************************************///LCD管脚声明(RW引脚实物直接接地,因为本设计只用到液晶的写操作,RW引脚一直是低电平)sbitLCDRS=P2^7;sbitLCDEN=P2^6;sbitD0 =P0^0;sbitD1 =P0^1;sbitD2 =P0^2;sbitD3 =P0^3;sbitD4 =P0^4;sbitD5 =P0^5;sbitD6 =P0^6;sbitD7 =P0^7;//LCD延时voidLCDdelay(uintz) //该延时大约100us(不精确,液晶操作的延时不要求很精确){uintx,y;for(x=z;x>0;x--)for(y=10;y>0;y--);}voidLCD_WriteData(u8dat) { if(dat&0x01)D0=1;elseD0=0; if(dat&0x02)D1=1;elseD1=0; if(dat&0x04)D2=1;elseD2=0; if(dat&0x08)D3=1;elseD3=0; if(dat&0x10)D4=1;elseD4=0; if(dat&0x20)D5=1;elseD5=0; if(dat&0x40)D6=1;elseD6=0; if(dat&0x80)D7=1;elseD7=0;}//写命令voidwrite_com(ucharcom){LCDRS=0; LCD_WriteData(com);//DAT=com;LCDdelay(5);LCDEN=1;LCDdelay(5);LCDEN=0;}//写数据voidwrite_data(uchardate){LCDRS=1; LCD_WriteData(date);//DAT=date;LCDdelay(5);LCDEN=1;LCDdelay(5);LCDEN=0;}/*选择写入位置*/voidSelectPosition(unsignedcharx,unsignedchary){ if(x==0) { write_com(0x80+y);//表示第一行 } else { write_com(0xC0+y);//表示第二行 }}/*写入字符串函数*/voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s){ SelectPosition(x,y); while(*s) { write_data(*s); s++; }}//========================================================================//函数:voidLCD_Write_Char(u8x,u8y,u16s,u8l)//应用:LCD_Write_Char(0,1,366,4);//描述:在第0行第一个字节位置显示366的后4位,显示结果为0366//参数:x:行,y:列,s:要显示的字,l:显示的位数//返回:none.//版本:VER1.0//日期:2013-4-1//备注:最大显示65535//========================================================================voidLCD_Write_Char(u8x,u8y,u16s,u8l){ SelectPosition(x,y); if(l>=5) write_data(0x30+s/10000%10); //万位 if(l>=4) write_data(0x30+s/1000%10); //千位 if(l>=3) write_data(0x30+s/100%10); //百位 if(l>=2) write_data(0x30+s/10%10); //十位 if(l>=1) write_data(0x30+s%10); //个位}/*1602指令简介write_com(0x38);//屏幕初始化write_com(0x0c);//打开显示无光标无光标闪烁write_com(0x0d);//打开显示阴影闪烁write_com(0x0d);//打开显示阴影闪烁*///1602初始化voidInit1602(){uchari=0;write_com(0x38);//屏幕初始化write_com(0x0c);//打开显示无光标无光标闪烁write_com(0x06);//当读或写一个字符是指针后一一位write_com(0x01);//清屏 }voidDisplay_1602(yushe_wendu,yushe_yanwu,c,temp){ //显示预设温度 LCD_Write_Char(0,6,yushe_wendu,2); //显示预设烟雾 LCD_Write_Char(0,13,yushe_yanwu,3); //时时温度 LCD_Write_Char(1,6,c/10,2); write_data('.'); LCD_Write_Char(1,9,c%10,1); //时时烟雾 LCD_Write_Char(1,13,temp,3);}/***********************************************************************************************************ADC0832相关函数***********************************************************************************************************/sbitADCS =P1^5;//ADC0832片选sbitADCLK=P1^2;//ADC0832时钟sbitADDI =P1^3;//ADC0832数据输入 /*因为单片机的管脚是双向的,且ADC0832的数据输入输出不同时进行,sbitADDO =P1^3;//ADC0832数据输出 /*为节省单片机引脚,简化电路所以输入输出连接在同一个引脚上//========================================================================//函数:unsignedintAdc0832(unsignedcharchannel)//应用: temp=Adc0832(0);//描述:读取0通道的AD值//参数:channel:通道0和通道1选择//返回:选取通道的AD值//版本:VER1.0//日期:2015-05-29//备注://========================================================================unsignedintAdc0832(unsignedcharchannel){ uchari=0; ucharj; uintdat=0; ucharndat=0; ucharVot=0; if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_(); ADCS=0;//拉低CS端 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 _no

温馨提示

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

评论

0/150

提交评论