IMG_20190415_112250.jpg (3.06 MB, 下載次數(shù): 39)
下載附件
2019-4-15 11:37 上傳
這是單片機代碼
- #include<reg52.h>
- #include <intrins.h>
- #include <codetab.h>
- #include <LQ12864.h>
- #include"DHT11.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit Data=P1^2;
- uchar rec_dat1[4];//用于顯示的接收數(shù)據(jù)數(shù)組
- uchar rec_dat2[3];
- void DHT11_delay_us(uchar n)
- {
- while(--n);
- }
- void DHT11_delay_ms(uint z)
- {
- uint i,j;
- for(i=z;i>0;i--)
- for(j=110;j>0;j--);
- }
- void DHT11_start()
- {
- Data=1;
- DHT11_delay_us(2);
- Data=0;
- DHT11_delay_ms(20); //延時18ms以上 if( fo
- Data=1;
- DHT11_delay_us(30);
- }
- uchar DHT11_rec_byte() //接收一個字節(jié)
- {
- uchar i,dat=0;
- for(i=0;i<8;i++) //從高到低依次接收8位數(shù)據(jù)
- {
- while(!Data); ////等待50us低電平過去
- DHT11_delay_us(8); //延時60us,如果還為高則數(shù)據(jù)為1,否則為0
- dat<<=1; //移位使正確接收8位數(shù)據(jù),數(shù)據(jù)為0時直接移位
- if(Data==1) //數(shù)據(jù)為1時,使dat加1來接收數(shù)據(jù)1
- dat+=1;
- while(Data); //等待數(shù)據(jù)線拉低
- }
- return dat;
- }
- void DHT11_receive() //接收40位的數(shù)據(jù)
- {
- uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
- DHT11_start();
- if(Data==0)
- {
- while(Data==0); //等待拉高
- DHT11_delay_us(40); //拉高后延時80us
- R_H=DHT11_rec_byte(); //接收濕度高八位
- R_L=DHT11_rec_byte(); //接收濕度低八位
- T_H=DHT11_rec_byte(); //接收溫度高八位
- T_L=DHT11_rec_byte(); //接收溫度低八位
- revise=DHT11_rec_byte(); //接收校正位
- DHT11_delay_us(25); //結(jié)束
- if((R_H+R_L+T_H+T_L)==revise) //校正
- {
- RH=R_H;
- RL=R_L;
- TH=T_H;
- TL=T_L;
- }
- /*數(shù)據(jù)處理,方便顯示*/
- rec_dat1[0]='0'+(RH/10);
- rec_dat1[1]='0'+(RH%10);
- rec_dat1[2]='R';
- rec_dat1[3]='H';
- rec_dat2[0]='0'+(TH/10);
- rec_dat2[1]='0'+(TH%10);
- rec_dat2[2]='C';
- }
-
- }
- void main(void)
- {
- uchar i,j;
- OLED_Init(); //OLED初始化
- while(1)
- { DHT11_delay_ms(1500); //DHT11上電后要等待1S以越過不穩(wěn)定狀態(tài)在此期間不能發(fā)送任何指令
- DHT11_receive();
- OLED_P8x16Str(0,0,"Jsnu PE");//第一行 -- 8x16的顯示單元顯示ASCII碼
- OLED_P8x16Str(0,2,"-- -- -- -- --");
- OLED_P8x16Str(10,4,"Temp:");
- OLED_P8x16Str(10,6,"Humi:");
-
- for(i=0;i<=4;i++)
- {
- OLED_P8x16Str(60,4,(unsigned char*)&rec_dat1[i]);
- }
- for(j=0;j<=2;j++)
- {
- OLED_P8x16Str(60,6,(unsigned char*)&rec_dat2[j]);
- }
- delay(4000);
- OLED_CLS();
-
- }
-
- }
復(fù)制代碼 |