|
無線溫濕度監測(NRF24L01+89c52+12864串行顯示+DS18B20+DHT11)
部分代碼如下:
想要一對多通信,經過簡單修改即可
IMG.jpg (1.31 MB, 下載次數: 98)
下載附件
2016-11-10 15:24 上傳
IMG1.png (58.18 KB, 下載次數: 117)
下載附件
2016-11-10 15:24 上傳
- /****************************************************************************************/
- /*NRF24L01要更改收發端,只需要通過是否宏定義RX即可,#define RX為接收端,不定義則為發送端*/
- /***************************************************************************************/
- /**************************************************************************************/
- /*通過DS18B20測試當前環境溫度, 通過DHT11測試濕度,并通過12864串行顯示當前溫度值********/
- /*目前顯示范圍: 溫度-55~ +125攝氏度,濕度20%-95% 濕度測量誤差:+-5%*******************/
- /*************************************************************************************/
- #include "reg52.H"
- #include "intrins.h"
- #include "math.H" //要用到取絕對值函數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 //接收端則要定義此,由于采用條件編譯,所以會在不同情況時,有函數沒被用到,報warning可不用在意
- extern uchar U8RH_data_H,U8RH_data_L; //需要應用到DHT11中的濕度全局變量
- int tempValue; //溫度數據用了全局變量
-
- 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(); //啟動DS18B20溫度轉換
- DS_sendReadCmd(); //發送DS18B20讀取數據命令
- tmp_L = DS18B20_RByte(); /*讀取的兩個字節分別寫入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發送
- nRF24L01_TxPacket(Tx_Buf); //發送TX寄存器數據
- Tx_Buf[0] = 0;
- Tx_Buf[1] = 0;
- Tx_Buf[2] = 0;
- Tx_Buf[3] = 0;
-
- #endif
-
- #ifdef RX //條件編譯
-
- NRF24L01_Init_RX(1); //接收時先初始化NRF24L01,注意為Init_RX(1),通道1接收
- nRF24L01_RxPacket(Rx_Buf); //讀取RX寄存器內數據
-
- /*溫濕度處理*/
-
- 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];
-
- /*溫度數據處理*/
-
- 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溫度數據寫入位置
- for(i = 0;i<6;i++)
- {
- lcd_wdata(TMPS[i]); //連續寫入溫度數據到LCD12864
- }
- lcd_setaddr(1,6); //寫入“℃”在LCD12864的顯示位置
- lcd_putstr("℃");
-
- /*以下為濕度*/
-
- lcd_setaddr(2,0);
- lcd_putstr("濕度:");
-
- /*濕度數據處理*/
-
- RHS[0] = 0x30+RH_H/10;
- RHS[1] = 0x30+RH_H%10;
- RHS[3] = 0x30+RH_L/10;
- /* *************** */
- lcd_setaddr(2,3); //LCD12864濕度數據顯示位置
- for(i = 0;i<5;i++)
- {
- lcd_wdata(RHS[i]); //連續寫入濕度數據到LCD12864
- }
- #endif
- }
- }
復制代碼
|
-
-
無線溫濕度監測.zip
2016-11-10 15:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
80.8 KB, 下載次數: 355, 下載積分: 黑幣 -5
評分
-
查看全部評分
|