DHT11溫濕度傳感器,用51單片機驅動,并用1602液晶顯示屏顯示。請大家多多指教!
單片機源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit Data=P2^0;
- uchar rec_dat[9]="12369566";
- extern void InitLcd1602();
- extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
- 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);
- Data=1;
- DHT11_delay_us(30);
- }
- uchar DHT11_rec_byte()
- {
- uchar i,dat=0;
- for(i=0;i<8;i++)
- {
- while(!Data);
- DHT11_delay_us(8);
- dat<<=1;
- if(Data==1)
- dat+=1;
- while(Data);
- }
- return dat;
- }
- void DHT11_receive()
- {
- 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); //延時
- if((R_H+R_L+T_H+T_L)==revise) //校驗
- {
- RH=R_H;
- RL=R_L;
- TH=T_H;
- TL=T_L;
- }
- /*數據分解*/
- rec_dat[0]='0'+(RH/10);
- rec_dat[1]='0'+(RH%10);
- rec_dat[2]='R';
- rec_dat[3]='H';
- rec_dat[4]=' ';
- rec_dat[5]=' ';
- rec_dat[6]='0'+(TH/10);
- rec_dat[7]='0'+(TH%10);
- rec_dat[8]='C';
- }
- }
- void main()
- {
- InitLcd1602(); //1602初始化
- while(1)
- {
- DHT11_delay_ms(1500); //DHT11初始1S延時
- DHT11_receive();
- LcdShowStr(0,0,rec_dat); //顯示溫濕度
- }
- }
復制代碼
所有資料51hei提供下載:
51溫濕度傳感器1602顯示.zip
(27.84 KB, 下載次數: 113)
2018-12-15 14:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
Sheet2.pdf
(61.89 KB, 下載次數: 54)
2018-12-26 18:43 上傳
點擊文件名下載附件
原理圖 下載積分: 黑幣 -5
|