logo资料库

DHT11温湿度传感器+显示+阈值设定+驱动通风系统.doc

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
附 录1 程序
成都工业学院毕业设计(论文) 附 录1 程序 #include #include #define uchar unsigned char #define uint unsigned int sbit DAT = P1^3 ; //DHT11 数据输入口 sbit QD= P2^7; //驱动通风设备接口 sbit rs=P1^2; sbit rw=P1^1; sbit e=P1^0; //LCD 控制端 sbit k1= P3^2; //温度设置 sbit k2=P3^3; //湿度设置 sbit k3=P3^4; sbit k4=P3^5; //+ //- FLAG,k; temp,comdata; T_data_H,T_data_L,RH_data_H,RH_data_L,checkdata; uchar uchar uchar uchar T_data_H_temp,T_data_L_temp,RH_data_H_temp,RH_data_L_temp,checkdata_temp; uchar temph,humih; uchar m=0,n=0; uchar code num[10]="0123456789"; uchar code str1[]="Temp:"; uchar code str2[]="Humi:"; //温度 //湿度 uchar code str3[]="Error";
成都工业学院本科毕业设计(论文) uchar code str4[]="Success "; uchar code str5[]="%RH"; void delay1(uint i) //延时 1us { while(i--); } void Delay(uint j) //延时 j/10ms { uchar i; for(;j>0;j--) for(i=0;i<27;i++); { } } void Delay_10us(void) { } uchar i; i--; i--; i--; i--; i--; i--; /***********LCD1602 模块**********/ void wrc(uchar com) //1602 写指令 { delay1(1000); rs=0;
成都工业学院本科毕业设计(论文) rw=0; e=0; P0=com; e=1; delay1(10); e=0; } void wrd(uchar dat) //1602 写数据 { } delay1(1000); rs=1; rw=0; e=0; P0=dat; e=1; delay1(10); e=0; void lcd_init() // LCD1602 初始化 { } delay1(100); wrc(0x38); //使用 8 位数据,显示两行,使用 5*7 的字形 wrc(0x06); //字符不动,光标自动向右移动一格 wrc(0x0c); //开显示,不显示光标 wrc(0x01); //清屏 delay1(300); void lcd_init_display() //LCD 初始化显示温度湿度
成都工业学院本科毕业设计(论文) { } uchar i; for(i=0;i<5;i++) { } wrc(0x80+i); //第一行第一个开始 wrd(str1[i]); //temp:温度 for(i=0;i<5;i++) { } wrc(0xc0+i); //第二行第一个开始 wrd(str2[i]); //humi:湿度 void display() //显示温湿度上限 { } wrc(0x80+0x0c); wrd('/'); //温度上限 wrd(num[temph/10]); wrd(num[temph%10]); wrd('C'); wrc(0x80+0x4c); wrd('/'); //湿度上限 wrd(num[humih/10]); wrd(num[humih%10]); wrd(str5[0]); /**********DHT11 模块************/ void COM(void) //读一个字节
成都工业学院本科毕业设计(论文) { uchar i; for(i=0;i<8;i++) { FLAG=2; while((!DAT)&&FLAG++);//判断数据位是 0 还是 1 Delay_10us(); Delay_10us(); Delay_10us(); temp=0; if(DAT) temp=1;//如果高电平超过预定高电平值则数据位为 1 FLAG=2; while((DAT)&&FLAG++); //flag 先与后+1 if(FLAG==1) break; //超时则跳出 for 循环 comdata<<=1; //左移 1 位,高位在前,低位在后 comdata|=temp; } } void RH(void) //dht11 读 5 个字节 { 响应 DAT=0; //主机拉低至少 18ms Delay(180); DAT=1;//总线由上拉电阻拉高,释放总线,主机延时 20~40us,等待 DHT11 做出 Delay_10us(); Delay_10us();
成都工业学院本科毕业设计(论文) Delay_10us(); Delay_10us(); DAT=1; //主机设为输入,判断从机响应信号 if(!DAT) //判断从机是否有低电平信号,若不响应则跳出,响应则向下运行 { FLAG=2; while((!DAT)&&FLAG++);//判断从机是否发出 80us 的低电平响应信号 FLAG=2; while((DAT)&&FLAG++); //之后判断从机是否发出 80us 的高电平,如果是则 DHT11 准备开始发送数据 COM();//数据接收状态 RH_data_H_temp=comdata; COM(); RH_data_L_temp=comdata; COM(); T_data_H_temp=comdata; COM(); T_data_L_temp=comdata; COM(); checkdata_temp=comdata; DAT=1; temp=(T_data_H_temp+T_data_L_temp+RH_data_H_temp+RH_data_L_temp); //数据校验 if(temp==checkdata_temp) { RH_data_H=RH_data_H_temp; RH_data_L=RH_data_L_temp; T_data_H=T_data_H_temp;
成都工业学院本科毕业设计(论文) T_data_L=T_data_L_temp; checkdata=checkdata_temp; } } } void key1_pros() //温度上限按键设置 { if(k1==0) { delay1(100); if(k1==0) { } m++; if(m==2) m=0; while(!k1); } if(m==1) { if(k3==0) //+ { delay1(10); if(k3==0) { } temph++; if(temph>=50) temph=50; while(!k3);
成都工业学院本科毕业设计(论文) } if(k4==0) //- { delay1(10); if(k4==0) { } temph--; if(temph<=0)temph=0; while(!k4); } } } void key2_pros() //湿度上限按键设置 { if(k2==0) { delay1(100); if(k2==0) { n++; if(n==2) n=0;} while(!k2); } if(n==1) { if(k3==0) //+
分享到:
收藏