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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

基于51單片機(jī)的藍(lán)牙溫濕度測(cè)量控制程序 原理圖PCB文件

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
Altium Designer畫(huà)的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


程序流程圖:


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include <stdio.h>
  3. extern unsigned char  F16T,F16RH;                //溫濕度數(shù)據(jù)
  4. unsigned char Rx_buf[4],Rxnum=0,temp,rh;
  5. sbit LED1=P2^0;                                                //投停自動(dòng)按鍵
  6. sbit LED2=P2^3;                                                //加溫啟啟指示燈(如果要實(shí)現(xiàn)控制,可在這個(gè)端口加裝上樓層電器模塊)
  7. sbit LED3=P2^6;                                                //加濕啟啟指示燈(如果要實(shí)現(xiàn)控制,可在這個(gè)端口加裝上樓層電器模塊)
  8. sbit k1=P1^4;                                                //投停自動(dòng)按鍵
  9. sbit k2=P1^5;                                                //加溫啟停按鍵
  10. sbit k3=P1^6;                                                //加濕啟停按鍵
  11. sbit bit11=P1^1;                                        //DHT11傳感器數(shù)據(jù)端
  12. unsigned char U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  13. unsigned char F16T,F16RH,n;// read 8 bits onice

  14. void Delay_ms(unsigned int n)//n 毫秒延時(shí)
  15. {
  16.         unsigned char j;
  17.         while(n--)
  18.         {
  19.                 for(j=0;j<125;j++);
  20.         }
  21.     if(k1==0)                          //自動(dòng)、手動(dòng)切換按鍵按下判斷處理
  22.         {
  23.             while(k1==0);          //再次判斷按下否,當(dāng)放開(kāi)按鍵時(shí)
  24.                 if(LED1==1)                  //判斷自動(dòng)按停情況:1為手動(dòng) 0為自動(dòng)
  25.                 LED1=0;                          //切換為自動(dòng)開(kāi)
  26.                 else LED1=1;          //切換為自動(dòng)關(guān)
  27.         }
  28.         if(LED1==1)                          //自動(dòng)、手動(dòng)判斷 1為手動(dòng) 0為自動(dòng)
  29.         {
  30.             if(k2==0)                  //加熱啟停切換按鍵按下判斷處理
  31.                 {
  32.                     while(k2==0); //再次判斷按下否
  33.                         if(LED2==1)          //如果之前是 1為停止(加熱關(guān)) 0為加熱(加熱開(kāi))
  34.                         LED2=0;                  //則切換為加熱狀態(tài)(加熱開(kāi))
  35.                         else LED2=1;  //否則切換為停止加熱狀態(tài)(加熱關(guān))
  36.                 }
  37.                 if(k3==0)                  //加濕啟停切換按鍵按下判斷處理
  38.                 {
  39.                     while(k3==0); //再次判斷按下否
  40.                         if(LED3==1)          //如果之前是 1為停止(加濕關(guān)) 0為加濕(加濕開(kāi))
  41.                         LED3=0;                  //則切換為加濕狀態(tài)(加濕開(kāi))
  42.                         else LED3=1;  //否則切換為停止加濕狀態(tài)(加濕關(guān))
  43.                 }
  44.         }
  45.         else                                   //自動(dòng)狀態(tài)
  46.         {
  47.                  if(F16T>temp)          //溫度大于設(shè)定值時(shí)
  48.                 {
  49.                     LED2=1;                  //停止加熱(加熱關(guān))
  50.                 }
  51.                 else LED2=0;          //溫度低于設(shè)定值時(shí),開(kāi)始加熱(加熱開(kāi))
  52.                 if(F16RH>rh)          //濕度大于設(shè)定值時(shí)
  53.                 {
  54.                    LED3=1;                  //停止加熱(加熱關(guān))
  55.                 }
  56.                 else LED3=0;          //濕度低于設(shè)定值時(shí),開(kāi)始加濕(加濕開(kāi))
  57.         }
  58. }
  59. void Delay_us(unsigned char n)
  60. {
  61.         n=n/2;
  62.         while(--n);
  63. }//N us 延時(shí)函數(shù)

  64. //--------------------------------
  65. //-----溫濕度讀取子程序 ------------
  66. //--------------------------------
  67. //----以下變量均為全局變量--------
  68. //----溫度高 8 位== U8T_data_H------
  69. //----溫度低 8 位== U8T_data_L------
  70. //----濕度高 8 位== U8RH_data_H-----
  71. //----濕度低 8 位== U8RH_data_L-----
  72. //----校驗(yàn) 8 位 == U8checkdata-----
  73. //----調(diào)用相關(guān)子程序如下----------
  74. //---- Delay();, Delay_10us();,COM();
  75. //--------------------------------
  76. char  COM(void)
  77. {
  78.         char i,U8temp,U8comdata;           //用于最終讀取的溫濕度數(shù)據(jù)
  79.         for(i=0;i<8;i++)
  80.         {
  81.                 while(!bit11);               
  82.                 Delay_us(35);                        //表示讀取的高電位延時(shí)大于 20 多 us 則讀取的是 1 否則讀取的是0
  83.                 U8temp=0;               
  84.                 if(bit11)U8temp=1;                //通過(guò) U8FLAG可判斷bit11 顯示數(shù)據(jù)的脈長(zhǎng)
  85.                 while(bit11);
  86.                 U8comdata<<=1;
  87.                 U8comdata|=U8temp;
  88.                 }//rof
  89.                 return    U8comdata;
  90.         }

  91. void getDHT11(void)
  92. {
  93.         GO1:bit11=0;
  94.         Delay_ms(20);                                 //主機(jī)拉低 18ms
  95.         bit11=1;                                        //總線由上拉電阻拉高 主機(jī)延時(shí) 20us
  96.         Delay_us(60);                                 //主機(jī)設(shè)為輸入

  97.        
  98.         if(!bit11)                               //bit11=1;判斷從機(jī)響應(yīng)信號(hào),判斷從機(jī)是否有低電平響應(yīng)信號(hào)
  99.         {
  100.                 while(!bit11);                        //如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行
  101.                 while(bit11);
  102.                 U8RH_data_H=COM();                //數(shù)據(jù)接收狀態(tài)
  103.                 U8RH_data_L=COM();
  104.                 U8T_data_H=COM();
  105.                 U8T_data_L=COM();
  106.                 U8checkdata=COM();
  107.                 bit11=1;               
  108.                 if((U8T_data_H+U8T_data_L+U8RH_data_H+U8RH_data_L)!=U8checkdata)   //數(shù)據(jù)校驗(yàn)
  109.                 goto  GO1;
  110.         }//fi
  111.         F16T=U8T_data_H+U8T_data_L/256;                                                                             //change integer to float
  112.         F16RH=U8RH_data_H+U8RH_data_L/256;
  113. }


  114. void InitUART(void)                                 //這是串口的基本配置,配置他的波特率是9600.這些參數(shù)都是標(biāo)準(zhǔn)的。
  115. {
  116.     TMOD = 0x20;
  117.     SCON = 0x50;
  118.     TH1 = 0xFD;
  119.     TL1 = TH1;
  120.     PCON = 0x00;
  121.     EA = 1;
  122.     ES = 1;
  123.     TR1 = 1;
  124. }

  125. /*
  126. * UART 發(fā)送一字節(jié)
  127. */
  128. void UART_send_byte(char dat)
  129. {
  130.         SBUF = dat;
  131.         while (TI == 0);
  132.         TI = 0;
  133. }

  134. /*
  135. * UART 發(fā)送字符串
  136. */
  137. void UART_send_string(unsigned char *buf)
  138. {
  139.         while (*buf != '\0')
  140.         {
  141.                 UART_send_byte(*buf++);
  142.         }
  143. }


  144. void main()
  145. {
  146.           unsigned char   Tx_Buf[12];
  147.           unsigned char LEDstatus;//燈的狀態(tài)
  148.         InitUART();                        //初始化串口
  149.         temp=25;
  150.         rh=60;
  151.         while(1)       
  152.         {
  153.                   getDHT11();                                                 //獲取溫濕度值
  154.                   Tx_Buf[0]='T';                                                //幀頭
  155.                   Tx_Buf[1]=F16T/10%10+0x30;                         //將溫濕度數(shù)據(jù)送往發(fā)送數(shù)組,送給藍(lán)牙模塊讓手機(jī)APP顯示
  156.                   Tx_Buf[2]=F16T%10+0x30;               
  157.                   Tx_Buf[3]=F16RH/10%10+0x30;
  158.                   Tx_Buf[4]=F16RH%10+0x30;
  159.                   Tx_Buf[5]=temp/10%10+0x30;                         //將溫濕度數(shù)據(jù)送往發(fā)送數(shù)組,送給藍(lán)牙模塊讓手機(jī)APP顯示
  160.                  Tx_Buf[6]=temp%10+0x30;               
  161.                   Tx_Buf[7]=rh/10%10+0x30;
  162.                  Tx_Buf[8]=rh%10+0x30;
  163.                   LEDstatus=LED1;
  164.                   Tx_Buf[9]=LEDstatus+0x30;                        //發(fā)送自動(dòng)投停狀態(tài)到APP顯示
  165.                 LEDstatus=LED2;
  166.                 Tx_Buf[10]=LEDstatus+0x30;                    //發(fā)送加熱狀態(tài)到APP顯示
  167.                 LEDstatus=LED3;
  168.                 Tx_Buf[11]=LEDstatus+0x30;                        //發(fā)送加濕狀態(tài)到APP顯示
  169.                   UART_send_string(Tx_Buf);                          //串口發(fā)送溫濕度數(shù)據(jù)出去
  170.                 Delay_ms(1000);
  171.         }
  172. }

  173. /*****************串口接收中斷函數(shù),接收藍(lán)牙模塊的數(shù)據(jù)****************** ***/
  174. void UARTInterrupt(void) interrupt 4
  175. {       
  176.         ES=0;                                                                        //關(guān)閉中斷
  177.     if(RI)                                                                          //接收到數(shù)據(jù)
  178.     {
  179.                 Rx_buf[Rxnum]=SBUF;                                  //接收數(shù)據(jù)進(jìn)數(shù)組
  180.                 if(Rx_buf[Rxnum]==0x0A)
  181.                 Rxnum=0;
  182.                 else
  183.                 Rxnum++;
  184.                 if(Rx_buf[0]==0x31)                                        //接收到的APP傳送來(lái)的手動(dòng)、自動(dòng)切換指令頭部數(shù)據(jù)
  185.                 {
  186.                         if(Rx_buf[1]==0x30)                                //接收到的APP傳送來(lái)的切換為自動(dòng)指令
  187.                         LED1=0;                                                        //自動(dòng)開(kāi)
  188.                         if(Rx_buf[1]==0x31)                                //接收到的APP傳送來(lái)的切換為手動(dòng)指令
  189.                         LED1=1;                                                        //自動(dòng)關(guān)       
  190.                 }
  191.                 if(Rx_buf[0]==0x32)                                        //接收到的APP傳送來(lái)的加溫指令頭部數(shù)據(jù)
  192.                 {
  193.                         if(Rx_buf[1]==0x30)                                //接收到的APP傳送來(lái)的加溫開(kāi)指令
  194.                         LED2=0;                                                        //加溫開(kāi)
  195.                         if(Rx_buf[1]==0x31)                                //接收到的APP傳送來(lái)的加溫關(guān)指令
  196.                         LED2=1;                                                        //加溫關(guān)       
  197.                 }
  198.                 if(Rx_buf[0]==0x33)                                        //接收到的APP傳送來(lái)的加濕指令頭部數(shù)據(jù)
  199.                 {
  200.                         if(Rx_buf[1]==0x30)                                //接收到的APP傳送來(lái)的加濕開(kāi)指令
  201.                         {
  202.                                 LED3=0;                                                //加濕開(kāi)
  203.                         }
  204.                         else
  205.                         if(Rx_buf[1]==0x31)                            //接收到的APP傳送來(lái)的加濕開(kāi)指令
  206.                         {
  207.                                 LED3=1;                                                //加濕關(guān)       
  208.                         }
  209.                 }
  210.                 if(Rx_buf[0]==0x34)                                   //接收到的APP傳送來(lái)的溫度設(shè)置指令頭數(shù)據(jù)
  211.                 {
  212.                         if(Rx_buf[1]==0x31)                           //接收到的APP傳送來(lái)的溫度設(shè)置定值加1指令
  213.                         {
  214.                                 temp++;                                           //溫度定值加1
  215.                                 if(temp>99)
  216.                                 temp=99;
  217.                         }
  218.                         if(Rx_buf[1]==0x30)                           //接收到的APP傳送來(lái)的溫度設(shè)置定值減1指令
  219.                         {
  220.                                 temp--;                                           //溫度定值減1
  221.                                 if(temp<1)
  222.                                 temp=1;
  223.                     }
  224.                         Rx_buf[1]=0;                                   //清除指令
  225.                 }
  226.                 if(Rx_buf[0]==0x35)                                  //接收到的APP傳送來(lái)的濕度設(shè)置指令頭數(shù)據(jù)
  227.                 {
  228.                         if(Rx_buf[1]==0x31)                          //接收到的APP傳送來(lái)的濕度設(shè)置定值加1指令
  229.                         {
  230.                                 rh++;                                          //濕度定值加1
  231.                                 if(rh>99)
  232.                                 rh=99;
  233.                         }
  234.                         if(Rx_buf[1]==0x30)                          //接收到的APP傳送來(lái)的濕度設(shè)置定值減1指令
  235.                         {
  236.                                 rh--;                                          //濕度定值減1
  237.                                 if(rh<1)
  238.                                 rh=1;
  239.                         }
  240.                         Rx_buf[1]=0;                                  //清除指令
  241.                 }
  242.         }
  243.     RI=0;
  244.            ES=1;                                                                          //關(guān)閉中斷
  245. }
復(fù)制代碼

仿真: 無(wú)
代碼原理圖PCB: LY04A_藍(lán)牙溫濕度測(cè)量控制.7z (1.01 MB, 下載次數(shù): 15)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天射天天操天天干 | 国产精品久久久久久久午夜片 | 韩日一区二区三区 | 成人在线视频网 | 国产三级在线观看播放 | 久久国产亚洲 | 日韩午夜网站 | 亚洲一区在线播放 | 欧美一区二区三区在线播放 | 一本色道久久综合亚洲精品高清 | 国产91精品久久久久久久网曝门 | 国产乱码精品1区2区3区 | 亚洲看片网站 | 伊人免费视频二 | 狠狠操狠狠操 | a级大片免费观看 | 激情国产| 91久久精品国产91久久 | 亚洲精品456 | 国产综合精品一区二区三区 | 久久久久久国产免费视网址 | 夜夜操天天艹 | 欧美日韩在线播放 | 国产欧美一区二区三区在线看 | 日韩成人在线观看 | 亚洲品质自拍视频网站 | 日韩在线免费播放 | av黄色国产 | 久久国产精品一区 | 国产精品明星裸体写真集 | 国产一级精品毛片 | 日韩精品一区二区三区视频播放 | 久久九九影视 | 精品视频在线观看 | 国产精品国产成人国产三级 | 中文字幕一区二区三区四区五区 | 99精品福利视频 | 三级在线视频 | 第一区在线观看免费国语入口 | 成人免费大片黄在线播放 | 青娱乐av|