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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8049|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的無線溫濕度控制系統(tǒng)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:502576 發(fā)表于 2019-4-1 17:40 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

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

  5. //頭函數(shù)
  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. //主機(jī)詢問命令
  16. uchar CMD[]={0xaa,0xbb,0xcc,0xdd};

  17. //主函數(shù)
  18. void main()
  19. {
  20.         TXLED_R=0;                                          //初始化LED
  21.         RXLED_Y=0;
  22.         init_io();                              //無線初始化IO
  23.         RX_Mode();                              //設(shè)置為接收模式
  24.         TXLED_R=1;
  25.         RXLED_Y=1;
  26.         //循環(huán)執(zhí)行
  27.         while(1)
  28.         {
  29.                 sta = SPI_Read(STATUS);          //讀狀態(tài)寄存器
  30.             if(RX_DR)                                     //判斷是否接受到數(shù)據(jù)
  31.                 {
  32.                         SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH);  //從RX FIFO讀出數(shù)據(jù)
  33.                         flag = 1;
  34.                         RXLED_Y=0;                          //打開接收指示燈
  35.                 }
  36.                 SPI_RW_Reg(WRITE_REG + STATUS, sta);  //清除RX_DS中斷標(biāo)志
  37.                 if(flag)                              //接受完成
  38.                 {
  39.                         flag = 0;                        //清標(biāo)志
  40.                         //命令為主機(jī)詢問
  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.                                 //無線答應(yīng)信號濕度 溫度       
  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;                        //關(guān)閉接受射指示燈
  54.                                 TXLED_R=0;                        //打開發(fā)射指示燈
  55.                                 TX_Mode(TX_BUF);        // 把nRF24L01設(shè)置為發(fā)送模式并發(fā)送數(shù)據(jù)
  56.                                 Check_ACK(1);        // 等待發(fā)送完畢,清除TX FIFO
  57.                                 delay_ms(100);       
  58.                                 //發(fā)送成功指示
  59.                                 TXLED_R=1;                        //關(guān)閉發(fā)射指示燈
  60.                                 RX_Mode();                           // 設(shè)置為接收模式               
  61.                         }
  62.                 }
  63.         }
  64. }
復(fù)制代碼
  1. 接收_溫濕度控制程序
  2. //宏定義
  3. #define uchar unsigned char
  4. #define uint unsigned int


  5. //頭函數(shù)
  6. #include <reg51.h>
  7. #include <intrins.h>
  8. //屏幕函數(shù)調(diào)用
  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. //蜂鳴器閃爍標(biāo)志位
  24. bit shan=0;
  25. #include "KEY.h"



  26. //主機(jī)詢問命令
  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. //主函數(shù)
  34. void main()
  35. {
  36.         TH0=0x4b;
  37.         TL0=0xff;//賦初值
  38.         TMOD=0x01;//設(shè)置工作方式
  39.         EA=1;//打開中斷總開關(guān)
  40.         ET0=1;//打開允許開關(guān)
  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();                           //設(shè)置為接收模式
  49.         TXLED_R=1;
  50.         RXLED_Y=1;
  51.         /////////////////////////////////////////////
  52.         TXLED_R=0;                                          //發(fā)送指示燈
  53.         ////////////////////////////////////////////////////////////////////////////////
  54.         //循環(huán)顯示
  55.         while(1)
  56.         {
  57.                 TXLED_R=0;                                          //發(fā)送指示燈       
  58.            TX_ACK();                                      //發(fā)送詢問信號       
  59.                 sta = SPI_Read(STATUS);                  //讀狀態(tài)寄存器
  60.                 TXLED_R=1;                                          //發(fā)送指示燈       
  61.                 if(RX_DR)                                           //判斷是否接受到數(shù)據(jù)
  62.                 {
  63.                         SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH);  // 從RX FIFO讀出數(shù)據(jù)
  64.                         flag = 1;
  65.                 }
  66.                 delay_ms(100);
  67.                 SPI_RW_Reg(WRITE_REG + STATUS, sta);  // 清除RX_DS中斷標(biāo)志
  68.                 if(flag==1)                            // 接受完成
  69.                 {
  70.                         Mode=0;
  71.                         flag=0;
  72.                 }
  73.                 else                                                 //設(shè)備丟失
  74.                 {
  75.                         Mode=1;
  76.                 }       

  77.                 //顯示
  78.                 //數(shù)據(jù)顯示
  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]);//顯示讀數(shù)
  88.                         if(RX_BUF[1]>TNumber) //溫度超標(biāo)降溫
  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) //濕度超標(biāo)抽濕
  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)//調(diào)整模式
  133.                 {
  134.                         Mode=2;
  135.                         KK=0;
  136.                 }
  137.                 //數(shù)據(jù)顯示不在線
  138.            if(Mode==1)
  139.                 {
  140.                         if(temp!=2)
  141.                                 NoLine();//設(shè)備丟失
  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);//打開光標(biāo)
  151.                         write_com(0x80+5);
  152.                         //調(diào)溫上限
  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);//打開光標(biāo)
  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);//打開光標(biāo)
  173.                                         write_com(0x80+5);                               
  174.                                 }
  175.                         }
  176.                         KK=0;
  177.                         write_com(0x0f);//打開光標(biāo)
  178.                         write_com(0x80+0x40+5);
  179.                         //調(diào)溫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);//打開光標(biāo)
  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);//打開光標(biāo)
  200.                                         write_com(0x80+0x40+5);                               
  201.                                 }
  202.                         }
  203.                         KK=0;
  204.                         write_com(0x0f);//打開光標(biāo)
  205.                         write_com(0x80+14);
  206.                         //調(diào)濕 上
  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);//打開光標(biāo)
  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);//打開光標(biāo)
  227.                                         write_com(0x80+14);                       
  228.                                 }
  229.                         }
  230.                         KK=0;
  231.                         write_com(0x0f);//打開光標(biāo)
  232.                         write_com(0x80+0x40+14);
  233.                                 //調(diào)濕 下
  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);//打開光標(biāo)
  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);//打開光標(biāo)
  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//定時器函數(shù)
  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. }

復(fù)制代碼

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




評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:452816 發(fā)表于 2019-4-4 19:11 | 只看該作者
學(xué)習(xí)到了!
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

5#
ID:528782 發(fā)表于 2019-5-13 14:58 | 只看該作者
樓主這是屬于什么協(xié)議進(jìn)行通信?
回復(fù)

使用道具 舉報

6#
ID:282650 發(fā)表于 2019-12-9 08:45 | 只看該作者
改一下應(yīng)該可以多從機(jī)
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产精品 | 国产欧美一区二区三区日本久久久 | 国产精品a久久久久 | 亚洲国产精品人人爽夜夜爽 | 亚洲成人中文字幕 | 日本久久久久久 | 99精品久久 | 精品亚洲一区二区三区 | 视频一区二区中文字幕日韩 | 中文字幕精品一区二区三区在线 | 国产精品视频播放 | 欧美成视频 | 成人一区在线观看 | 久久里面有精品 | 午夜影晥| 国产ts人妖系列高潮 | 日韩欧美一区二区三区免费观看 | 日韩欧美在线观看视频 | 免费日韩av网站 | 精国产品一区二区三区 | 日韩一区二区成人 | 欧美精品成人一区二区三区四区 | 99精品久久久 | 久久久看 | 日韩一区二区在线视频 | 91精品国产乱码久久久久久久久 | 国产永久免费 | 99riav国产一区二区三区 | 视频一区在线 | 91视频官网| 奇米久久 | 国产精久久久久久久 | 精品久久久久久久 | h视频在线观看免费 | 亚洲精品在线视频 | 国产精品视频免费看 | 国产在线观看一区二区三区 | 久久精品 | 日韩欧美一区二区三区免费观看 | 午夜视频一区二区 | 亚洲精品区 |