大学生
最后登录1970-1-1
在线时间 小时
注册时间2016-7-28
|
楼主 |
发表于 2017-2-15 11:08:10
|
显示全部楼层
- #include <intrins.h>:
- #include "lcd.h"
- sbit DQ=P2^2; //DTH11管脚
- uchar code ASCII[]="0123456789%c";
- uchar code table0[]=" Hum:00";
- uchar code table1[]=" Tem:00";
- uchar tem;
- uchar hum;
-
- display0[2]={0,0};
- display1[2]={0,0};
-
- //**************************延时函数
- void delay_ms(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=114;y>0;y--);
- }
- //**************************初始化DTH11
- bit Init_DTH11()
- {
- bit flag;
- uchar num;
- DQ=0;
- delay_ms(19); // >18ms
- DQ=1;
- for(num=0;num<10;num++); // 20-40us 34.7us
- for(num=0;num<12;num++);
- flag=DQ;
- for(num=0;num<11;num++); //DTH响应80us
- for(num=0;num<24;num++); //DTH拉高80us
- return flag;
- }
- //****************************读DTH11数据
- uchar DTH11_RD_CHAR()
- {
- uchar byte=0;
- uchar num;
- uchar num1;
- while(DQ==1);
- for(num1=0;num1<8;num1++)
- {
- while(DQ==0);
- byte<<=1; //高位在前
- for(num=0;DQ==1;num++);
- if(num<10)
- byte|=0x00;
- else
- byte|=0x01;
- }
- return byte;
- }
- //******************************读取DTH11温度和湿度
- void DTH11_DUSHU()
- {
- uchar num;
- if(Init_DTH11()==0)
- {
- hum=DTH11_RD_CHAR(); //比正常值高7度左右
- DTH11_RD_CHAR();
- tem=DTH11_RD_CHAR();
- DTH11_RD_CHAR();
- DTH11_RD_CHAR();
- for(num=0;num<17;num++); //最后BIT输出后拉低总线50us
- DQ=1;
- }
- }
- //***********************************显示函数
- void Display_DTH11()
- {
- display0[1]=hum/10%10;
- display0[0]=hum%10;
-
- LcdShowStr(0, 0, table0);
- DisplayOneChar (8, 0, ASCII[ display0[1] ] );
- DisplayOneChar (9, 0, ASCII[ display0[0] ] );
- DisplayOneChar (10, 0, ASCII[10] ); //显示湿度
- display1[1]=tem/10%10;
- display1[0]=tem%10;
- LcdShowStr(0, 1, table1);
- DisplayOneChar (8, 1, ASCII[ display1[1] ] );
- DisplayOneChar (9, 1, ASCII[ display1[0] ] );
- DisplayOneChar (10, 1, 0xdf );
- DisplayOneChar (11, 1, ASCII[11] ); //显示温度
- }
- //*******************************主函数
- main()
- {
- tem=0;
- hum=0;
- delay_ms(1000); //DTH11开始1s有错误输出
- InitLcd1602();
- while(1)
- {
- DTH11_DUSHU();
- Display_DTH11();
- delay_ms(2000);
- }
- }
复制代码 |
|