欢迎来到天天文库
浏览记录
ID:38790249
大小:16.37 KB
页数:5页
时间:2019-06-19
《基于51单片机的DHT11数字温湿度计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、#include#include#defineucharunsignedchar#defineuintunsignedintucharbyte,SH,SL,WH,WL,CHECK,FLAG;sbitLCDRS=P3^2;sbitLCDEN=P3^3;//sbitLCDRW=P2^2;sbitBUS=P3^4;voiddelay(ucharms)//精确1ms{uchari,j;for(i=ms*5;i>0;i--)for(j=100;j>0;j--);}v
2、oiddelay1()//约7us{uchari;for(i=3;i>0;i--);}/***************LCD配置**********************//********************bitcheck_busy()//检测busy{uchartemp;bitBB;LCDRS=0;LCDRW=1;LCDEN=1;P0=temp;delay(5);LCDEN=0;BB=(bit)(temp&0x80);//检测D7是否为1,为1则忙returnBB;}********
3、*************/voidwrite_com(ucharcom){//while(check_busy());//检测LCD是否忙delay(5);LCDRS=0;//LCDRW=0;LCDEN=0;P1=com;delay(5);LCDEN=1;delay(5);LCDEN=0;}voidwrite_data(uchardat){//while(check_busy());//检测LCD是否忙delay(5);LCDRS=1;//LCDRW=0;LCDEN=0;P1=dat;dela
4、y(5);LCDEN=1;delay(5);LCDEN=0;}voiddis(ucharadd,uchardat){delay(10);write_com(add);///送地址delay(5);write_data(dat);///送数据delay(5);}voidinit(){FLAG=0;delay(50);write_com(0x38);_nop_();write_com(0x0c);_nop_();write_com(0x06);_nop_();write_com(0x80);_nop
5、_();write_com(0x01);_nop_();TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}/*********************DHT11**********************/voidstart(){BUS=1;//起始总线为高电平_nop_();BUS=0;//主机拉低delay(25);//延时大于18msBUS=1;//主机拉高delay1();delay1();de
6、lay1();delay1();}ucharreceive_byte(){uchari,temp;for(i=0;i<8;i++){while(!BUS);//检测50us低电平延时是否结束delay1();delay1();delay1();delay1();temp=0;//26~28us为数据“0”if(BUS==1)//70us为数据“1”temp=1;while(BUS);//检测数据高电平结束byte<<=1;//数据存储在bite里,每次右移一位byte
7、=temp;//bite右
8、移空位补零,然后与temp进行或运算,赋值给bite}returnbyte;}voidreceive_data(){ucharS_H,S_L,W_H,W_L,CHECK_;while(FLAG);//采集周期标志位start();BUS=1;//设定总线为输入状态while(BUS);//检测DHT响应低电平while(!BUS);//检测DHT拉高总线电平while(BUS);//检测80us后拉低电平S_H=receive_byte();S_L=receive_byte();W_H=rece
9、ive_byte();W_L=receive_byte();CHECK_=receive_byte();//40bit数据while(BUS);delay1();delay1();delay1();delay1();delay1();delay1();delay1();delay1();delay1();//延时50usBUS=1;//总线经上拉电阻拉高CHECK=S_H+S_L+W_H+W_L;//校验运算if(CHECK==CHECK_)//校验{SH=S_H-7;SL=S_L;WH=W_H
此文档下载收益归作者所有