智能垃圾桶检测系统.doc
【精品文档】如有侵权,请联系网站删除,仅供学习与交流智能垃圾桶检测系统.精品文档.基于物联网技术的垃圾智能管理系统的设计与实现摘要本设计主要以单片机AT89S51为智能控制中心,结合GSM模块、重力检测模块、超声波检测模块及温度检测模块,及其外围辅助电路,构成了一个多种检测功能为一体的多功能垃圾管理系统。首先由各传感器检测重力、高度及温度信号并显示出来,当检测到的信号超出自身的设定值时,将其转化为电信号并传送给单片机处理,再由单片机将电信号传送给GSM模块进行打电话和发短信通知用户。该系统具有轻便灵巧、电路简单易实现,所使用的各类元器件灵敏度较高的特点。利用单片机编程,可使电路功能易于控制,从而实现了识别不同情况下具有智能的垃圾管理系统。关键词:GSM;单片机;温度模块;超声波检测AbstractThis design mainly intelligent control of the single chip AT89S51 as the center, in combination with the GSM module, gravity detection module, ultrasonic detection module and temperature detection module, and its periphery auxiliary circuit, formed a variety of detection for the integration of multi-functional waste management system. First detected by the sensor of gravity, altitude and temperature signals, when the detected signal is beyond its own value, is transformed into electrical signals and transmitted to the single chip microcomputer processing, again by MCU will be routed to a GSM module calling and texting notifies the user. The system has a lightweight flexible, simple circuit to implement, of the various components used the characteristics of high sensitivity. Microcontroller programming, can make the circuit function is easy to control, so as to realize the recognition of different cases, the waste management system with smart.Key words:GSM; Single chip microcomputer; Temperature module; 目录1.引言12、系统总体设计方案22.1 系统总体设计22.1.1 设计要求22.1.2 设计框架22.1.3 GSM通讯技术33、硬件设计与实现53.1 主控制器的选择及外围电路设计53.2 GSM通讯模块设计53.3温度检测模块设计63.4高度检测模块设计83.5重力检测模块设计103.6显示模块设计124、软件设计与实现144.1 软件设计流程分析144.2 GSM短消息程序设计154.2.1 短消息收发模式154.2.2 接收短消息程序设计174.2.3 发送短消息程序设计185.系统调试与实现195.1 硬件制作与调试195.2 软件编程与调试205.3实物验证:216.总结与展望247.致谢25参考文献26附录A:传感器采集显示控制源程序27附录B:传感器采集显示控制源程序421.引言随着人类社会经济的飞速发展和人民生活水平的不断提高,人们对其卫生的要求也越来越高,主要表现在他们不仅希望拥有舒适、温馨的住所,而且对干净整洁、智能性等方面也提出了更高的要求。人们迫切需要一种智能的家庭能垃圾管理系统可靠地进行垃圾管理工作,及时发现垃圾桶是否已满通知户主,以便将病毒消灭在萌芽状态,这样人们的健康能够得到较大的保证,同时也保证了用家庭的干净整洁。垃圾智能管理系统的设计与实现,是一项专业性很强的实用技术。人们普遍认为,所谓的垃圾智能管理系统,就是以清洁为目的,运用各种高科技设备及手段,不间断地垃圾环境进行清理和分类的备的总和。随着社会经济的发展进步,垃圾智能管理系统的应用普及越来越广,科技含量越来越高。先进的垃圾集中管理系统体现了物联网的研究成果,科技产品和技术的一个结晶和缩影。当然,垃圾智能管理系统的研发不能一味地追求高、精、尖,其最根本的立足点还是必须回归实用性,在保障适用性的前提下追求最低的成本与价格。本文基于上述原因提出一种能够通知用户的垃圾智能管理系统。具体来说,该系统以重力、高度及温度信号等传感器,结合GSM模块,及其外围辅助电路,以单片机为智能控制中心,构成了一个集测量温度、测量重力、测量高度等多种检测功能为一体的垃圾智能管理系统。2、系统总体设计方案2.1 系统总体设计2.1.1 设计要求本文的目的是设计一个简单实用经济的垃圾智能管理系统,因此在设计的时候需要遵循一定的规则。(1)低功耗现今社会对能源的消耗越来越快,节能成为了一个我们必须考虑的因素,在智能家居系统中在不影响性能的基础上,必须将功耗考虑在内,从器件选择和程序优化上控制功耗;(2)低成本系统针对普通家庭,必须考虑成本因素,需尽量选择性价比高的元器件;(3)实用可靠性任何一个产品的设计,不能光有华丽的外表或繁杂的功能,实用性、可靠性才是产品能否取得成功的决定性因素。2.1.2 设计框架本文所设计的智能家居监控系统由主控制器模块、GSM通讯模块、重力传感器、温度传感器、超声波测量等部分组成。其架构如图2-1所示。图2-1 整体架构图该系统的控制方式为远程控制:通过GSM通讯模块以短消息的方式来实现,同时还能实现远程报警功能。2.1.3 GSM通讯技术GSM是全球移动通信系统(Global System for Mobile communications) 的简称,是由欧洲电信标准组织ETSI制订的一个数字移动通信标准;它的空中接口采用时分多址技术,是当前应用最为广泛的移动电话标准;自90年代中期投入商用以来,全球超过200个国家和地区超过10亿人正在使用10。随着用户的不断增长和数字通信的发展,又出现了GPRS、CDMA以及3G(WCDMA,CDMA2000和TD-SCDMA)等数字通信系统,现在正在朝着4G发展。但目前相对来说GSM技术最成熟。而且它以OSI为基础,技术标准公开,发展规模最大,是基于时分多址技术的移动通信体制中应用最广泛的系统。我国地域辽阔,虽然3G移动通讯网最近几年发展非常快,但目前我国公众移动通信的主要方式,仍然是GSM数字蜂窝移动通信网,主要提供话音、短消息等服务。SMS是短消息服务(Short Message Service)的简称,是用手机收发简短文本消息的一种通信机制。随着GSM移动通信网络的迅速普及和广覆盖,短信息服务(SMS)作为GSM网络的一种基本服务,已经得到了空前的发展,我国目前已建成覆盖全国的GSM数字蜂窝移动通信网,为我国移动通信提供了可靠保证。SMS与话音传输及传真一样,是GSM通信网即2G移动通信提供的主要电信业务,它通过无线控制信道进行传输,是GSM通信网所特有的。SMS采用存储转发模式短信息被发送出去后,不是直接发送给接收方,而是先存储在短信息中心(SMSC),然后再由SMSC把短信息转发给接收方。如果接收方不在服务区内或关机,SMSC会自动保存此短信息,等到接收方在服务区内再发送。与普通的寻呼机制有所不同,SMS是一项有保证的双向服务。发送方可以在短信息发送出去后得到一条确认信息,以告知传递成功或失败。由此可见,短消息业务作为GSM网络的一种主要的电信业务,它的信息传递是比较可靠的。因此,选用GSM的短消息业务来实现远程无线数据传输也是可行的。本次课题将有效利用GSM短信通讯技术来实现智能家居系统的远程控制和报警功能。3、硬件设计与实现3.1 主控制器的选择及外围电路设计本系统采用的单片机为STC89C52单片机作为主控制器。图3-1 单片机最小系统单片机最小系统如图3-1所示,18引脚和19引脚XTAL1 、XTAL2分别与外部晶振和电容相连接,第9引脚为复位输入端,接上电容、电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。EA引脚为使能端,接电源VCC置1,P0口因内部没有上拉电阻,故外接10K的上拉排阻。3.2 GSM通讯模块设计目前国内使用比较广泛的GSM模块有西门子的TC35/ TC35i;Wavecom 的GSM(Mo3、Mo2);中兴的ZXGM18、ZXGM28;华为的GTM900 ;SIMCOM公司的SIM900等,而这些模块的功能用法差别并不是很大。本系统采用华为GTM900C无线模块。GTM900C是一款双频GSM/GPRS无线模块,并且方便开发以降低产品成本。其结构图如图3-2所示:GTM900C电路中 GTM900_TXD/RXD 串口用于与PC或MCU连接,实现命令调度及控制通信,GTM900_CARD用来插入带有 GSM 网络的 SIM 卡。LED1红色指示灯用于指示电源状态,LED2绿色指示灯用于指示联网状态,开始联网时闪烁频率比较快,一旦连接到网络后,闪烁速度变慢。MCU 控制 TC35 开发板收发短信,有两种方式。(1)通过串口线连接。 MCU 开发板的串口经过RS232 交叉串口线与GTM900C模块的九针串口连接。(2)通过杜邦线连接。TC35 开发板的 RXD、 TXD 、GND接口通过杜邦线分别与 MCU 开发板的 TXD 、RXD 、GND 口连接。在本系统中,为了设计方便,直接采用了第一种接线方式。3.3温度检测模块设计DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与纯铜的热敏电阻相比,它能够直接读出被测温度并且根据实际要求通过简单的编程实现912位的数字值读数方式。可以分别在93.75ms和750ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写。温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大改进,给用户带来了更方便的使用和更令人满意的效果。以下对DS18B20的主要特点做简单介绍:(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20的双向通讯;(2)在使用中无需任何外围元件;(3)可用数据线供电,电压范围:+3.0+5.5V;(4)测温范围:-55125°C;国有测温分辨率为0.5°C;(5)通过编程可实现912位的数字读数方式。(6)用户可自设定非易失性的报警上下限值。(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。(8)负压特性:电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。具体内部原理图和外形图如图3-3所示:图3-33.4高度检测模块设计US-100超声波测距模块可实现2cm4.5m的非接触测距功能,拥有2.45.5V的宽电压输入范围,静态功耗低于2mA,自带温度传感器对测距结果进行校正,同时具有GPIO,串口等多种通信方式,内带看门狗,工作稳定可靠。1.主要技术参数电气参数US-100超声波测距模块工作电压DC 2.4V5.5V静态电流2mA工作温度-20+70度输出方式电平或UART(跳线帽选择)感应角度小于15度探测距离2cm-450cm探测精度0.3cm+1%UART模式下串口配置波特率9600,起始位1位,停止位1位,数据位8位,无奇偶校验,无流控制。2.本模块实物图及尺寸如图3-4和图3-5所示图3-4 US-100正面图 图3-5 US-100背面图3.接口说明本模块共有两个接口,即模式选择跳线和5 Pin接口。 模式选择跳线接口如图3-6所示。模式选择跳线的间距为2.54mm,当插上跳线帽时为UART(串口)模式,拔掉时为电平触发模式。图3-6从左到右依次编号1,2,3,4,5。它们的定义如下:1号Pin:接VCC电源(供电范围2.4V5.5V)。2号Pin:当为UART模式时,接外部电路UART的TX端;当为电平触发模式时,接外部电路的Trig端。3号Pin:当为UART模式时,接外部电路UART的RX端;当为电平触发模式时,接外部电路的Echo端。4号Pin:接外部电路的地。5号Pin:接外部电路的地。4.串口触发测温工作原理在模块上电前,首先插上模式选择跳线上的跳线帽,使模块处于串口触发模式。串口触发测温的时序如图7.1所示:在此模式下只需要在Trig/TX管脚输入0X50(波特率9600),系统便启动温度传感器对当前温度进行测量,然后将温度值通过Echo/RX管脚输出。测量完成温度后,本模块会返回一个字节的温度值(TData), 实际的温度值为TData-45。例如通过TX发送完0X50后,在RX端收到0X45,则此时的温度值为 69(0X45的10进制值)-45 = 24度。图3-6 串口触发测温时序图3.5重力检测模块设计HX711是一款专为高精度称重传感器而设计的24位A/D 转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。该芯片与后端MCU 芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A 或通道B,与其内部的低噪声可编程放大器相连。通道A 的可编程增益为128 或64,对应的满额度差分输入信号幅值分别为±20mV 或±40mV 。通道B 则为固定的64 增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D 转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接器件。上电自动复位功能简化了开机的初始化过程。高精度高增益24位A/D芯片HX711具有以下特点:两路可选择差分输入;片内低噪声可编程放大器,可选增益为64 和128; 片内稳压电路可直接向外部传感器和芯片内A/D 转换器提供电源;片内时钟振荡器无需任何外接器件,必要时也可使用外接晶振或时钟;上电自动复位电路;简单的数字控制和串口通讯:所有控制由管脚输入,芯片内寄存器无需编程;可选择10Hz 或80Hz 的输出数据速率;同步抑制50Hz 和60Hz 的电源干扰;耗电量(含稳压电源电路):典型工作电流:<.7mA,断电电流:< 1A 工作电压范围:2.6 5.5V;HX711管脚说明如图3-7所示:图3-7 管脚图HX711管脚描述如下表所示3.6显示模块设计LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表所示编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极4、软件设计与实现在硬件电路确定之后,需要通过软件编程来实现系统的功能,而软件是整个智能家居系统的灵魂。4.1 软件设计流程分析本系统采用结构化模块程序设计,所谓“模块”,实质上就是具有一定功能、相对独立的程序段。在编程过程中首先将所要完成的各个功能分别按模块编写和调试,所有模块调试成功以后,再将各个模块连接整合在一起形成系统。模块化程序设计的主要特点是:单个模块比一个完整的程序更容易编写、查错和测试;模块化程序可以实现共享,一个模块化程序可被多个任务在不同的条件下调用;把输入/输出封装起来,可以使程序减少不必要的修改;这样的设计有利于程序代码的优化和共享,而且便于设计、调试和维护,可以增强系统的可靠性。主控制器程序流程图如图4-1所示:图4-1 软件设计流程本系统软件设计的核心部分是GSM短信收发,其他次要部分还有传感器程序设计、报警程序设计等。4.2 GSM短消息程序设计4.2.1 短消息收发模式目前,短消息收发常用基于AT指令的Text和基于AT指令的 PDU模式。Text 模式只支持传送英文及数字信息,不能收发中文短信,但收发短信代码简单,实现起来比较容易,故在本系统中为了易于操作,控制阶段将采用Text 模式。Text模式在信息传送时通过串口传送的是十六进制ASCII码,其USART通讯默认使用9600比特率,8位数据信息,无奇偶校验,有一位开始位和一位结束位。与短消息有关的AT 指令表如表4.1 所示:指令作用AT+CNMA新信息确认应答AT+CPMS优先信息存储,这个命令定义用来读写信息的存储区域AT+CMGF优先信息格式,执行格式有 TEXT 方式和 PDU 方式AT+CSAS保存设置,保存+CSAS 和+CSMP 的参数AT+CRES恢复设置AT+CSDH显示文本方式的参数AT+CNMI新信息指示,这个命令选择如何从网络上接收短信息AT+CMGR读短信,信息从+CPMS 命令设定的存储器读取。AT+CMGL列出存储的信息AT+CMGS发送信息AT+CMGW写短信息并存储AT+CMSS从存储器中发送信息AT+CSMP设置文本模式的参数AT+CMGD删除短信息AT+CSCA短信服务中心地址AT+WMSC信息状态(是否读过、是否发送等等)修正AT+WMGO信息覆盖写入AT+WUSS不改变 SMS 状态,在执行+CMGR或+CMGL后仍保持 UNREAD表4.1 与短消息有关的AT 指令PDU模式不仅支持中文短信,也能发送数字和英文信息,但比较复杂。为了显示直观易懂,本系统的报警阶段将采用PDU模式。PDU模式收发短信有3 种编码方式:7-bit、8-bit 和 UCS2。7-bit 编码用于发送普通的 ASCII 字符,8-bit 编码通常用于发送数据消息,UCS2 编码用于发送 Unicode 字符。PDU相当于一个数据包,由0-9,A-F组成,他们是8位字节的十六进制数或BCD码的十进制数。发送和接收的PDU串结构是不同的。4.2.2 接收短消息程序设计系统接受短消息其实就是MCU读取GSM模块中SIM卡内新短消息的过程。当从SIM卡内读取短消息时,首先需要设定短信收发模式,其次通过查询和读取指令获取短消息内容,然后将收到的短消息与预先设置好的控制命令比对,从而做出相应的控制操作。程序流程图如图4-2所示:主要程序指令有:USART_Puts(“AT+CMGF=1r”); /选择以TEXT模式收信息USART_Puts(“AT+CMGL=“REC UNREAD”r”); /查询是否有未读信息USART_Puts(“AT+CMGR=nr”); /读取信息图4-2 接收短信流程图4.2.3 发送短消息程序设计在本系统中当发生紧急情况时,需要主控制器通过GSM模块给用户发送发送报警短信。当系统中的任一传感器检测到异常时,控制系统会按照预先设置好的短消息内容发送给用户。在短消息发送的实现过程中,主要的工作是设置好短消息的发送模式,其次是把预先想好的短信内容加载到要发送的数组中,最后就是把短信发送到设置好的用户号码中。其程序流程图4-3如图所示:图4-3 发送短信流程图主要程序指令有:USART_Puts( “AT+CMGF=0r”); /选择以PDU模式发信息USART_Puts(“AT+CMGS=”+86XXXXXXXXXXX”r”); /输入用户手机号USART_Puts(message),USART_Puts(“0xlar”); /发送短信内容5.系统调试与实现5.1 硬件制作与调试硬件的制作是很重要的,它直接关系到整个设计的成败。由于采用的是手工制版,在设计PCB过程中,使用的是单程走线,这就不免出现少量的飞线。在本次系统制作过程中,为了制作简便,使用了市场上现有的GSM模块GTM900C。在与主控板连接时,需预先将其与PC连接进行测试,过程为:图5-1 GSM模块测试结果图将GTM900C模块通过RS232转USB线与计算机连接,进行调试。先启动GSM串口调试助手程序,选择好端口,将波特率设为9600,无奇偶效验位。然后打开串口,依次点选GSM调试专用栏的生产厂商、设备类型、设备初始化和拨号测试等,如图5-1所示结果显示GTM900C模块工作正常。5.2 软件编程与调试软件是整个系统的灵魂,本次软件设计采用Keil Vision4开发软件。Keil Vision4编程示意图如图5-2所示:图5-2 编程示意图5.3实物验证:1.启动系统后,GSM模块打电话给预设的手机提示其开始正常工作,结果如图5-3所示。图5-3 正常工作结果图2.当温度超过预设的值时,手机将接受到如图5-4所示短信(短信内容以设置)图5-4 3.当高度超过预设值时,手机将接收到如图5-5所示短信(短息内容可以设置)图5-54.当重力超过预设值时,手机将接收到如图5-6所示短信(短信内容可以设置)图5-56.总结与展望经过自己的不懈努力,本文设计与实现了一个针对普通家庭的垃圾智能管理系统。本系统将单片机、GSM网络和多传感器有机结合,实现了远程手机接收,具体为:(1) 垃圾桶已满用过电脑提示用户;(2)对于用户的家庭卫生起到很好的保护作用。 虽然本次研究和设计基本实现了系统的各项功能,但是系统还有许多需要完善的地方。首先,为了提高系统对险情的检测灵敏性和可靠性,可以考虑利用无线传感网络技术。其次,本次系统远程控制所用的短消息属于第一代无线数据服务技术,在内容、数据输送等方面存在限制,有时存在短信延迟等现象,可以考虑使用GTM900C自带的GPRS功能,或者利用现在已经大力发展的3G网络及正在不断发展的4G 网络,以实现数据的传输。最后,本系统的美观还有待提升。7.致谢本研究及学位论文是在我的导师*老师的亲切关怀和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。*老师不仅在学业上给我以精心指导,同时还在思想、生活上给我以无微不至的关怀,在此谨向*老师致以诚挚的谢意和崇高的敬意。我还要感谢在一起愉快的度过毕业论文小组的同学们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!最后,再次对关心、帮助我的老师和同学表示衷心地感谢!参考文献1 MeHome(TM)全移动智能家居系统J. 数字社区&智能家居, 2007, (08)2 智能家居系统分类尼科智能家居系统J. 电脑知识与技术(学术交流), 2006, (06)3 李春丽. 智能家居产品体系及核心技术J. 建设科技, 2009, (09)4 陈鹏. 完整意义的智能家居系统LonWorks智能家居系统J. 电脑知识与技术(学术交流), 2006, (Z1)5 张鼎盛. 看看专业服务商眼中的智能家居系统J. 建材与装修情报, 2007, (04)6 瑞典PPD智能家居系统E-PowerSecurityJ. IB智能建筑与城市信息, 2004, (10)7 邓增绍. 智能家居DIY方案J. 数字社区&智能家居, 2008, (09)8 陈鹏. Nico智能家居系统特点浅析J. 数字社区&智能家居, 2008, (12) 9 智能化生活“触手可及”J. 硅谷, 2010, (17) 10 何朝. 基于ZigBee技术的智能家居数据采集控制系统D. 太原理工大学, 2011, (08) . 11 杨琛. 智能家居物联网监控终端的研究与设计D. 太原理工大学, 2011, (08) . 附录A:传感器采集显示控制源程序#include<reg52.h> /头文件#include<intrins.h>#include<stdlib.h>#include<stdio.h>#define uchar unsigned char/数据类型的宏定义#define uint unsigned int#define ulong unsigned longsbit lcdrs=P22;sbit lcdrw=P23;sbit lcden=P24; /1602三个控制引脚sbit ds=P10; /DS18B20信号引脚sbit TX=P31; /超声波发射引脚sbit RX=P32; /超声波接收引脚sbit hx711_dout=P13; /AD模块数据IO口sbit hx711_sck=P14; /AD模块时钟IO口 ,以上五个接口可以根据自己的需求修改 ,/如果你需要加四个红外传感器,也可以在这里用sbit定义 比如sbit hongwai1=P11sbit LED1=P25;/温度超标指示灯 为了节省IO口资源,与GSM-MCU相连的信号线从这里相对应引出sbit LED2=P26; /高度超标指示灯sbit LED3=P27; /重量超标指示灯uint temp;/定义整形的温度数据float f_temp;/定义浮点型的温度数据uint time=0; /存放定时器的值unsigned long S=0; /距离值int weight; /重量 以上这些是变量,一般不需要改动unsigned char code table1='0','1','2','3','4','5','6','7','8','9'/查表显示数值 用于1602显示的数组void delay(uint z)/延时函数uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-); uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,大致延时长度如下 T=tx2+5 uS void DelayUs2x(unsigned char t) while(-t); 1602写指令函数void write_com(uchar com)lcdrs=0;lcden=0;lcdrw=0;P0=com;delay(1);lcden=1;delay(1);lcden=0;delay(1); 1602写数据函数void write_date(uchar date)lcdrs=1;lcden=0;lcdrw=0;P0=date;delay(1);lcden=1;delay(1);lcden=0;delay(1); DS18B20初始化void dsreset()uint i;ds=0;i=103;while(i>0)i-;/延时750USds=1;i=4;while(i>0)i-;/延时等待 DS18B20读一位数据函数bit tempreadbit() uint i;bit dat;ds=0;i+;/i+延时作用ds=1;i+;i+;dat=ds;i=8;while(i>0)i-;return (dat); DS18B20读一个字节函数uchar tempread() uchar i,j,dat;dat=0;for(i=1;i<=8;i+)j=tempreadbit();dat=(j<<7)|(dat>>1);return (dat); DS18B20向DS18B20写一个字节函数void tempwritebyte(uchar dat) uint i;uchar j;bit testb;for(j=1;j<=8;j+)testb=dat&0x01;dat=dat>>1;if(testb) /写1ds=0;i+;i+;/延时15USds=1;i=8;while(i>0)i-;else /写0ds=0;i=8;while(i>0)i-;ds=1;i+;i+; DS18B20开始获取温度并转换void tempchange()dsreset();/初始化 delay(1);tempwritebyte(0xcc); /跳过ROM编码直接向18B20发温度转换命令tempwritebyte(0x44); /启动18B20进入温度转换 DS18B20读取寄存器中储存的温度数据uint get_temp() uchar a,b;dsreset(); /初始化delay(1);tempwritebyte(0xcc); /跳过ROM编码直接向18B20发温度转换命令tempwritebyte(0xbe); /读内部RAM中的9字节温度数据a=tempread();/读低8位b=tempread();/读高8位 把a和b两个字节组合成一个字节temp=b;temp<<=8; temp=temp|a;f_temp=temp*0.0625; /温度寄存器中的12位,分辨率为0.0625temp=f_temp*10+0.5; /乘以10表示小数点后面只取1位,加0.5是四舍五入if(temp>200) /这里其实是20,以此类推,这里就是你根据系统指标进行修改设置的地方,记住,温度设置值要乘于10 LED1=0;else LED1=1;f_temp=f_temp+0.05;/这里无需修改return temp; /temp是整形 温度数据发送给1602void display(uchar date)write_date(date); 温度显示void dis_temp(uint t)uchar j;write_com(0x80+0x40+9); /显示位置在第二行第九个格子display('T');display(' '); j=t/100; /温度的十位display(table1j);j=t%100/10; /温度的个位display(table1j);display('.'); /小数点j=t%100%10; /小数点后第一位display(table1j); 高度检测及显示void hightest() uint i; TX=1; /触发信号是高电平脉冲,宽度大于10us DelayUs2x(10); TX=0; while(!RX); /等待高电平 TR0=1; /检测到高电平时打开定时器0,开始计时 while(RX); /等待低电平 TR0=0; /检测到低电平时关闭定时器0,停止计时 time=TH0*256+TL0; /取出定时器值高8位和低8位合并 S=time/58; /为什么除以58等于厘米,Y米=(X秒*340/2, X秒=( 2*Y米)/340 -> X秒=0.0058*Y米 -> 厘米=微秒/58,这里推算出来了,你不需要修改 if(S<10) /如果有红外的话你只需要在这里写入if(S<10)&&(hongwai1=0)&&(hongwai2=0)&&(hongwai3=0)&&(hongwai4=0)即可 LED2=0;else LED2=1; TH0=0; TL0=0; /每算完一次要清除定时器0寄存器中的值 write_com(0x80+0x40); /显示位置设置为第二行最开始的位置display('H');display(' '); i