为避免信号冲突,

《基于物联网的信息采集系统的设计与实现.doc》由会员分享。传感器上电后,DATA必须保持稳定。SHT引脚特性如下:VDD,GND)之间可增加一个nF的电容,GNDSHT的供电电压为~V。

,与位的AD转换器以及串行接口电路实现无缝连接。

7、***************************************************************chars_read_byte(unsignedcharack){IO_DIR_PORT_PIN(,,IO_OUT);时钟和数据IO设置为输出IO_DIR_PORT_PIN(,,IO_OUT);unsignedchari,val=;SDA=;IO_DIR_PORT_PIN(,********************************************************************************************voidmain(){inttemera;inthumidity;chars[];UINTadc_value[];floatnum=;SET_MAIN_CLOCK_SOURCE(CRYSTAL);设置系统时钟源为MHz晶体振荡器GUI_Init();GUI初始化GUI_SetColor(,);显示色为亮点,为湿度)**返回值:er操作结果**************************************************************************************************chars_measure(unsignedchar*_checksum,unsignedcharmode){unsigneder=;unsignedinti,j;s_transstart();启动传输switch(mode){case:er+=s_write_byte();eak;发送温度读取命令case:er+=s_write_byte();eak;发送湿度读取命令default:eak;}IO_DIR_PORT_P。三、硬件设计连接灌溉测控系统模块设计(1)网络节点硬件结构基于ZigBee技术的片上系统CC的资源丰富、功能强大,使得无论是处于协调器位置的网络节点,以准备接收SHT的数据for(i=x;igt;i=){SCL=;if(SDA)val=(val|i);elseval=(val|x);SCL=;QWait();QWait();QWait();QWait();QWait();}IO_DIR_PORT_PIN(,,IO_OUT);将数据线恢复为输出状态SDA=!ack;SCL=;QWait();QWait();QWait();QWait();QWait();SCL=;SDA=;returnval;返回读取的值}***************************************************************************************************函数名称:s_transstart**功能描述:启动SHT,以准备接收SHT的数据for(i=x;igt;i=){SCL=;if(SDA)val=(val|i);elseval=(val|x);SCL=;QWait();QWait();QWait();QWait();QWait();}IO_DIR_PORT_PIN(,,IO_OUT);将数据线恢复为输出状态SDA=!ack;SCL=;QWait();QWait();QWait();QWait();QWait();SCL=;SDA=;returnval;返回读取的值}***************************************************************************************************函数名称:s_transstart**功能描述:启动SHT,以准备接收SHT的ACKfor(i=;ilt;i++){for(j=;jlt;j++){if(SDA==){eak;}}if(SDA==){eak;}}if(SDA)SDA没有拉低,以准备接收SHT的ACKSCL=;asm(quotNOPquot);error=SDA;QWait();QWait();QWait();IO_DIR_PORT_PIN(,,IO_OUT);将数据线恢复为输出状态SDA=;SCL=;returnerror;}***************************************************************************************************函数名称:s_read_byte**功能描述:从SHT读取一个字节**参数:ack读取数据后,以准备接收SHT的ACKSCL=;asm(quotNOPquot);error=SDA;QWait();QWait();QWait();IO_DIR_PORT_PIN(,,IO_OUT);将数据线恢复为输出状态SDA=;SCL=;returnerror;}***************************************************************************************************函数名称:s_read_byte**功能描述:从SHT读取一个字节**参数:ack读取数据后,为湿度)**返回值:er操作结果**************************************************************************************************chars_measure(unsignedchar*_checksum,unsignedcharmode){unsigneder=;unsignedinti,j;s_transstart();启动传输switch(mode){case:er+=s_write_byte();eak;发送温度读取命令case:er+=s_write_byte();eak;发送湿度读取命令default:eak;}IO_DIR_PORT_P。图网络节点的结构框图()温湿度数据采集传感器模块SHT是一款高度集成的温湿度传感器芯片,允许NLME使用NWK数据服务。带有采集数据功能的协调器节点的结构框图如图所示。gtgt;num=(adc_value[]*+adc_value[])*;有一位符号位,取^;num=;num=num*;转换为Lxsrintf(s,(char*)quot%d%d%d%dlxquot,((INT)((int)num)),((INT)((int)num%)),((INT)((int)num%)),((INT)((int)num%)));将光照结果转换为字符串GUI_PutString_(,,(char*)s);显示结果LCM_Refresh();}}IO_IN);将数据线设置为输入,可在线阅读全文,其硬件结构都非常简单、可靠、实用。

9、***************************************************************************************includequothalhquotincludequotLCDhquotincludequotstdiohquotdefinenoACKdefineACKdefineSTATUS_REG_WxdefineSTATUS_REG_RxdefineMEASURE_TEMPxdefineMEASURE_HUMIxdefineRESETxedefineSCLP_SHT时钟defineSDAP_SHT数据线unsignedchard,d,d,d,d,d,d;voidWait(unsignedintms);voidQWait(void);chars_write_byte(unsignedcharvalue);chars_read_byte(unsignedcharack);voids_transstart(void);voids_connectionreset(void);chars_measure(unsignedchar*_checksum,unsignedcharmode);voidinitIO(void);*****************************************************************************************。

#p#分页标题#e#

8、dity);读取温度和湿度srintf(s,(char*)quot%d%dCquot,((INT)((int)temera)),((INT)((int)temera%)));将温度结果转换为字符串GUI_PutString_(,,(char*)s);显示结果LCM_Refresh();srintf(s,(char*)quot%d%d%%quot,((INT)((int)humidity)),((INT)((int)humidity%)));将湿度结果转换为字符串GUI_PutString_(,,(char*)s);显示结果LCM_Refresh();*AIN通道采样*ADC_ENABLE_CHANNEL(ADC_AIN);使能AIN为ADC输入通道*配置ADCCON寄存器以便在ADCCONSTSEL=(复位默认值)且ADCCONST=时进行单一转换**参考电压:AVDD_SOC引脚上的电压**抽取率:**ADC输入通道:AIN*ADC_SINGLE_CONVERSION(ADC_REF_AVDD|ADC__BIT|ADC_AIN);ADC_SAMPLE_SINGLE();启动一个单一转换while(!ADC_SAMPLE_READY());等待转换完成ADC_ENABLE_CHANNEL(ADC_AIN);禁止AINadc_value[]=ADCL;读取ADC值adc_value[]=ADCH;读取ADC值adc_value[]=adc_value[。

3、接口,向SHT发送ACK**返回值:val读取的字节值**************************************************************************************************chars_read_byte(unsignedcharack){IO_DIR_PORT_PIN(,,IO_OUT);时钟和数据IO设置为输出IO_DIR_PORT_PIN(,,IO_OUT);unsignedchari,val=;SDA=;IO_DIR_PORT_PIN(,********************************************************************************************voidmain(){inttemera;int。************************函数名称:QWait**功能描述:延时函数(大约us的延时)**参数:无**返回值:无**************************************************************************************************voidQWait(){asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);}***************************************************************************************************函数名称:initIO**功能描述:SHT串行通信IO初始化**参数:无**返回值:无**************************************************************************************************voidinitIO(void){IO_DIR_PORT_PIN(,,IO_OUT);IO_DIR_PORT_PIN(,,IO_OUT);PINP|=x;SDA=;SCL=;}***************************************************************************************************函数名称:s_write_byte**功能描述:从SHT写一个字节**参数:value需写入的字节值**返回值:error操作是否成功**********************************************************************************************。

2、***********************************************************************************************voids_transstart(void){IO_DIR_PORT_PIN(,,IO_OUT);IO_DIR_PORT_PIN(,,IO_OUT);SDA=;SCL=;QWait();QWait();SCL=;QWait();QWait();SDA=;QWait();QWait();SCL=;QWait();QWait();QWait();QWait();QWait();SCL=;QWait();QWait();SDA=;QWait();QWait();SCL=;QWait();QWait();}***************************************************************************************************函数名称:s_connectionreset**功能描述:与SHT通信复位**参数:无**返回值:无**************************************************************************************************voids_connectionreset(void){IO_DIR_PORT_P。DATA在SCK时钟下降沿之后改变状态,向SHT发送ACK**返回值:val读取的字节值**********************************。DATA三态门用于数据的读取。数据传输期间,在SCK时钟高电平时,在NWK内部NLME和NLDE之间还有MAC子层之间还有一个隐含接口,因而不存在最小SCK频率。

11、(amchecksum,);读取温度数据并校验tem=d*+d;if(error!=)s_connectionreset();读取失败,并在同一芯片上,并同过LCD显示**参数:无**返回值:无******DE提供的服务:一是在应用支持子层PDU基础上添加适当上网协议头产生网络协议数据单元(NPDU);二是根据路由拓扑,并仅在SCK时钟上升沿有效。

10、uotNOPquot);asm(quotNOPquot);asm(quotNOPquot);}***************************************************************************************************函数名称:initIO**功能描述:SHT串行通信IO初始化**参数:无**返回值:无**************************************************************************************************voidinitIO(void){IO_DIR_PORT_PIN(,,IO_OUT);IO_DIR_PORT_PIN(,,IO_OUT);PINP|=x;SDA=;SCL=;}***************************************************************************************************函数名称:s_write_byte**功能描述:从SHT写一个字节**参数:value需写入的字节值**返回值:error操作是否成功**********************************************************************************************。

4、N(,,IO_IN);将数据线设置为输入,开始与SHT通信**参数:无**返回值:无**QWait();SCL=;QWait();QWait();}***************************************************************************************************函数名称:s_connectionreset**功能描述:与SHT通信复位**参数:无**返回值:无**************************************************************************************************voids_connectionreset(void){IO_DIR_PORT_PIN(,,IO_OUT);IO_DIR_PORT_PIN(,,IO_OUT);unsignedchari;SDA=;SCL=;for(i=;ilt;i++){SCL=;QWait();QWait();SCL=;QWait();QWait();}s_transstart();}***************************************************************************************************函数名称:s_measure**功能描述:发送命令、读取SHT温度或湿度数据**参数:*_checksum校验和*mode读取数据类型(为温度,开始与SHT通信**参数:无**返回值:无**************************************************************************************************voids_transstart(void){IO_DIR_PORT_PIN(,,IO_OUT);IO_DIR_PORT_PIN(,,IO_OUT);SDA=;SCL=;QWait();QWait();SCL=;QWait();QWait();SDA=;QWait();QWait();SCL=;QWait();QWait();QWait();QWait();QWait();SCL=;QWait();QWait();SDA=;QWait();。需要一个外部的上拉电阻(例如:AINAINCC芯片AIN温度传感器湿度传感器土壤水分传感。网络层的数据和管理服务由MCPSSAP和MLMESAP提供了应用层和MAC子层之间的接口,微处理器应驱动DATA在低电平。而NLME提供的服务包括配置新的装置、创建新网络、装置请求加入离开网络和ZigBee协调器或路由器请求装置离开网络、寻址、近邻发现、路由发现、接收操控等。它采用专利的CMOSens技术,把NPDU发送到通信链路的目的地址装置或通信链路的吓一跳。

1、****chars_write_byte(unsignedcharvalue){unsignedchari,error=;IO_DIR_PORT_PIN(,,IO_OUT);时钟和数据IO设置为输出IO_DIR_PORT_PIN(,,IO_OUT);for(i=x;igt;i=)将一个字节的位逐一输出{if(iamvalue)SDA=;elseSDA=;SCL=;QWait();QWait();QWait();QWait();QWait();SCL=;asm(quotNOPquot);asm(quotNOPquot);}SDA=;IO_DIR_PORT_PIN(,,IO_IN);将数据线设置为输入,提供全标定的数字输出。由于接口包含了完全静态逻辑,更多相关《基于物联网的信息采集系统的设计与实现(最终稿)》请在上搜索。SCK用于微处理器与SHT之间的通讯同步。传感器包括一个电容性聚合体测湿敏感元件、一个用能隙材质制成的测温元件,用以去耦滤波。

6、IN(,,IO_OUT);IO_DIR_PORT_PIN(,,IO_OUT);unsignedchari;SDA=;SCL=;for(i=;ilt;i++){SCL=;QWait();QWait();SCL=;QWait();QWait();}s_transstart();}***************************************************************************************************函数名称:s_measure**功能描述:发送命令、读取SHT温度或湿度数据**参数:*_checksum校验和*mode读取数据类型(为温度,确保产品具有极高的可靠性与卓越的长期稳定性。

#p#分页标题#e#

5、**********函数名称:Wait**功能描述:延时函数(不精确延时)**参数:ms延时时间**返回值:无**************************************************************************************************voidWait(unsignedintms){unsignedcharg,k;while(ms){for(g=;glt=;g++){for(k=;klt=;k++);}ms;}}***************************************************************************************************函数名称:QWait**功能描述:延时函数(大约us的延时)**参数:无**返回值:无**************************************************************************************************voidQWait(){asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(quotNOPquot);asm(。****chars_write_byte(unsignedcharvalue){unsignedchari,error=;IO_DIR_PORT_PIN(,,IO_OUT);时钟和数据IO设置为输出IO_DIR_PORT_PIN(,,IO_OUT);for(i=x;igt;i=)将一个字节的位逐一输出{if(iamvalue)SDA=;elseSDA=;SCL=;QWait();QWait();QWait();QWait();QWait();SCL=;asm(quotNOPquot);asm(quotNOPquot);}SDA=;IO_DIR_PORT_PIN(,,IO_IN);将数据线设置为输入,背景色为暗点GUI_PutString_(,,quotOURSCCquot);显示OURSCCGUI_PutString_(,,quotTem:quot);GUI_PutString_(,,quotHumi:quot);GUI_PutString_(,,quotLight:quot);LCM_Refresh();while(){th_read(amtemera,amhumidity);读取温度和湿度srintf(s,(char*)quot%d%dCquot,((INT)((int)temera)),((INT)((int)temera%)));将温度结果转换为字符串GUI_PutString_(,,(char*)s);显示结果LCM_Refresh();srintf(s,(char*)quot%d%d%%quot,((INT)((int)humidity)),((INT)((int)humidity%)));将湿度结果转换为字符串GUI_PutString_(,,(char*)s);显示结果LCM_Refresh();*AIN通道采样*ADC_ENABLE_CHANNEL(ADC_AIN);使能AIN为ADC输入通道*配置ADCCON寄存器以便在ADCCONSTSEL=(复位默认值)且ADCCONST=时进行单一转换**参考电压:AVDD_SOC引脚上的电压**抽取率:**ADC输入通道:AIN*ADC_SINGLE_CONVERSION(ADC_REF_AVDD|ADC__BIT|ADC_AIN);ADC_SAMPLE_SINGLE();启动一个单一转换while(!ADC_SAMPLE_READY());等待转换完成ADC_ENABLE_CHANNEL(ADC_AIN);禁止AINadc_value[]=ADCL;读取ADC值adc_value[]=ADCH;读取ADC值adc_value[]=adc_value[]。电源引脚(VDD,背景色为暗点GUI_PutString_(,,quotOURSCCquot);显示OURSCCGUI_PutString_(,,quotTem:quot);GUI_PutString_(,,quotHumi:quot);GUI_PutString_(,,quotLight:quot);LCM_Refresh();while(){th_read(amtemera,amhumi。在此期间无需发送任何指令。umidity;chars[];UINTadc_value[];floatnum=;SET_MAIN_CLOCK_SOURCE(CRYSTAL);设置系统时钟源为MHz晶体振荡器GUI_Init();GUI初始化GUI_SetColor(,);显示色为亮点,计算数据{tem=tem*;humi=(tem)*(+*humi)*humi*humi+*humi;if(humigt){humi=;}if(humi){tem=tem+;}else{tem=tem;}*t=(int)tem;tm=(int)(humi*)%;if(humigt){humi=humi+;}else{humi=humi;}*h=(int)humi;}***************************************************************************************************函数名称:main**功能描述:读取温度、湿度和光照强度数据,要等待ms以越过“休眠”状态。

12、gtgt;num=(adc_value[]*+adc_value[])*;有一位符号位,取^;num=;num=num*;转换为Lxsrintf(s,(char*)quot%d%d%d%dlxquot,((INT)((int)num)),((INT)((int)num%)),((INT)((int)num%)),((INT)((int)num%)));将光照结果转换为字符串GUI_PutString_(,,(char*)s);显示结果LCM_Refresh();}}IO_IN);将数据线设置为输入,错误信息加{er+=;}d=s_read_byte(ACK);数据读取d=s_read_byte(ACK);d=s_read_byte(noACK);returner;}***************************************************************************************************函数名称:th_read**功能描述:调用相应函数,通信复位else读取成功,还是处于网络末梢的传感器节点,读取温度和数据数据并校验和计算**参数:*t温度值**h湿度值**返回值:无**************************************************************************************************voidth_read(int*t,int*h){unsignedcharerror,checksum;floathumi,tem;inttm;initIO();s_connectionreset();启动传输error=;error+=s_measure(amchecksum,);读取湿度数据并校验humi=d*+d;error+=s_measure。除了这些外

当前资源信息


编号:2447
类型: 共享资源
格式: DOCX

点击下载