本設(shè)計(jì)是基于 STC89C52 單片機(jī)和 DHT11 實(shí)現(xiàn)溫濕度的測量。單片機(jī)在本系統(tǒng)中作為溫濕度,時鐘輸入和顯示控制器件,DHT11 被用作溫濕度數(shù)據(jù)的采集和溫濕度輸出器件。最后采 nRF24L01 模塊對采集到的溫濕度時間 數(shù)據(jù)進(jìn)行無線傳輸,在接收端通過 LCD1602 液晶顯示模塊顯示接收的溫濕度,從而實(shí)現(xiàn)溫濕度的采集和無線傳送。 主要步驟: 1.通過查閱資料,了解無線溫濕度采集系統(tǒng)的研究背景、國內(nèi)外發(fā)展?fàn)顩r; 2.熟悉 LCD1602,DHT11,NRF24L01,蜂鳴器 等模塊的基本功能; 3.熟悉 Keil C51 軟件和 STC-ISP 軟件; 4.使用 Keil C51 軟件編寫應(yīng)用程序; 5.使用 STC-ISP 軟件將編譯好的程序燒寫進(jìn)單片機(jī); 6.調(diào)試并分析;
制作出來的實(shí)物圖如下:
IMG_20180129_113002_1_副本.jpg (327.17 KB, 下載次數(shù): 35)
下載附件
2020-11-21 19:36 上傳
IMG_20180129_113032_副本.jpg (488.93 KB, 下載次數(shù): 53)
下載附件
2020-11-21 19:36 上傳
1.png (654.79 KB, 下載次數(shù): 53)
下載附件
2020-11-21 19:37 上傳
2.png (488.96 KB, 下載次數(shù): 38)
下載附件
2020-11-21 19:37 上傳
單片機(jī)源程序如下:
- #include ".\\nRF24L01\\nRF24L01.h"
- #include "def.h"
- typedef unsigned char unint8;
- typedef unsigned char unint16;
- #define uint unsigned int
- unint8 com_data,untemp,temp;
- uchar U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
- uchar U8FLAG,U8comdata;
- uchar U8count,U8temp;
- uchar U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
- unint8 respond;
- void Delay(unsigned int s)
- {
- unsigned int i;
- for(i=0; i<s; i++);
- for(i=0; i<s; i++);
- }
- /*******************************************************************************************************
- DHT11相關(guān)命令
- ********************************************************************************************************/
- void Delay1(uint j)
- {
- uchar i;
- for(;j>0;j--)
- {
- for(i=0;i<27;i++);
- }
- }
- void Delay_10us(void)
- {
- uchar i;
- i--;
- i--;
- i--;
- i--;
- i--;
- i--;
- }
- void COM(void)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- U8FLAG=2;
- while((!DHT11)&&U8FLAG++);
- Delay_10us();
- Delay_10us();
- Delay_10us();
- U8temp=0;
- if(DHT11)U8temp=0;
- U8FLAG=2;
- while((DHT11)&&U8FLAG++);
- //超時則跳出for循環(huán)
- if(U8FLAG==0)break;
- //判斷數(shù)據(jù)位是0還是1
- // 如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為 1
- U8comdata<<=1;
- U8comdata|=U8temp; //
- }
- }
- //--------------------------------
- //-----濕度讀取子程序 ------------
- //--------------------------------
- //----以下變量均為全局變量--------
- //----溫度高8位== U8T_data_H------
- //----溫度低8位== U8T_data_L------
- //----濕度高8位== U8RH_data_H-----
- //----濕度低8位== U8RH_data_L-----
- //----校驗(yàn) 8位 == U8checkdata-----
- //----調(diào)用相關(guān)子程序如下----------
- //---- Delay();, Delay_10us();,COM();
- //--------------------------------
- void RH(void)
- {
- //主機(jī)拉低18ms
- DHT11=0;
- Delay1(180);
- ET0 = 0;//關(guān)閉定時器0中斷
- DHT11=1;
- //總線由上拉電阻拉高 主機(jī)延時20us
- Delay_10us();
- Delay_10us();
- Delay_10us();
- Delay_10us();
- //主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號
- DHT11=0;
- //判斷從機(jī)是否有低電平響應(yīng)信號 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行
- if(!DHT11) //T !
- {
- U8FLAG=2;
- //判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號是否結(jié)束
- while((!DHT11)&&U8FLAG++);
- U8FLAG=2;
- //判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
- while((DHT11)&&U8FLAG++);
- //數(shù)據(jù)接收狀態(tài)
- COM();
- U8RH_data_H_temp=U8comdata;
- COM();
- U8RH_data_L_temp=U8comdata;
- COM();
- U8T_data_H_temp=U8comdata;
- COM();
- U8T_data_L_temp=U8comdata;
- COM();
- U8checkdata_temp=U8comdata;
- DHT11=0;
- ET0 = 1;//開啟定時器0中斷
- //數(shù)據(jù)校驗(yàn)
- U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
- if(U8temp==U8checkdata_temp)
- {
- U8RH_data_H=U8RH_data_H_temp;
- U8RH_data_L=U8RH_data_L_temp;
- U8T_data_H=U8T_data_H_temp;
- U8T_data_L=U8T_data_L_temp;
- U8checkdata=U8checkdata_temp;
- }//fi
- }//fi
- }
-
- void main(void)
- {
- unsigned char leng =0;
- unsigned char tf =0;
- unsigned char TxBuf[20]={0}; //
- unsigned char RxBuf[20]={0};
- led=0;
- init_io() ;
- while(1)
- {
- inerDelay_us(100);
- CE=0; // chip enable
- CSN=0; // Spi disable
- SCK=0;
- RH();//溫濕度檢測受定時器影響,故在驅(qū)動程序中關(guān)閉定時器中斷,減小掃描頻率才能更好的實(shí)現(xiàn)紅外接收
- TxBuf[0] =U8T_data_H;
- TxBuf[2] =U8RH_data_H;
- tf = 0 ;
-
- SPI_RW_Reg(WRITE_REG+STATUS, 0xff); //
- CSN=0;
- SPI_RW(FLUSH_RX);//用于清空FIFO !!關(guān)鍵!!不然會出現(xiàn)意想不到的后果!!!大家記住!!
- CSN=1;
- if (tf==0)
- {
- led=0;
- nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data
- TxBuf[0] = 0x00;
- TxBuf[2] = 0x00;
- tf=0;
- Delay(60000);
- led=0;
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有程序51hei提供下載:
程序源碼與參考資料.7z
(1.93 MB, 下載次數(shù): 81)
2020-11-21 19:58 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|