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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+NRF2401+DHT11遠程溫濕度控制程序

[復制鏈接]
跳轉到指定樓層
樓主
本設計是基于 STC89C52 單片機和 DHT11 實現溫濕度的測量。單片機在本系統中溫濕度,時鐘輸入和顯示控制器件,DHT11 被用作溫濕度數據的采集和溫濕度輸出器件。最后采 nRF24L01 模塊對采集到的溫濕度時間 數據進行無線傳輸,在接收端通過 LCD1602 液晶顯示模塊顯示接收的溫濕度,從而實現溫濕度的采集和無線傳送。
主要步驟:
1.通過查閱資料,了解無線溫濕度采集系統的研究背景、國內外發展狀況;
2.熟悉 LCD1602,DHT11,NRF24L01,蜂鳴器 等模塊的基功能;
3.熟悉 Keil C51 軟件和 STC-ISP 軟件;
4.使用 Keil C51 軟件編寫應用序;
5.使用 STC-ISP 軟件將編譯的程燒寫單片
6.調試并分析;


制作出來的實物圖如下:


單片機源程序如下:
  1. #include ".\\nRF24L01\\nRF24L01.h"
  2. #include "def.h"
  3. typedef unsigned char unint8;
  4. typedef unsigned char unint16;
  5. #define uint unsigned int
  6. unint8 com_data,untemp,temp;
  7. uchar  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  8. uchar  U8FLAG,U8comdata;
  9. uchar  U8count,U8temp;
  10. uchar  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
  11. unint8 respond;
  12. void Delay(unsigned int s)
  13. {
  14.         unsigned int i;
  15.         for(i=0; i<s; i++);
  16.         for(i=0; i<s; i++);
  17. }

  18. /*******************************************************************************************************
  19.                                                                                                                                                                                 DHT11相關命令            
  20. ********************************************************************************************************/
  21. void Delay1(uint j)
  22. {  
  23.         uchar i;
  24.         for(;j>0;j--)
  25.         {         
  26.                 for(i=0;i<27;i++);
  27.         }
  28. }

  29. void  Delay_10us(void)
  30. {
  31.         uchar i;
  32.         i--;
  33.         i--;
  34.         i--;
  35.         i--;
  36.         i--;
  37.         i--;
  38. }




  39. void  COM(void)
  40. {
  41.         uchar i;
  42.         for(i=0;i<8;i++)           
  43.         {
  44.                 U8FLAG=2;        
  45.                 while((!DHT11)&&U8FLAG++);
  46.                 Delay_10us();
  47.                 Delay_10us();
  48.                 Delay_10us();
  49.                 U8temp=0;
  50.                 if(DHT11)U8temp=0;
  51.                 U8FLAG=2;
  52.                 while((DHT11)&&U8FLAG++);
  53.                 //超時則跳出for循環                  
  54.                 if(U8FLAG==0)break;
  55.                 //判斷數據位是0還是1         
  56.                 // 如果高電平高過預定0高電平值則數據位為 1
  57.                 U8comdata<<=1;
  58.                 U8comdata|=U8temp;        //
  59.         }
  60. }
  61. //--------------------------------
  62. //-----濕度讀取子程序 ------------
  63. //--------------------------------
  64. //----以下變量均為全局變量--------
  65. //----溫度高8位== U8T_data_H------
  66. //----溫度低8位== U8T_data_L------
  67. //----濕度高8位== U8RH_data_H-----
  68. //----濕度低8位== U8RH_data_L-----
  69. //----校驗 8位 == U8checkdata-----
  70. //----調用相關子程序如下----------
  71. //---- Delay();, Delay_10us();,COM();
  72. //--------------------------------

  73. void RH(void)
  74. {
  75.         //主機拉低18ms
  76.         DHT11=0;
  77.         Delay1(180);
  78.         ET0 = 0;//關閉定時器0中斷
  79.         DHT11=1;
  80.         //總線由上拉電阻拉高 主機延時20us
  81.         Delay_10us();
  82.         Delay_10us();
  83.         Delay_10us();
  84.         Delay_10us();
  85.         //主機設為輸入 判斷從機響應信號
  86.         DHT11=0;
  87.         //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行         
  88.         if(!DHT11)                 //T !         
  89.         {
  90.                 U8FLAG=2;
  91.                 //判斷從機是否發出 80us 的低電平響應信號是否結束         
  92.                 while((!DHT11)&&U8FLAG++);
  93.                 U8FLAG=2;
  94.                 //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
  95.                 while((DHT11)&&U8FLAG++);
  96.                 //數據接收狀態                 
  97.                 COM();
  98.                 U8RH_data_H_temp=U8comdata;
  99.                 COM();
  100.                 U8RH_data_L_temp=U8comdata;
  101.                 COM();
  102.                 U8T_data_H_temp=U8comdata;
  103.                 COM();
  104.                 U8T_data_L_temp=U8comdata;
  105.                 COM();
  106.                 U8checkdata_temp=U8comdata;
  107.                 DHT11=0;
  108.                 ET0 = 1;//開啟定時器0中斷
  109.                 //數據校驗

  110.                 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
  111.                 if(U8temp==U8checkdata_temp)
  112.                 {
  113.                         U8RH_data_H=U8RH_data_H_temp;
  114.                         U8RH_data_L=U8RH_data_L_temp;
  115.                         U8T_data_H=U8T_data_H_temp;
  116.                         U8T_data_L=U8T_data_L_temp;
  117.                         U8checkdata=U8checkdata_temp;
  118.                 }//fi
  119.         }//fi

  120. }
  121.         

  122. void main(void)
  123. {
  124.         unsigned char leng =0;
  125.         unsigned char tf =0;
  126.         unsigned char TxBuf[20]={0};         //
  127.         unsigned char RxBuf[20]={0};        
  128.         led=0;
  129.     init_io() ;
  130.         while(1)
  131.         {           
  132.                inerDelay_us(100);
  133.                 CE=0;   // chip enable
  134.                 CSN=0;   // Spi disable
  135.                 SCK=0;   
  136.                                 RH();//溫濕度檢測受定時器影響,故在驅動程序中關閉定時器中斷,減小掃描頻率才能更好的實現紅外接收
  137.                    TxBuf[0] =U8T_data_H;
  138.                    TxBuf[2] =U8RH_data_H;
  139.                    tf = 0 ;
  140.            
  141.             SPI_RW_Reg(WRITE_REG+STATUS, 0xff);      //
  142.             CSN=0;
  143.             SPI_RW(FLUSH_RX);//用于清空FIFO !!關鍵!!不然會出現意想不到的后果。!大家記住。
  144.             CSN=1;                 
  145.            if (tf==0)
  146.        {        
  147.                 led=0;
  148.                         nRF24L01_TxPacket(TxBuf);        // Transmit Tx buffer data
  149.                         TxBuf[0] = 0x00;
  150.                         TxBuf[2] = 0x00;
  151.                         tf=0;
  152.                         Delay(60000);
  153.                         led=0;
  154.            }

  155. ……………………

  156. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有程序51hei提供下載:
程序源碼與參考資料.7z (1.93 MB, 下載次數: 81)

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区福利视频 | 欧美13videosex性极品 | 成人免费在线视频 | 国产精品久久久久久久免费观看 | 精品三级在线观看 | av黄色免费在线观看 | 午夜一区| 男女视频在线观看网站 | 暴草美女| 国产91久久精品一区二区 | 国产精品99久久久久久宅男 | 噜久寡妇噜噜久久寡妇 | 91视频久久 | 欧美性jizz18性欧美 | 久久高清国产视频 | 日韩在线免费电影 | 亚洲成av片人久久久 | 亚洲精品大片 | 偷拍自拍网址 | 中文字幕av一区 | 天天草av | 久久久久国产 | av毛片在线播放 | 亚洲精品日韩一区二区电影 | 成人综合一区 | 成年人在线播放 | 成人免费av | 91精品国模一区二区三区 | 亚洲精品9999久久久久 | 日韩三极 | 成人av一区二区在线观看 | 久久久一区二区三区 | 精品欧美一区二区中文字幕视频 | 男女国产网站 | 国产999精品久久久久久 | 日韩精品一区二区三区中文在线 | 成年人在线观看 | av天天澡天天爽天天av | 欧美激情精品久久久久久 | 91精品久久久 | 亚洲欧美激情视频 |