zigbee模块裸板开发之温湿度传感器DHT11DHT11.CDHT11.Hmain.cUART.CUART.H-----------------------------------------------华丽的分界线-----------------------------------------------------------------------DHT11.C:#includeioCC2530.h#defineuintunsignedint#defineU8unsignedchar#defineDATA_PINP1_3//温湿度定义U8U8FLAG,U8temp;U8ShiDu_H,ShiDu_L;//定义湿度存放变量U8WenDu,ShiDu;//定义温度存放变量U8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;U8U8comdata;/****************************延时函数*****************************/voidDelay_us()//1us延时{asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);}voidDelay_10us()//10us延时{Delay_us();Delay_us();Delay_us();Delay_us();Delay_us();Delay_us();Delay_us();Delay_us();Delay_us();Delay_us();}voidDelay_ms(uintTime)//nms延时{unsignedchari;while(Time--){for(i=0;i100;i++)Delay_10us();}}/***********************温湿度传感***********************/voidCOM(void)//温湿写入{U8i;for(i=0;i8;i++){U8FLAG=2;DATA_PIN=0;DATA_PIN=1;while((!DATA_PIN)&&U8FLAG++);Delay_10us();Delay_10us();Delay_10us();U8temp=0;if(DATA_PIN)U8temp=1;U8FLAG=2;while((DATA_PIN)&&U8FLAG++);if(U8FLAG==1)break;U8comdata=1;U8comdata|=U8temp;}}//--------------------------------//-----湿度读取子程序------------//--------------------------------//----以下变量均为全局变量--------//----温度高8位==U8T_data_H------//----温度低8位==U8T_data_L------//----湿度高8位==U8RH_data_H-----//----湿度低8位==U8RH_data_L-----//----校验8位==U8checkdata-----//----调用相关子程序如下----------//----Delay();,Delay_10us();COM();//--------------------------------voidDHT11(void)//温湿传感启动{DATA_PIN=0;Delay_ms(19);//主机拉低18msDATA_PIN=1;//总线由上拉电阻拉高主机延时40usP1DIR&=~(13);//重新配置IO口方向Delay_10us();Delay_10us();Delay_10us();Delay_10us();//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行if(!DATA_PIN){U8FLAG=2;//判断从机是否发出80us的低电平响应信号是否结束while((!DATA_PIN)&&U8FLAG++);U8FLAG=2;//判断从机是否发出80us的高电平,如发出则进入数据接收状态while((DATA_PIN)&&U8FLAG++);COM();//数据接收状态U8RH_data_H_temp=U8comdata;COM();U8RH_data_L_temp=U8comdata;COM();U8T_data_H_temp=U8comdata;COM();U8T_data_L_temp=U8comdata;COM();U8checkdata_temp=U8comdata;DATA_PIN=1;//数据校验U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);if(U8temp==U8checkdata_temp){U8RH_data_H=U8RH_data_H_temp;U8RH_data_L=U8RH_data_L_temp;U8T_data_H=U8T_data_H_temp;U8T_data_L=U8T_data_L_temp;U8checkdata=U8checkdata_temp;}WenDu=U8T_data_H;ShiDu=U8RH_data_H;}else{WenDu=0;ShiDu=0;}P1DIR|=(13);}-----------------------------------------------华丽的分界线-----------------------------------------------------------------------DHT11.H:#ifndef__DHT11_H__#define__DHT11_H__externunsignedcharWenDu,ShiDu;externvoidDelay_ms(unsignedintxms);//延时函数externvoidDHT11(void);//温湿传感启动#endif-----------------------------------------------华丽的分界线-----------------------------------------------------------------------main.c:#includeioCC2530.h#includeUART.H#includeDHT11.H/***************************主函数***************************/voidmain(void){unsignedcharWenDuChars[2];unsignedcharShiDuChars[2];Delay_ms(1000);//让设备稳定InitUart();//串口初始化while(1){DHT11();//获取温湿度if(WenDu!=0){WenDuChars[0]=WenDu/10+'0';WenDuChars[1]=WenDu%10+'0';Uart_Send_String(采集到的温度是:,16);Uart_Send_String(WenDuChars,2);}else{Uart_Send_String(It'sWrong,10);}if(ShiDu!=0){ShiDuChars[0]=ShiDu/10+'0';ShiDuChars[1]=ShiDu%10+'0';Uart_Send_String(采集到的湿度是:,16);Uart_Send_String(ShiDuChars,2);Uart_Send_String(\n,1);}else{Uart_Send_String(It'sWrong,10);Uart_Send_String(\n,1);}Delay_ms(1000);//延时,使周期性2S读取1次佳杰科技}}-----------------------------------------------华丽的分界线-----------------------------------------------------------------------UART.C:#includeioCC2530.h#defineucharunsignedchar#defineuintunsignedintvoidInitUart();//初始化串口voidUart_Send_String(unsignedchar*Data,intlen);/****************************************************************串口初始化函数***********************************************************/voidInitUart(){CLKCONCMD&=~0x40;//设置系统时钟源为32MHZ晶振while(CLKCONSTA&0x40);//等待晶振稳定CLKCONCMD&=~0x47;//设置系统主时钟频率为32MHZPERCFG=0x00;//位置1P0口P0SEL=0x3c;//P0_2,P0_3,P0_4,P0_5用作串口,第二功能P2DIR&=~0XC0;//P0优先作为UART0,优先级U0CSR|=0x80;//UART方式U0GCR|=11;//U0GCR与U0BAUD配合佳杰科技U0BAUD|=216;//波特率设为115200UTX0IF=0;//UART0TX中断标志初始置位0}/****************************************************************串口发送字符串函数****************************************************************/voidUart_Send_String(uchar*Data,intlen){{intj;for(j=0;jlen;j++){U0DBUF=*Data++;while(UTX0IF==0);UTX0IF=0;}}}-----------------------------------------------华丽的分界线-----------------------------------------------------------------------UART.H:#ifndef__UART_H__#define__UART_H__externvoidInitUart();//初始化串口externvoidUart_Send_String(unsignedchar*Data,intlen);#endif-----------------------------------------------华丽的分界线-----------------------------------------------------------------------