久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8200|回復: 11
打印 上一主題 下一主題
收起左側

基于51單片機的無線溫濕度控制系統

  [復制鏈接]
跳轉到指定樓層
樓主

  1. 發射_DHT11程序
  2. //宏定義
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. //頭函數
  6. #include <reg51.h>
  7. #include <intrins.h>
  8. //無線模塊
  9. #include "api.h"
  10. #include "nRF24L01P.h"
  11. #include "DHT11.h"


  12. //LED 管腳定義
  13. sbit TXLED_R=P1^3;
  14. sbit RXLED_Y=P1^5;


  15. //主機詢問命令
  16. uchar CMD[]={0xaa,0xbb,0xcc,0xdd};

  17. //主函數
  18. void main()
  19. {
  20.         TXLED_R=0;                                          //初始化LED
  21.         RXLED_Y=0;
  22.         init_io();                              //無線初始化IO
  23.         RX_Mode();                              //設置為接收模式
  24.         TXLED_R=1;
  25.         RXLED_Y=1;
  26.         //循環執行
  27.         while(1)
  28.         {
  29.                 sta = SPI_Read(STATUS);          //讀狀態寄存器
  30.             if(RX_DR)                                     //判斷是否接受到數據
  31.                 {
  32.                         SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH);  //從RX FIFO讀出數據
  33.                         flag = 1;
  34.                         RXLED_Y=0;                          //打開接收指示燈
  35.                 }
  36.                 SPI_RW_Reg(WRITE_REG + STATUS, sta);  //清除RX_DS中斷標志
  37.                 if(flag)                              //接受完成
  38.                 {
  39.                         flag = 0;                        //清標志
  40.                         //命令為主機詢問
  41.                         if(RX_BUF[0]==CMD[0]&&RX_BUF[1]==CMD[1]&&RX_BUF[2]==CMD[2]&&RX_BUF[3]==CMD[3])
  42.                         {
  43.                                 //打開接收成功指示
  44.                                 //無線答應信號濕度 溫度       
  45.                                 RH();                                //DHT11讀取               
  46.                                 TX_BUF[0]=0xaa;
  47.                                 //T溫度
  48.                                 TX_BUF[1]=U8T_data_H;
  49.                                 //RH濕度
  50.                                 TX_BUF[2]=U8RH_data_H;
  51.                                 TX_BUF[3]=0xdd;
  52.                                 delay_ms(100);
  53.                                 RXLED_Y=1;                        //關閉接受射指示燈
  54.                                 TXLED_R=0;                        //打開發射指示燈
  55.                                 TX_Mode(TX_BUF);        // 把nRF24L01設置為發送模式并發送數據
  56.                                 Check_ACK(1);        // 等待發送完畢,清除TX FIFO
  57.                                 delay_ms(100);       
  58.                                 //發送成功指示
  59.                                 TXLED_R=1;                        //關閉發射指示燈
  60.                                 RX_Mode();                           // 設置為接收模式               
  61.                         }
  62.                 }
  63.         }
  64. }
復制代碼
  1. 接收_溫濕度控制程序
  2. //宏定義
  3. #define uchar unsigned char
  4. #define uint unsigned int


  5. //頭函數
  6. #include <reg51.h>
  7. #include <intrins.h>
  8. //屏幕函數調用
  9. #include "Lcd.h"   
  10. //無線模塊
  11. #include "api.h"
  12. #include "nRF24L01P.h"
  13. //繼電器定義
  14. sbit jiangwen=P3^5;
  15. sbit shengwen=P3^4;
  16. sbit choushi=P3^3;
  17. sbit jiashi=P3^2;
  18. //LED 管腳定義
  19. sbit TXLED_R=P1^3;
  20. sbit RXLED_Y=P1^5;
  21. //蜂鳴器
  22. sbit Feng=P1^2;
  23. //蜂鳴器閃爍標志位
  24. bit shan=0;
  25. #include "KEY.h"



  26. //主機詢問命令
  27. uchar CMD[]={0xaa,0xbb,0xcc,0xdd};
  28. uchar Mode=0;
  29. uchar temp=0;
  30. uchar KK=0;
  31. //報警溫濕度
  32. uchar TNumber=30,RHNumber=50,TX=20,HX=40;

  33. //主函數
  34. void main()
  35. {
  36.         TH0=0x4b;
  37.         TL0=0xff;//賦初值
  38.         TMOD=0x01;//設置工作方式
  39.         EA=1;//打開中斷總開關
  40.         ET0=1;//打開允許開關
  41.         TR0=1;
  42.         //LCD初始化顯示
  43.         Init_LCD();
  44.         delay_ms(250);
  45.         TXLED_R=0;                                          //初始化
  46.         RXLED_Y=0;
  47.         init_io();                           //無線初始化IO
  48.         RX_Mode();                           //設置為接收模式
  49.         TXLED_R=1;
  50.         RXLED_Y=1;
  51.         /////////////////////////////////////////////
  52.         TXLED_R=0;                                          //發送指示燈
  53.         ////////////////////////////////////////////////////////////////////////////////
  54.         //循環顯示
  55.         while(1)
  56.         {
  57.                 TXLED_R=0;                                          //發送指示燈       
  58.            TX_ACK();                                      //發送詢問信號       
  59.                 sta = SPI_Read(STATUS);                  //讀狀態寄存器
  60.                 TXLED_R=1;                                          //發送指示燈       
  61.                 if(RX_DR)                                           //判斷是否接受到數據
  62.                 {
  63.                         SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH);  // 從RX FIFO讀出數據
  64.                         flag = 1;
  65.                 }
  66.                 delay_ms(100);
  67.                 SPI_RW_Reg(WRITE_REG + STATUS, sta);  // 清除RX_DS中斷標志
  68.                 if(flag==1)                            // 接受完成
  69.                 {
  70.                         Mode=0;
  71.                         flag=0;
  72.                 }
  73.                 else                                                 //設備丟失
  74.                 {
  75.                         Mode=1;
  76.                 }       

  77.                 //顯示
  78.                 //數據顯示
  79.                 if(Mode==0)
  80.                 {               
  81.                         RXLED_Y=0;                               
  82.                         if(temp!=1)//重新初始化
  83.                         {
  84.                                 display1();
  85.                                 temp=1;
  86.                         }
  87.                         display2(RX_BUF[1],RX_BUF[2]);//顯示讀數
  88.                         if(RX_BUF[1]>TNumber) //溫度超標降溫
  89.                         {
  90.                                 jiangwen=0;
  91.                         }
  92.                         else
  93.                         {
  94.                                 jiangwen=1;
  95.                         }
  96.                         if(RX_BUF[1]<TX) //溫度過低升溫
  97.                         {
  98.                                 shengwen=0;
  99.                         }
  100.                         else
  101.                         {
  102.                                 shengwen=1;
  103.                         }
  104.                         if(RX_BUF[2]>RHNumber) //濕度超標抽濕
  105.                         {
  106.                                 choushi=0;
  107.                         }
  108.                         else
  109.                         {
  110.                                 choushi=1;
  111.                         }
  112.                         if(RX_BUF[2]<HX) //濕度過低加濕
  113.                         {
  114.                                 jiashi=0;
  115.                         }
  116.                         else
  117.                         {
  118.                                 jiashi=1;
  119.                         }
  120.                         if(((RX_BUF[1]>TNumber||RX_BUF[2]>RHNumber||RX_BUF[1]<TX||RX_BUF[2]<HX))&&(shan==1)) //超閥值蜂鳴器報警
  121.                         {
  122.                                 Feng=0;
  123.                         }
  124.                         else
  125.                         {
  126.                                 Feng=1;
  127.                         }
  128.                         RXLED_Y=1;       
  129.                 }
  130.                 //讀取鍵值
  131.                 KK=KEY_();
  132.                 if(KK==3)//調整模式
  133.                 {
  134.                         Mode=2;
  135.                         KK=0;
  136.                 }
  137.                 //數據顯示不在線
  138.            if(Mode==1)
  139.                 {
  140.                         if(temp!=2)
  141.                                 NoLine();//設備丟失
  142.                         temp=2;
  143.                 }
  144.                 //鍵盤
  145.                 else if(Mode==2)
  146.                 {
  147.                         temp=3;
  148.                         display3();
  149.                         display4(TNumber,RHNumber,TX,HX);
  150.                         write_com(0x0f);//打開光標
  151.                         write_com(0x80+5);
  152.                         //調溫上限
  153.                         while(KK!=3)
  154.                         {
  155.                                 //讀取鍵值
  156.                                 KK=KEY_();
  157.                                 if(KK==1)//++
  158.                                 {
  159.                                         TNumber++;
  160.                                         if(TNumber==51)
  161.                                                 TNumber=50;
  162.                                         display4(TNumber,RHNumber,TX,HX);
  163.                                         write_com(0x0f);//打開光標
  164.                                         write_com(0x80+5);
  165.                                 }
  166.                                 if(KK==2)//--       
  167.                                 {
  168.                                         TNumber--;
  169.                                         if(TNumber==TX)
  170.                                                 TNumber++;
  171.                                         display4(TNumber,RHNumber,TX,HX);
  172.                                         write_com(0x0f);//打開光標
  173.                                         write_com(0x80+5);                               
  174.                                 }
  175.                         }
  176.                         KK=0;
  177.                         write_com(0x0f);//打開光標
  178.                         write_com(0x80+0x40+5);
  179.                         //調溫x下限
  180.                         while(KK!=3)
  181.                         {
  182.                                 //讀取鍵值
  183.                                 KK=KEY_();
  184.                                 if(KK==1)//++
  185.                                 {
  186.                                         TX++;
  187.                                         if(TX==TNumber)
  188.                                                 TX--;
  189.                                         display4(TNumber,RHNumber,TX,HX);
  190.                                         write_com(0x0f);//打開光標
  191.                                         write_com(0x80+0x40+5);
  192.                                 }
  193.                                 if(KK==2)//--       
  194.                                 {
  195.                                         TX--;
  196.                                         if(TX==0xff)
  197.                                                 TX=0;
  198.                                         display4(TNumber,RHNumber,TX,HX);
  199.                                         write_com(0x0f);//打開光標
  200.                                         write_com(0x80+0x40+5);                               
  201.                                 }
  202.                         }
  203.                         KK=0;
  204.                         write_com(0x0f);//打開光標
  205.                         write_com(0x80+14);
  206.                         //調濕 上
  207.                         while(KK!=3)
  208.                         {
  209.                                 //讀取鍵值
  210.                                 KK=KEY_();       
  211.                                 if(KK==1)//++
  212.                                 {
  213.                                         RHNumber++;
  214.                                         if(RHNumber==91)
  215.                                                 RHNumber=90;
  216.                                         display4(TNumber,RHNumber,TX,HX);
  217.                                         write_com(0x0f);//打開光標
  218.                                         write_com(0x80+14);
  219.                                 }
  220.                                 if(KK==2)//--       
  221.                                 {
  222.                                         RHNumber--;
  223.                                         if(RHNumber==HX)
  224.                                                 RHNumber++;       
  225.                                         display4(TNumber,RHNumber,TX,HX);
  226.                                         write_com(0x0f);//打開光標
  227.                                         write_com(0x80+14);                       
  228.                                 }
  229.                         }
  230.                         KK=0;
  231.                         write_com(0x0f);//打開光標
  232.                         write_com(0x80+0x40+14);
  233.                                 //調濕 下
  234.                         while(KK!=3)
  235.                         {
  236.                                 //讀取鍵值
  237.                                 KK=KEY_();       
  238.                                 if(KK==1)//++
  239.                                 {
  240.                                         HX++;
  241.                                         if(HX==RHNumber)
  242.                                                 HX--;
  243.                                         display4(TNumber,RHNumber,TX,HX);
  244.                                         write_com(0x0f);//打開光標
  245.                                         write_com(0x80+0x40+14);
  246.                                 }
  247.                                 if(KK==2)//--       
  248.                                 {
  249.                                         HX--;
  250.                                         if(HX==19)
  251.                                                 HX=20;       
  252.                                         display4(TNumber,RHNumber,TX,HX);
  253.                                         write_com(0x0f);//打開光標
  254.                                         write_com(0x80+0x40+14);                       
  255.                                 }
  256.                         }
  257.                         KK=0;
  258.                 }
  259.                 delay_ms(200);       
  260.                 delay_ms(200);
  261.                 delay_ms(200);               
  262.         }
  263. }
  264. void time0() interrupt 1//定時器函數
  265. {
  266.         uchar m;
  267.         TH0=0x4b;
  268.         TL0=0xff;//重新賦初值
  269.         m++;
  270.         if(m==4)
  271.         {
  272.                 shan=~shan;       
  273.                 m=0;
  274.         }
  275. }

復制代碼

基于51單片機的無線溫濕度控制系統.rar (542.46 KB, 下載次數: 245)




評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂3 踩
回復

使用道具 舉報

沙發
ID:452816 發表于 2019-4-4 19:11 | 只看該作者
學習到了!
回復

使用道具 舉報

板凳
ID:486067 發表于 2019-4-10 10:59 | 只看該作者
感謝樓主,幫了我的大忙
回復

使用道具 舉報

地板
ID:496361 發表于 2019-5-8 00:10 | 只看該作者
求仿真啊樓主 跪求 有償
回復

使用道具 舉報

5#
ID:528782 發表于 2019-5-13 14:58 | 只看該作者
樓主這是屬于什么協議進行通信?
回復

使用道具 舉報

6#
ID:282650 發表于 2019-12-9 08:45 | 只看該作者
改一下應該可以多從機
回復

使用道具 舉報

7#
ID:662516 發表于 2019-12-13 19:28 | 只看該作者
轟多尼?
回復

使用道具 舉報

8#
ID:662516 發表于 2019-12-13 19:32 | 只看該作者
牛皮
回復

使用道具 舉報

9#
ID:701576 發表于 2020-3-3 10:35 | 只看該作者
請問能給一個最基礎的51單片機控制溫濕度的解釋嗎,小白求助
回復

使用道具 舉報

10#
ID:722714 發表于 2020-4-5 17:44 | 只看該作者
為什么要繼電器驅動
回復

使用道具 舉報

11#
ID:543424 發表于 2020-4-23 19:56 | 只看該作者
為什么我下載測試,接收連通了開機始終采集不到?溫度和濕度顯示都是0,請問是什么問題求指導謝謝。
回復

使用道具 舉報

12#
ID:368810 發表于 2020-5-10 20:35 | 只看該作者
proteus仿真有嗎,樓主
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区三区四区av | 日韩一区二区三区在线视频 | 一区二区三区在线 | 日本一区视频在线观看 | av一区二区三区在线观看 | 黄色大片免费网站 | 日韩福利| 黄色精品视频网站 | 日韩不卡一区二区三区 | 99热在这里只有精品 | 久久婷婷色 | 日韩欧美字幕 | 日韩欧美在线视频 | 观看毛片 | 欧美一级特黄aaa大片在线观看 | 精品一区二区三区四区在线 | 成年人视频免费在线观看 | 91久久久久 | 日韩欧美中文 | 亚洲国产二区 | 国产精品爱久久久久久久 | 国产成在线观看免费视频 | www.4hu影院| 精品在线一区二区三区 | 日韩福利在线 | 日本特黄a级高清免费大片 特黄色一级毛片 | 91久久精品国产免费一区 | 91色在线视频 | 日本成人在线免费视频 | 久久久久久网站 | 91色视频在线观看 | 孰女乱色一区二区三区 | 中文字幕在线看人 | 国产一级毛片视频 | 国产欧美精品一区二区色综合朱莉 | 曰韩三级| 日韩中文一区 | 夜夜久久| 羞羞视频免费在线观看 | 天天艹 | 日本三级电影在线看 |