本人使用DHT11和51單片機制作了一個溫度濕度檢測儀,因為DHT11傳感器主要是用于溫度的檢測,所以實驗成品溫度的精度還行,濕度可能稍微差一點,然后很多人做溫濕度檢測器都會使用DS18B20傳感器,但我是另辟蹊徑,而且和DS18B20 一樣DHT11傳感器也是一個數字傳感器,不需要外加AD轉換模塊,可以省去較為復雜的硬件電路,但是另一方面,硬件的簡化必將帶來軟件的復雜,所以如果對這個作品感興趣,歡迎大家下載,文件中包含原理圖,元件清單,AD圖,程序流程圖,程序,實物圖,基本上都有。
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (36.74 KB, 下載次數: 86)
下載附件
2018-5-15 03:20 上傳
0.png (45.27 KB, 下載次數: 99)
下載附件
2018-5-15 03:20 上傳
0.jpg (35.75 KB, 下載次數: 77)
下載附件
2018-5-15 03:20 上傳
單片機源碼:
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- #include <intrins.h>
- typedef bit BOOL ;
- sbit io = P1^1 ;//(口線定義)
- sbit bee= P1^0 ;
- sbit rs = P2^5 ;
- sbit rw = P2^6 ;
- sbit ep = P2^7 ;
- sbit led =P1^5 ;
- bit flag_300ms ;
- sbit K1=P1^2;
- sbit K2=P1^3;
- sbit K3=P1^4;
- uchar yemian=0;//(定義變量)
- uchar flat=1;
- uchar data_byte;
- uchar RH,RL,TH,TL;
- uchar WenDu,ShiDu;//報警的溫度和濕度
- uchar value;
- /****************************延時程序****************************/
- void delay(uchar ms)
- { // 延時子程序
- uchar i ;
- while(ms--)
- {
- for(i= 0 ; i<120;i++) ;
- }
- }
- void delay1()//延時10us
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- /********************報警程序部分*******************/
- void warn() //報警函數
- {
-
- if(TH>WenDu) //檢測的溫度高于設定溫度報警值
-
- {
- bee=0; //報警
- led=0;delay(10);led=~led; //燈快閃爍
- }
-
- if(RH>ShiDu) //檢測的濕度高于設定濕度報警值
-
- {
- bee=0; //報警
- led=0;delay(10);led=~led; //燈快閃爍
- }
-
- if(TH<WenDu && RH<ShiDu )
- {
- bee=1; //停止報警
- led=1; //停止閃爍
- }
-
-
- }
- /************************LCD模塊******************************************/
- BOOL lcd_bz()//測試LCD忙碌狀態
- {
- BOOL result ;
- rs = 0 ;
- rw = 1 ;
- ep = 1 ;
- result = (BOOL)(P0 & 0x80) ;
- ep = 0 ;
- return result ;
- }
- void write_cmd(uchar cmd)// 寫指令
- {
- while(lcd_bz()) ;
- rs= 0 ;
- rw= 0 ;
- ep= 0 ;
- P0= cmd ;
- ep= 1 ;
- ep= 0 ;
- }
- void write_addr(uchar addr)//寫地址
- {
- write_cmd(addr|0x80) ;
- }
- void write_byte(uchar dat)//寫字節
- {
- while(lcd_bz()) ;
- rs = 1 ;
- rw = 0 ;
- ep = 0 ;
- P0 = dat ;
- ep = 1 ;
- ep = 0 ;
- }
- void lcd_init()// 初始化
- {
- write_cmd(0x38) ;
- delay(1);
- write_cmd(0x08) ;
- delay(1);
- write_cmd(0x01) ;
- delay(1);
- write_cmd(0x06) ;
- delay(1);
- write_cmd(0x0c) ;
- delay(1);
- }
- void display(uchar addr, uchar q)//在某一地址上顯示一字節
- {
- delay(1) ;
- write_addr(addr) ;
- write_byte(q) ;
- delay(1) ;
-
- }
- /*********************** DHT11測試模塊***************************************/
- void start()//開始信號
- {
- io=0;
- delay(18);//>18ms
- io=1;
- delay1();//20-40us
- delay1();
- delay1();
- delay1();
- }
- uchar receive_byte()//接收一個字節
- {
- uchari;
- for(i=0;i<8;i++)
- {
- data_byte<<=1; //循環左移
- while(!io); //每發送一位數據間隔50us低電平
- delay1();delay1();delay1();delay1(); //延遲40us
- if(io==1)
- {
- data_byte=data_byte|0x01;
- while(io);
- }
- else
- {
- data_byte=data_byte|0x00;
- }
- }
- returndata_byte;
- }
- void receive()//接收數據
- {
- ucharT_H,T_L,R_H,R_L,check;
- start();//開始信號
- io=1;
- if(!io)//讀取DHT11響應信號
- {
- while(!io) ; //判斷輸出低電平
- while( io) ; //判斷輸出高電平
- R_H=receive_byte();
- R_L=receive_byte();
- T_H=receive_byte();
- T_L=receive_byte();
- check=receive_byte();
- io=0;
- delay1();delay1();delay1();delay1();delay1();//拉低延時50us
- io=1;
- if(R_H+R_L+T_H+T_L==check) //矯正
- {
- RH=R_H;
- RL=R_L;
- TH=T_H;
- TL=T_L;
- }
- }
- }
- void showw() // 問候語函數
- {
- lcd_init(); //初始化
- delay(10);
-
- display(0x01,'I');
- display(0x02,' ');
- display(0x03,'a');
- display(0x04,'m');
- display(0x05,' ');
- display(0x06,'s');
- display(0x07,'u');
- display(0x08,'p');
- display(0x09,'e');
- display(0x0a,'r');
- display(0x0b,'m');
- display(0x0c,'a');
- display(0x0d,'n');
- display(0x0e,'!');
- delay(250); //短暫延時
- delay(250);
- delay(250);
- delay(250);
-
- }
-
- /*************定時器0初始化程序***************/
- void time_init()
- {
- TMOD= 0X01; //定時器0、定時器1工作方式1
- ET0 = 1; //開定時器0中斷
- TR0 = 1; //允許定時器0定時
- EA = 1; //開總中斷
- }
- void caidan() //按鍵程序 選擇菜單模式
- {
-
- if(!K1)
- {
- delay(20);
- if(!K1)
- {
- while(!K1)
- ;
- yemian++;
- flat++;
- if(yemian>=3)
- {
- yemian=0;
- }
-
- }
- }
-
-
- }
復制代碼
0.png (49.94 KB, 下載次數: 94)
下載附件
2018-5-15 03:21 上傳
更多程序請下載文件:
基于單片機的溫度濕度采集系統.zip
(9.97 MB, 下載次數: 586)
2018-5-14 16:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|