单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1934|回复: 5
打印 上一主题 下一主题
收起左侧

无线温湿度监测(NRF24L01+89c52+12864串行显示+DS18B20+DHT11)

赌球网|真人赌球网|世界杯赌球网
跳转到指定楼层
楼主
无线温湿度监测(NRF24L01+89c52+12864串行显示+DS18B20+DHT11)
部分代码如下:
想要一对多通信,经过简单修改即可

  1. /****************************************************************************************/
  2. /*NRF24L01要更改收发端,只需要通过是否宏定义RX即可,#define RX为接收端,不定义则为发送端*/
  3. /***************************************************************************************/
  4. /**************************************************************************************/
  5. /*通过DS18B20测试当前环境温度, 通过DHT11测试湿度,并通过12864串行显示当前温度值********/
  6. /*目前显示范围: 温度-55~ +125摄氏度,湿度20%-95% 湿度测量误差:+-5%*******************/
  7. /*************************************************************************************/

  8. #include "reg52.H"
  9. #include "intrins.h"
  10. #include "math.H"  //要用到取绝对值函数abs()

  11. #include "DELAY.H"
  12. #include "DS18B20.H"
  13. #include "12864.h"
  14. #include "DHT11.H"
  15. #include "nRF24L01.H"

  16. #define uchar unsigned char
  17. #define uint unsigned int

  18. //#define RX          //接收端则要定义此,由于采用条件编译,所以会在不同情况时,有函数没被用到,报warning可不用在意

  19. extern uchar U8RH_data_H,U8RH_data_L;        //需要应用到DHT11中的湿度全局变量
  20. int tempValue;                                                        //温度数据用了全局变量
  21.   

  22. uchar Rx_Buf[RX_PLOAD_WIDTH];               
  23. uchar Tx_Buf[TX_PLOAD_WIDTH];


  24. /*MAIN*/


  25. void main()
  26. {
  27.   unsigned char TMPS[] = {0,0,0,0x2e,0,0};
  28.   unsigned char RHS[] = {0,0,0x2e,0,0x25};
  29.   uchar i,RH_H,RH_L,tmp_H,tmp_L,TMP;  uint tmp;int TMP_Value,tmpvalue;
  30.   float t;

  31.   LCD_INIT();         //LCD12864定义

  32.   while(1)
  33.   {
  34.    #ifndef RX                   //条件编译

  35.                   DS_sendChangeCmd();                   //启动DS18B20温度转换
  36.                 DS_sendReadCmd();                   //发送DS18B20读取数据命令
  37.                 tmp_L = DS18B20_RByte();   /*读取的两个字节分别写入tmp_L和tmp_H
  38.                                                                 */
  39.                 tmp_H = DS18B20_RByte();
  40.                 RH();                                        //DHT11初始化
  41.             RH_H= U8RH_data_H;                 //全局定义的湿度高八位给RH_H暂存
  42.         RH_L= U8RH_data_L;                 //全局定义的湿度低八位给RH_L暂存
  43.                 SPI_RW(FLUSH_TX);                //清寄存器
  44.                 Tx_Buf[0] = tmp_L;                //温度低八位
  45.                 Tx_Buf[1] = tmp_H;                //温度高八位
  46.                 Tx_Buf[2] = RH_L;                //湿度低八位
  47.                 Tx_Buf[3] = RH_H;                //湿度高八位
  48.             NRF24L01_Init_TX(1);          //初始化,用通道1发送
  49.             nRF24L01_TxPacket(Tx_Buf);          //发送TX寄存器数据
  50.                 Tx_Buf[0] = 0;
  51.                 Tx_Buf[1] = 0;
  52.                 Tx_Buf[2] = 0;
  53.                 Tx_Buf[3] = 0;

  54.            
  55.         #endif
  56.            
  57.         #ifdef RX                         //条件编译
  58.                
  59.                 NRF24L01_Init_RX(1);           //接收时先初始化NRF24L01,注意为Init_RX(1),通道1接收        
  60.                 nRF24L01_RxPacket(Rx_Buf);         //读取RX寄存器内数据
  61.                
  62.                  /*温湿度处理*/
  63.         
  64.                 lcd_setaddr(1,0);                                //“温度”汉字在LCD12864显示位置
  65.                 lcd_putstr("温度:");
  66.                
  67.                 /*温湿度高低八位分别暂存*/
  68.                 tmp_L = Rx_Buf[0];                                
  69.                 tmp_H = Rx_Buf[1];
  70.                 RH_L  = Rx_Buf[2];
  71.                 RH_H  = Rx_Buf[3];
  72.                
  73.                 /*温度数据处理*/
  74.                
  75.                 TMP_Value = tmp_H;
  76.                 TMP_Value <<= 8;
  77.                 TMP_Value |= tmp_L;
  78.                 t = TMP_Value * 0.0625;
  79.                 TMP_Value = t * 100 + (TMP_Value > 0 ? 0.5 : -0.5);
  80.                 tempValue = TMP_Value;
  81.                 tmp = abs(tempValue);
  82.                 TMPS[0] = 0x30+tmp / 10000;
  83.                 TMPS[1] = 0x30+tmp % 10000 / 1000;
  84.                 TMPS[2] = 0x30+tmp % 1000 / 100;
  85.                 TMPS[4] = 0x30+tmp % 100 / 10;
  86.                 TMPS[5] = 0x30+tmp % 10;
  87.                 /*****************/
  88.                 lcd_setaddr(1,3);                          //LCD12864温度数据写入位置
  89.         for(i = 0;i<6;i++)
  90.              {
  91.           lcd_wdata(TMPS[i]);                  //连续写入温度数据到LCD12864
  92.         }
  93.         lcd_setaddr(1,6);                         //写入“℃”在LCD12864的显示位置
  94.         lcd_putstr("℃");
  95.                
  96.                 /*以下为湿度*/
  97.            
  98.                    lcd_setaddr(2,0);
  99.             lcd_putstr("湿度:");
  100.                
  101.                 /*湿度数据处理*/
  102.    
  103.                 RHS[0] = 0x30+RH_H/10;         
  104.             RHS[1] = 0x30+RH_H%10;
  105.             RHS[3] = 0x30+RH_L/10;
  106.                 /* *************** */
  107.             lcd_setaddr(2,3);           //LCD12864湿度数据显示位置
  108.             for(i = 0;i<5;i++)
  109.             {
  110.               lcd_wdata(RHS[i]);   //连续写入湿度数据到LCD12864
  111.             }

  112.   #endif
  113.   }
  114. }
复制代码



无线温湿度监测.zip

80.8 KB, 下载次数: 98, 下载积分: 黑币 -5

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

来自 5#
 楼主| A007320806 发表于 2016-11-24 22:18 | 只看该作者
最新更新帖子  http://www.drawyourideal.com/bbs/dpj-58407-1.html  包括PCB及原理图,可调温度报警值。
沙发
 楼主| A007320806 发表于 2016-11-10 15:31 | 只看该作者
NRF24L01模块需要特别注意应用电压!!
还有就是要仔细看它的使用手册。
板凳
好男人就是我 发表于 2016-11-10 16:01 | 只看该作者
感谢分享!
地板
yjj8 发表于 2016-11-14 19:35 | 只看该作者
不错不错。。。。
6#
无效楼层,赌球网|真人赌球网|世界杯赌球网:该帖已经被删除
7#
403353852 发表于 2018-4-28 21:20 | 只看该作者
很厉害! 在下佩服佩服
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛

Powered by 单片机教程网

快速回复 赌球网|真人赌球网|世界杯赌球网 返回列表