|
無線溫濕度監(jiān)測(cè)(NRF24L01+89c52+12864串行顯示+DS18B20+DHT11)
部分代碼如下:
想要一對(duì)多通信,經(jīng)過簡(jiǎn)單修改即可
IMG.jpg (1.31 MB, 下載次數(shù): 98)
下載附件
2016-11-10 15:24 上傳
IMG1.png (58.18 KB, 下載次數(shù): 117)
下載附件
2016-11-10 15:24 上傳
- /****************************************************************************************/
- /*NRF24L01要更改收發(fā)端,只需要通過是否宏定義RX即可,#define RX為接收端,不定義則為發(fā)送端*/
- /***************************************************************************************/
- /**************************************************************************************/
- /*通過DS18B20測(cè)試當(dāng)前環(huán)境溫度, 通過DHT11測(cè)試濕度,并通過12864串行顯示當(dāng)前溫度值********/
- /*目前顯示范圍: 溫度-55~ +125攝氏度,濕度20%-95% 濕度測(cè)量誤差:+-5%*******************/
- /*************************************************************************************/
- #include "reg52.H"
- #include "intrins.h"
- #include "math.H" //要用到取絕對(duì)值函數(shù)abs()
- #include "DELAY.H"
- #include "DS18B20.H"
- #include "12864.h"
- #include "DHT11.H"
- #include "nRF24L01.H"
- #define uchar unsigned char
- #define uint unsigned int
- //#define RX //接收端則要定義此,由于采用條件編譯,所以會(huì)在不同情況時(shí),有函數(shù)沒被用到,報(bào)warning可不用在意
- extern uchar U8RH_data_H,U8RH_data_L; //需要應(yīng)用到DHT11中的濕度全局變量
- int tempValue; //溫度數(shù)據(jù)用了全局變量
-
- uchar Rx_Buf[RX_PLOAD_WIDTH];
- uchar Tx_Buf[TX_PLOAD_WIDTH];
- /*MAIN*/
- void main()
- {
- unsigned char TMPS[] = {0,0,0,0x2e,0,0};
- unsigned char RHS[] = {0,0,0x2e,0,0x25};
- uchar i,RH_H,RH_L,tmp_H,tmp_L,TMP; uint tmp;int TMP_Value,tmpvalue;
- float t;
- LCD_INIT(); //LCD12864定義
- while(1)
- {
- #ifndef RX //條件編譯
- DS_sendChangeCmd(); //啟動(dòng)DS18B20溫度轉(zhuǎn)換
- DS_sendReadCmd(); //發(fā)送DS18B20讀取數(shù)據(jù)命令
- tmp_L = DS18B20_RByte(); /*讀取的兩個(gè)字節(jié)分別寫入tmp_L和tmp_H
- */
- tmp_H = DS18B20_RByte();
- RH(); //DHT11初始化
- RH_H= U8RH_data_H; //全局定義的濕度高八位給RH_H暫存
- RH_L= U8RH_data_L; //全局定義的濕度低八位給RH_L暫存
- SPI_RW(FLUSH_TX); //清寄存器
- Tx_Buf[0] = tmp_L; //溫度低八位
- Tx_Buf[1] = tmp_H; //溫度高八位
- Tx_Buf[2] = RH_L; //濕度低八位
- Tx_Buf[3] = RH_H; //濕度高八位
- NRF24L01_Init_TX(1); //初始化,用通道1發(fā)送
- nRF24L01_TxPacket(Tx_Buf); //發(fā)送TX寄存器數(shù)據(jù)
- Tx_Buf[0] = 0;
- Tx_Buf[1] = 0;
- Tx_Buf[2] = 0;
- Tx_Buf[3] = 0;
-
- #endif
-
- #ifdef RX //條件編譯
-
- NRF24L01_Init_RX(1); //接收時(shí)先初始化NRF24L01,注意為Init_RX(1),通道1接收
- nRF24L01_RxPacket(Rx_Buf); //讀取RX寄存器內(nèi)數(shù)據(jù)
-
- /*溫濕度處理*/
-
- lcd_setaddr(1,0); //“溫度”漢字在LCD12864顯示位置
- lcd_putstr("溫度:");
-
- /*溫濕度高低八位分別暫存*/
- tmp_L = Rx_Buf[0];
- tmp_H = Rx_Buf[1];
- RH_L = Rx_Buf[2];
- RH_H = Rx_Buf[3];
-
- /*溫度數(shù)據(jù)處理*/
-
- TMP_Value = tmp_H;
- TMP_Value <<= 8;
- TMP_Value |= tmp_L;
- t = TMP_Value * 0.0625;
- TMP_Value = t * 100 + (TMP_Value > 0 ? 0.5 : -0.5);
- tempValue = TMP_Value;
- tmp = abs(tempValue);
- TMPS[0] = 0x30+tmp / 10000;
- TMPS[1] = 0x30+tmp % 10000 / 1000;
- TMPS[2] = 0x30+tmp % 1000 / 100;
- TMPS[4] = 0x30+tmp % 100 / 10;
- TMPS[5] = 0x30+tmp % 10;
- /*****************/
- lcd_setaddr(1,3); //LCD12864溫度數(shù)據(jù)寫入位置
- for(i = 0;i<6;i++)
- {
- lcd_wdata(TMPS[i]); //連續(xù)寫入溫度數(shù)據(jù)到LCD12864
- }
- lcd_setaddr(1,6); //寫入“℃”在LCD12864的顯示位置
- lcd_putstr("℃");
-
- /*以下為濕度*/
-
- lcd_setaddr(2,0);
- lcd_putstr("濕度:");
-
- /*濕度數(shù)據(jù)處理*/
-
- RHS[0] = 0x30+RH_H/10;
- RHS[1] = 0x30+RH_H%10;
- RHS[3] = 0x30+RH_L/10;
- /* *************** */
- lcd_setaddr(2,3); //LCD12864濕度數(shù)據(jù)顯示位置
- for(i = 0;i<5;i++)
- {
- lcd_wdata(RHS[i]); //連續(xù)寫入濕度數(shù)據(jù)到LCD12864
- }
- #endif
- }
- }
復(fù)制代碼
|
-
-
無線溫濕度監(jiān)測(cè).zip
2016-11-10 15:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
80.8 KB, 下載次數(shù): 355, 下載積分: 黑幣 -5
評(píng)分
-
查看全部評(píng)分
|