基于ZigBee的温度测量网络软件设计_第1页
基于ZigBee的温度测量网络软件设计_第2页
基于ZigBee的温度测量网络软件设计_第3页
基于ZigBee的温度测量网络软件设计_第4页
基于ZigBee的温度测量网络软件设计_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

本科生毕业设计(论文)基于ZigBee的温度测量网络软件设计SoftwareDesignofTemperatureMeasurementNetworkBasedonZigBee总计:30页表格:3个插图:30幅本科毕业设计(论文)学院(系):电子与电气工程系专业:电子信息工程基于Zigbee的温度测量网络软件设计[摘要]本设计是基于ZigBee技术的温度测量网络的软件设计,实现把采集到的温度数据以无线的方式发射给接收装置。设计采用Mega16单片机作为控制器,利用数字式DS1820作为温度传感器,同时采用TM12864对采集到的数据进行显示,xbee模块作为无线的接收与发射模块。数字式温度传感器DS1820和单片机以单总线方式连接,使用方便。Mega16按照DS1820的通信协议,便可得到DS1820转换后的温度数据。TM12864为128*64的液晶显示模块,Mega16按其操作指令对其进行读写便可显示所需数据。单片机与xbee模块以UART方式传输数据,使用方便。用C语言实现对Mega16的编程,从而实现对温度的采集、显示与传输。[关键词]ZigBee;xbee;温度传感器;无线传输SoftwareDesignofTemperatureMeasurementNetworkBasedonZigbeeAbstract:ThetopicissoftwaredesignoftemperaturemeasurementnetworkbasedonZigBee.ItusesthexbeemoduleofMaxStream.Thisdesignwantsthesystemtotransmitthedataoftemperaturetothereceiver.ThedesignusesMega16asthecontrollertocontroltheDS1820tocapturethedataoftemperature,drivetheTM12864todisplay.DigitaltemperaturesensorDS1820communicatewithMega16viasinglebus.Weusethemoduleofxbeeaswirelessreceiverandtransmitter.Mega16cangetthedataoftemperaturefromDS1820accordingtothecommunicationprotocolofDS1820.TM12864is128*64latticsdisplaydevice.Mega16controlTM12864todisplaythedatabyusingtheinstructions.Mega16cancommunicatewiththexbeemoduleviaUART.Itisconveniencetouse.Programmingformega16intheenvironmentofClanguageachievethedataacquisition,displayandreception.KeyWords:ZigBee;xbee;temperaturesensor;wirelesstransmission目录1引言 11.1选题背景及意义 11.2本设计的主要内容 12系统方案设计 12.1系统原理 12.2发送模块框图 22.3接收模块框图 23发送模块的软件设计 23.1温度采集软件设计 23.1.1初始化流程 33.1.2ROM操作命令 43.1.3存储器操作命令 43.1.4写命令流程 53.1.5读数据流程 63.1.6温度数据的处理 73.2显示控制软件设计 83.2.1TM12864指令 93.2.2指令的数据格式与功能 93.2.3写时序及相关操作流程 103.2.4读时序及相关流程 113.2.5显示一个字形的控制流程 133.3数据发送软件设计 143.3.1xbee模快 143.3.2单片机与xbee模块的通信 144接收模块的软件设计 154.1数据的接收 164.2数据的显示 175系统仿真及调试 175.1xbee模块的参数设置 175.2仿真与调试 20结束语 22参考文献 23附录 24致谢 301引言1.1选题背景及意义近年来,各种无线技术快速发展,它们在配置、安装、修改和扩展等方面有很多优势,同时无线网络的成本要低于有线网络,给人们的生产生活带来了很多方便。其中ZigBee技术就是新兴的无线技术之一,它是IEEE802.15工作组的标准之一[1],采用直接序列扩频(DSS)技术。工作频率为868MHz、915MHz或者2.4G,频率的无线技术,用于个人局域网和对等网络是一种适用于固定、便携或移动设备使用的低复杂度、低成本、低功耗、低速率的短距离双向无线通信协议[2]。ZigBee技术在农业,汽车,家居得等方面都有很大的发展优势与空间,其耗电量低,可扩节点多很适合用于温度湿度等的检测。本课题的设计正是基于ZigBee技术的无线温湿度测量网络,可将采集传感器获得的温度数据显示并且以传送出去。同时由接收模块接收发出的数据。1.2本设计的主要内容本课题所设计的系统以AVR单片机作为控制器,以ICCV7forAVR为系统程序开发平台,用C语言[3]进行程序设计,以Proteus作为仿真软件。系统主要有发射部分和接收部分两部分组成。发射部分主要有温度采集、显示、传输三小部分组成,接收部分主要有接收数据与显示两部分。这样系统经过xbee无线传输模块把采集到的数据通过自动组网方式传输到接收模块,接收模块经过AVR数据处理,把接收到的数据显示到液晶模块。2系统方案设计2.1系统原理温度的测控采用以AVR单片机与温度传感器的单总线连接方式,温度传感器DS1820是智能温度传感器,它的输入/输出采用数字量,以单总线方式,接收控制器发送的命令,根据DS1820内部的协议进行相应的处理,将转换的温度数值以串口形式发送给控制器。因此让控制器机按照DS1820的通信协议用一个I/O口模拟DS1820的时序[4],发送命令(初始化命令、ROM命令、功能命令)给DS1820,并读取温度值,单片机进行相应的数值处理[5],控制字符型液晶模块显示室内的温度。由于要求系统能够发送数据还能够接收发送来的数据,系统总体由发送模块与接收模块两部分组成。这样系统就完成了采用ZigBee技术无线传输模块xbee把采集到的数据通过自动组网方式传输到接收模块,接收模块经过单片机数据处理,把接收到的数据显示到液晶模块。2.2发送模块框图发送模块有AVR单片机控制温度传感器,把得到的数据经过处理后,一方面控制显示器显示出来,另外控制采用ZigBee技术的无线模块发送出去,从而实现温度数据的发送。发送模块的框图设计如图1所示。液晶显示单片机液晶显示单片机无线模块温度传感器图1发送模块框图设计2.3接收模块框图AVR单片机把通过xbee模块接收到的数据,通过数据处理后控制液晶显示模块将数据显示出来设计框图如图2所示。液晶模块单片机液晶模块单片机无线模块图2接收模块框图3发送模块的软件设计本部分要完成温度的采集,把得到的数据显示出来同时将数据发射出去,其整体流程如图3所示,当开始后首先控制温度的采集,然后将温度数据显示出来,并发送出去,按此操作顺序循环下去。3.1温度采集软件设计温度传感器采用了DS1820,信息通过单线接口进入DS1820,因此从中央处理器[7]到DS1820仅需一条线(和地)读写和温度转换所需的电源可从数据线本身获得,而不需要外接电源,使用比较方便。由于DS1820与单片机的连接只有一条线,没有专门的数据端口与控制端口,单片机需要按照访问单总线接口DS1820的协议,才能获得温度数据。访问时序如下:(1)初始化(2)对ROM操作命令(3)存储器操作命令(4)处理数据本设计中温度传感器DS1820仅一个且采用外电源供电。单片机对DS1820的控制操作如下表1示,把表1转换为温度采集的整体流程如图4所示。采集温度数据显示和发送采集温度数据显示和发送开始图3发射模块的整体流程3.1.1初始化流程单总线上的所有处理均从初始化序列开始,初始化序列包括主机发出一系列复位脉冲,接着从属器件发出存在脉冲。(其脉冲如图5)一旦主机发现从器件存在它便发出ROM命令。表1温度采集指令主机方式数据(LSB在先)注释TXCCHSkipROM(跳过命令)TX44HConvertT(温度变换)命令RX(1个数据字节)读“忙”标志3次。主机一个接一个连续读一个字节(或位)直至数据为FFH(全部为1)为止。TXReset(复位)复位脉冲RXPresence(存在)存在脉冲TXCCHSkipROM(跳过ROM)命令TXBEHReadScratchpad(读暂存存储器)命令RX(9个数据字节)读整个暂存存储器TXReset(复位)复位脉冲XRresence(存在)存在脉冲,操作完成开始初始化18b20跳过读序列号的操作(skip命令)开始初始化18b20跳过读序列号的操作(skip命令)启动温度转换(约定代码44h)转换等待(至少2s)初始化跳过读序列发出读温度寄存器命令接收数据数据处理结束图4温度采集流程图等待15~60us等待15~60us主机初始化低电平480us~960us主机初始化低电平480us~960us18b20回应60~240us图5DS1820复位与存在脉冲主机先发出一个在480us到960us的低电平,然后等待15us到60us若主机接收到60us到240us的低电平,说明从器件应答存在,如图5所示。单片机的PB7端口与DS1820的DQ端口相连接,要实现始化需PB7口输出如图5的脉冲。初始化的流程如图6所示,当给出初始化脉冲后,等待60至260us后,如果收到高电平说明初始化成功,否则失败[8],程序见附录。3.1.2ROM操作命令所有ROM操作命令均为八位长。这些命令有:ReadRom(读ROM),MatchRom,SkipRom等五种共有ROM操作命令,由于此模块仅连接一个DS1820,可以不使用这些命令,不再详述。3.1.3存储器操作命令存储器的操作命令如表2所示。由于温度传感器仅有一个且采用外部电源,本设计可采用的命令有以下这些[10]:(1)Skip(“跳过”ROM)[CCH]此命令允许不提供64位ROM编码而访问存储器来节省时间。但如果存在多个从器件,当skip命令发出之后,那么由于多个从器件同时发出数据,会在总线上发生冲突(产生线与)。(2)ConvertT[44H]温度变换命令、启动温度变换,温度转换大概需要2秒。(3)ReadScratchpad[BEH]读暂存存储器。读开始于字节零,并继续经过暂存寄存器,直至第九个字节被读出为止。如果有的存储器不读,那么主机可随时发出复位命令以中止读操作。(4)写暂存存储器[4EH],写字节至暂存存储器地址2和3处(TL和TH温度触发器)。(5)复制暂存存储器[43H],把暂存存储器复制入非易失性存储器(仅地址2和地址3)。PB7作输入口开始PB7作输入口开始延迟60~240us端口PB7作输出口延迟60~240us端口PB7作输出口YPB7高电平输出YPB7高电平输出DINB7=1?DINB7=1?失败PB7低电平输出480u失败PB7低电平输出480us~960usNN初始化成功PB7输出高电平15us~60us初始化成功PB7输出高电平15us~60us图6DS1820初始化流程图3.1.4写命令流程要控制温度传感器DS1820获取的温度数据,就需要向DS1820写入一系列的命令,写时序如图7所示,当主机把数据线从高电平拉至低电平时,产生写时间片。写时间片有两种类型:写1时间片和写0时间片。所有的时间片必须有60ms持续期,在个写周期之间须有1us的回复时间。在I/O线由高电平拉至低电平之后,DS1820在15us至60us的时间窗口对I/O线采样,如果线为高电平,写1就发生,为低电平写0就发生,写时序的流程如图8,在写流程中可用一个for循环来判断是否共有八次,从而完成一个命令代码字节的发送,在每发送一位后都要让PB7拉高单总线,为写下一位做好准备,程序见附录。表2存储器操作命令指令说明约定代码发出约定代码后单总线的操作温度变换命令温度变换启动温度变换44H读温度“忙”状态存储器命令读暂存存储器从暂存存储器读字节BEH(读9字节数据)写暂存存储器写字节至暂存存储器地址2和3处(TH和TL温度触发器)4EH(写数据至地址2和地址3的2个字节)复制暂存存储器把暂存存储器复制入非易失性存储器(仅地址2和地址3)43H(读复制状态)重新调出E2把储存在非易失性存储器内的数值重新调入暂存存储器(温度触发器)E3H(读温度“忙”状态)读电源发DS1820电源方式的信号至主机B4H(读电源状态)15us15us15us15us30usDs1820samples15us15usDs1820samples30usMasterwrite0slotMasterwtrite1slot>1u图7单片机向DS1820写命令时序3.1.5读数据流程当温度转换好后要把数据从DS1820的存储器中读出来,读时序如9所示。从DS1820读数据时主机产生读时间片,当主机把数据线从逻辑高电平拉至低电平时,产生读时间片。数据线必须把低逻辑电平保持至少1us,来自DS1820的数据在读时间片下降沿之后15us有效。因此,从读时间片开始主机一共必须保持至少15us的低电平。读时间片结束后,I/O线有外部的上拉电阻拉至高电平。所有读时间片最短维持周期为60us,每个读时间片之间至少需1us的回复时间,读时序的流程如图10所示,读流程中PB7端口将总线拉低开始数据的读取,等待15us后,读总线上的电平,在判断为高电平后将由dat|=0x01将dat的最低位置1而不改变其它位,在每读取一位后,将dat中的数据左移一位,同时在每读取一位后应留有至少1us的恢复时间。程序见附录。PB7端口输出0要写的命令位为1?PB7端口输出0要写的命令位为1?PB7端口输出高电平PB7端口输出低电平延时15-60ms命令左移一位发送了8位写结束YNYNPB7输出1图8单片机向DS1820写命令流程图图9单片机读DS1820时序3.1.6温度数据的处理由于温度数据以16位、二进制补码的读数形式提供,在读取温度数据后,要对其进行处理才能进一步使用,这里要读出两个字节a与b,第一个字节a的低四位是温度的小数位信息,高四位是温度整数信息的低四位。第二个读出的字节b高五位,位全1的话表示是负温度,全为0标是正温度。b的低三位是温度数位。这样b的低三位与a的高四位组成了温度的整数位[9]。温度数据处理程序流程如图11所示,流程图中的fsbz为负数标志位,其为1时表示温度值为负,为0时表示温度值为正。至此完成了温度采集的整体过程,程序见附录。NNNNYYdat|=0x01延时至少1usPB7端口输出低电平延时至少15us将dat中数据左移一位判断单总线是否为高电平开始是否读入8位读结束图10单片机读DS1820时序流程b[7:3]都为1b左移四位,a右移四位后b|=a,fsbz=0a取反,b取反,fsbz=1b[7:3]都为1b左移四位,a右移四位后b|=a,fsbz=0a取反,b取反,fsbz=1b左移四位,a右移四位后b|=a,b-=1返回bNY读出a与b图11温度数据处理流程图3.2显示控制软件设计当采集到温度数据后要把温度显示出来,显示器件采用TM12864,TM12864是128*64液晶阵列,对TM12864的控制是通过指令加数据的方式进行的,这些控制信号包括读/写(R/W)信号,数据/指令(RS)信号,数据总线(DB0-DB7)组成[11]。3.2.1TM12864指令TM12864的指令可分为三类:(1)设置内部RAM地址的指令(2)向内部RAM写入或读出的指令(3)其它指令在普通的使用中,第二类指令使用的较为频繁。由于在读取或写入数据后,RAM的Y地址会自动的加一,编程代码将会缩短。但是指令在执行指令期间,它不能接收另外的指令,因此在每次发送指令前应确定其闲忙状态,以确保指令可被执行。3.2.2指令的数据格式与功能指令的数据格式如下表3所示:表3指令数据格式编码格式显示ON/OFF000011111D显示起始行0011显示起始行(0…63)设置X地址0010111X:0…7设置Y地址0001Y地址(0...63)读状态10Busy0On/OffRest0000写显示数据01显示数据读显示数据11显示数据下面对其指令详细介绍如下:(1)显示开/关当D为1是LCD将显示数据,D为0时LCD不显示数据,LCD不显示数据并不是说RAM中的数据消失。因此可有D来控制显示的开和关。(2)显示起始行设置在显示开始行寄存器中的Z地址所对应RAM地址中的数据会被显示在屏幕的顶端,此命令可用于动态显示。(3)设置叶(X地址)当要显示的RAM数据的地址设置在X地址寄存器后,写或读数据都在该设定叶中进行。(4)设置Y地址当把要操作的RAM的Y地址写入Y地址计数器后,对RAM的读写操作Y地址计数器会自动加1。(5)读状态指令当在读状态中如果发现Busy(DB7)为1,说明LCD系统处于忙状态,此时不能接收其它指令,因此在每一次发送指令前应判断是否处于空闲状态。如果ON/OFF位(DB5)为1,说明处于显示开状态,为0时关状态。Reset位(DB4)为1表面系统正被初始化,此时除了读状态指令外其它指令不可被执行,为0表示初始化已完成。(6)写显示数据指令将要显示的字符数据写入指定的RAM地址中。3.2.3写时序及相关操作流程知道了命令格式及其用途后,就可以根据写时序向TM12864发出相关命令。单片机的写时序如图12所示,可见在E的下降沿DB0_7被读入。TdsuR/WWWTdsuR/WWWEDB0-7TwhTwlCS1B,CS2BCS3RStc图12单片机向TM12864写时序前四个指令的R/W和D/I相同都位0,对这四个指令可编写一个写指令函数以下为实现以上命令的调用,其流程如图13所示:在写命令流程中的,检测TM12864是为了了解是否忙,是的话要一直等待直到空闲为止,最后一步是为了产生E的下降沿,程序见附录。设写命令函数为write_inst(),那么可用一下方式调用:(1)如果要输出显示开/关指令,则调用write_inst(0x3e+i),其中i==1时为开i==0时为关。(2)设置起始行可调用wrist_inst(0xc0+x),x为起始显示的RAM地址。(3)设置RAM的X地址write_inst(0xb8+x)。X地址即叶地址,八行RAM为一叶。(4)RAM的Y地址write_inst(0x40+Y),当叶地址设定后每当一次读写后Y地址自动加一。检测TM12864是否忙,忙则等待R/W=0,RS=0,写命令检测TM12864是否忙,忙则等待R/W=0,RS=0,写命令PA输出相应命令E=1延时E=0开始图13单片机向TM1864写命令时序图RAM地址中的X与Y的结构如图14所示:图14显示RAM地址结构对于写显示数据的流程只要将写指令流程中的RS=0改为RS=1既可。3.2.4读时序及相关流程对TM12864的操作有时要读出其内部数据,了解它的工作状态,其读时序如图15所示:tDUSR/WWWEtDUSR/WWWEDB0-7TwhTwlCS1B,CS2BCS3RStc图15单片机向TM12864读数据时序由读时序可得出读显示数据的流程如图16所示:图16单片机向TM12864读数据时序流程对于读显示数据在指定了地址后要有一个假的读操作,以使数据锁存在输出缓冲器中。在每一次对TM12864操作都要判断其是否处于忙状态,可用读状态解决,读出的第七位为1表示忙,为0表示空闲,程序见附录。这一判断过程可用流程图17表示:图17单片机读TM12864状态的流程图有了写指令、读显示数据、读状态,就能够指定显示的内容和在屏幕何处显示,同时还可知道TM12864的工作状态,组成LCD的显示控制函数,程序见附录。3.2.5显示一个字形的控制流程要显示字符首先要有一个字模,字符以8*16的形式显示,以下为实现显示字符的流程如图18所示:X地址<64?选中左屏X地址<64?选中左屏选中右屏设置行地址设置写地址写入要显示字符的字模开始写完两页结束NYNY图18单片机控制TM12864显示一个字符的流程图由于是以8*16形式显示,因此要有两页来表示,每个字模有16个字节组成,程序见附录。3.3数据发送软件设计数据的无线收发采用xbee模块,xbee是美国Maxstream公司基于ZigBee技术的一个无线传输模块,该模块使用起来非常简单,只需要简单的把数据输入到一个xbee模块,数据就能自动地被发送到无线连接的另一端,同时也支持AT命令进行高级配置,此模块通过异步串行端口与其它设备连接,通过其串行端口,模块可与任何兼容的UART逻辑和电压的设备通信[11]。3.3.1xbee模块xbee内部工作原理图如19所示图19Xbee模块内部数据无线链路上总是半双工式通信,用一条天线作发射或接收,但两者并非在同一时间工作。不过,xbee模块可以通过分时的方式达到UART端的同时发射和接收(全双工模式)。数据由DIN端口进入串行接收缓冲,接着进入RFTX缓冲有transmitter经天线发射出去。3.3.2单片机与向Xbee模块的通信要让xbee模块把数据发送出去首先要做的就是把数据送入xbee模块,数据通过DIN端口以异步的串行信号进入模块UART。节下来xbee模块就自动把数据发送出去,没有数据传输时DIN信号保持高电平。下图20描绘了流经模块的数据位操作模式,通过UART发送一个UART数据包0x1F1111100011111000SignalVoltageStartbitStopbittimevoltage图20数据位操作模式xbee模块留置少量缓冲以收集收到的串行和RF数据,串行接收缓冲收集流入的串行字符,并保留直到它们被处理为止。串行数据通过RF进入模块时,数据将被保存在串行接收缓冲器中直到它被处理,在一定条件下可能不能立即处理大量数据,这时需要用CTS流控避免串行接收缓冲溢出。如果使用CTS流控制,当串行缓冲是17字节时,模块取消CTS(拉高),让主机停止发送数据。串行缓冲有34个字节数据空间时,将重设CTS。由于单片机与xbee模块的通过UART方式进行,单片机与xbee模块应有相同的baud率并且数据格式也应一样,这也是数据发送的关键处。流程如图22所示。4接收模块的软件设计接收模块有xbee,单片机,液晶显示三部分组成。其大部分与发送模块相同,惟一不同的是xbee模块从发送变为接收,接收数据后控制TM12864显示出来其整体流程如图21所示。接收数据显示数据接收数据显示数据开始图21接收模块流程开始后控制xbee接收数据,然后显示出来,按此顺序循环。设定baud率为9600/CTS是否为1设定baud率为9600/CTS是否为1YN等待,停止发送数据发送数据发送完毕?结束/RTS=1/RTS=0YN开始建立链接YN图22单片机向xbee发送数据流程图4.1数据的接收接收数据时xbee模块的内部数据流为数据先进入Receiver再进入RFRXbuffer,最后有单片机发出RTS流控,将数据读入单片机。如果使用RTS流控制,只要RTS处于取消设置状态(拉高),串行传输缓冲器中的数据不会被送出DOUT端口。若RTS取消长时间传位传输缓冲器会溢出,造成其它数据丢失,数据的接收流程如23所示程序见附录。设定baud率为9600接收数据设定baud率为9600接收数据接收完毕?结束/RTS=1YN建立链接YN/RTS=0开始图23单片机从xbee接收数据的流程/RTS流控信号有单片机发出,当/RTS为0是告知xbee模块单片机要读取数据,而/CTS流控信号有xbee模块发出,当/CTS为1时告知单片机停止向xbee模块发送数据。4.2数据的显示仍然采用TM12864完成所接收数据的显示,其原理与控制过程与发送模块部分的相同,不再赘述。5系统仿真及调试5.1Xbee模块的参数设置xbee模块在正常工作之前必须进行相应的设置。对xbee模块的设置既可以按照xbee手册介绍的AT指令,通过串行终端完成,也可以借助X-CTU这一工具来完成,这里用X-CTU比较方便[12]。在用USB电缆将Ardino与PC机连接好之后,运行X-CTU软件。在“PCSettings”中里选择对应的通信端口,并设置好波特率等参数。xbee模块出厂默认的设置为9600,8,N,1,如图24所示。图24默认设置单击“Test/Query”按钮,来测试是否能够正确地连接上xbee模块。如果通信正确,点击“Query”如图25所示图25链接正常确认对话框测试正常之后转到“ModemConfiguration”。首先单击“ModemParametersandFirmware”中的“Read”按钮读出xbee模块中的当前参数,接着读出的“Networking&Security”中将“Channel”设置为“C”,将“PANID”设置为“1234”。如图26所示。图26PANID设置点击“SerialInterfacing”中将“BD–BaudRate”设置为频率为9600,如图27所示。图27baud率设置5.2仿真与调试程序的编译环境为ICCV7forAVR,系统的软件调试采用程序分块调试的原则,首先把系统分为系统的主程序模块,ZigBee无线收发的调试,温度数据显示程序。对程序进行从局部到全面的调试。以下为系统调试的主要方法:(1)系统软件按照功能划分模块,对各个模块或者子函数逐个单一调试运行,并且检查运行的准确性。(2)额外编写独立的测试子程序单独测试个别子功能模块准确性和合理性。(3)将程序中设置标记,以便为调试各个模块程序和测试运行状态提供方便,以便检验程序运行结果。软件的仿真采用Proteus[13]仿真结果如28图示,有mega16,DS1820和TM12864组成,仿真结果表明,可以将温度数据读出,并且TM12864显示了出来,达到了设计效果。图28仿真结果接下来调试xbee模块,1号PC机通过串口调试助手经Xbee模块将数据发送出去,2号PC机上的xbee模块接收发出的数据由串口调试助手显示出来。调试助手接收数据串口选择COM3端口,波特率9600,数据位8,停止位1,校验位和流量控制NONE,选择十六进制显示。发送数据如图29所示。图29调试助手发送数据xbee通过自动组建网络的功能,将1号PC机发送的数据传输到2号PC机,接收到得数据如图30所示。图30调试助手接收数据至此完成了温度数据的采集、显示、发送与接收的仿真,参数的设置,证明了设计的正确。结束语至此基于ZigBee的无线温度采集单元的软件设计已完成。本系统的特点就是采用了ZigBee技术,因此它耗电少,通信的安全性与可靠性好,使用起来比较方便,不受供电与场地的限制,可方便的采集温度。设计采用Mega16单片机作为控制器,利用数字式DS1820作为温度传感器,同时采用TM12864对采集到的数据进行显示,xbee模块作为无线的接收与发射模块。数字式温度传感器DS1820和单片机以单总线方式连接,使用方便。Mega16按照DS1820的通信协议,便可得到DS1820转换后的温度数据。TM12864为128*64的液晶显示模块,Mega16按其操作指令对其进行读写便可显示所需数据。单片机与xbee模块以UART方式传输数据,使用方便。用C语言实现对Mega16编程,从而实现对温度的采集、显示与传输,它还具有很大的扩展性,可以完成多个地点的温度采集与汇总。参考文献[1]李文忠、段朝玉.Zibgbee无线网络技术入门与实战.北京:北京航天航空大学出版社,2008年4月[2]李文忠、段朝玉.CC1110/CC2510无线单片机和无线自组织网络入门与实战.北京:北京航天航空大学出版社,2008年4月[3]李朝青.单片机原理与接口技术.北京航天航空大学出版社,1995年7月[4]谢俊.单片机C语言编程与实践.北京:电子工业出版社,2009年8月[5]周向红.51系列单片机应用与实践教程.北京:北京航空航天大学出版社,2008年5月[6]杨将新.单片机程序设计及应用.北京:电子工业出版社,2006年3月[7]张越,张炎,赵延军.基于DS18B20温度传感器的数字温度计[J].微电子学,2007[8]谭浩强.C程序设计.北京:清华大学出版社,2005年[9]周慈航.单片机应用程序设计技术.北京:北京航空航天大学出版社,1991年[10]DS1820单总线数字温度计.http://www.qfm[11]SpecificationForLcdModule,ModelNo.TM12864_Z.[12]ZigBeeSpecification2006..[13]Proteus中文使用书册附录(1)DS180初始化程序voidInit_DS18B20(void){unsignedcharx=0;DDRB|=0x01;//PORTB.0作为输出口PORTB|=(1<<0);//portb.0输出低电平,复位delay(8);//稍做延时PORTB&=~(1<<0);//单片机将1820的DQ拉低delay(80);//精确延时大于480usPORTB|=(1<<0);//拉高DQdelay(10);DDRB&=0x00;//portb作输入x=PORTB;//稍做延时后如果x=0则初始化成功x=1则初始化失败delay(5);}(2)写字节函数voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--)//8次给出一个字节{DDRB|=0X01;//port.0为输出口PORTB&=~(1<<0);//把数据线拉底产生写时间片if(dat&0x01)//判断要发送的数据是1还是0PORTB|=(1<<0);elsePORTB&=~(1<<0);delay(5);PORTB|=(1<<0);//拉高,供电dat>>=1;//右移一位}delay(5);}(3)读字节函数unsignedcharReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DDRB|=0X01;//protb.0设为输出口PORTB&=~(1<<0);//给脉冲信号,dat<<=1;//向左移一位PORTB|=(1<<0);//给脉冲信号DDRB&=~(1<<0);//protb.0设为输入口if(DINB&0X01)//判断读入的是1还是0dat|=0x01;delay(5);}return(dat);}(4)写命令函数voidwrite_inst(uchardata){ceck_busy();//是否忙状态DDRB|=0X07;//PB.0/1/2脚设置为输出PORTB|=(1<<1);//R/W=1写状态PORTB&=~(1<<0);//RS=0指令DDRA=0xff;//porta作输出口PORTA=data;PORTB|=(1<<2);//E=1,产生E的一个下降沿,让data所存在输入寄存器中PORTB&=~(1<<2);//E=0}(5)读数据函数ucharrada_dat(void){uchardata;ceck_busy();DDRA=0x00;//设置PA为输入口DDRB=0x07;PORTB|=(1<<1);//R/W=1写状态PORTB|=(1<<0);//RS=1PORTB|=(1<<2);//E=1,产生E的一个下降沿,让data;所存在输入寄存器中data=DINAPORTB&=~(1<<2);//E=0}(6)写数据函数voidwrite_dat(uchardata){uchardata;ceck_busy();DDRA=0xff;//设置PA为输出口DDRB=0x07;PORTB&=~(1<<1);//R/W=1写状态PORTB|=(1<<0);//RS=1PORTB|=(1<<2);//E=1,产生E的一个下降沿,让data;所存在输入寄存器中PA=data;PORTB&=~(1<<2);//E=0}(7)读状态函数voidceck_busy(){DDRA=0x00;//PA设为输入delay(100); DDRB=0x07;PORTB|=(1<<1);//R/W=1写状态PORTB&=~(1<<0);//RS=0指令PORTB|=(1<<2);while(0x80&DINA){;}//忙时循环等待PORTB&=~(1<<2);}(8)显示一个字节的函数voiddisp_char(unsignedcharx,unsignedchary,unsignedcharascii){unsignedchari=0x00;constunsignedchar*q; /*取字库指针*/ascii-=0x20;q=&ENGLISH_FONT[ascii*16]; /*定位指针地址*/i=0x00;/*显示高8位*/ if(x<64)/*地址在左半屏范围内*/{cs1_1;cs2_0

; write_inst(y|0xB8);write_inst(x|0x40);while(i<8){write_data(*q);q++;x++;i++;if(x>63)/*判断地址是否越界*/{break;}}}if(i<8)/*地址进入右半屏范围*/{cs1_0;cs2_1LCD1_write_com(y|0xB8);LCD1_write_com(x|0x40);while(i<8){LCD1_write_data(*q);q++;x++;i++;}}/*显示低8位*/i=0x00;x-=8;if(x<64)

温馨提示

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

评论

0/150

提交评论