欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 基于單片機的遠程自動農業灌溉--連江設計 [打印本頁]

作者: yangjiang1    時間: 2019-9-10 07:56
標題: 基于單片機的遠程自動農業灌溉--連江設計

基本原理
程序設置有自動手動模式,可用遠程相關代碼控制模式的切換,自動模式可檢測土壤濕度然后灌溉。
代碼
#include <reg52.h>
#include <intrins.h>
                      //包含頭文件
#define uint unsigned int
#define uchar unsigned char
#define RELOAD_COUNT 0xFA         //宏定義波特率發生器的載入值
//define RELOAD_COUNT (256-(((11520000/16)/12)/9600)) 也可以或波特率9600 //256-晶振頻率/波特率x16=BRT


sfr AUXR=0x8E;
sfr BRT=0x9C;
sfr AUXR1=0xA2;
uchar Receive;
uchar i;                             
uint n;
uchar Recive_table[15];        //用于接收wifi模塊反饋到MCU上的數據
sbit sd0 = P0^0;  //濕度端口
sbit sd1 = P0^1;
sbit sd2 = P0^2;
sbit sd3 = P0^3;


//繼電器端口
sbit jd1 = P2^0;
sbit jd2 = P0^5;
sbit jd3 = P0^6;
sbit jd4 = P0^7;


uchar k;  //  開水代碼
uchar m;        //        關稅代碼


sbit LED0 = P1^0;


void ms_delay(uint t)
{
      uint i,j;
      for(i=t;i>0;i--)
       for(j=110;j>0;j--);
}










void us_delay(uchar t)
{
      while(t--);
}














void Uart_Init()//使用定時器1作為波特率發生器(STC89C52、STC89C51、AT89C51或者STC12C560S2等均可)
{
      SCON=0x50;     //設置為串行口以方式1工作,8位異步通訊,允許接收中斷。
      //一幀信息為10位,1位起始位,8位數據位(低位在先),1位停止位。
      PCON=0x80;     //SMOD波特率選擇位為1,SMOD=1.
      TMOD=0x21;     //設置定時器1為波特率發生器,工作在模式2,8位自動裝載
      TH1=RELOAD_COUNT;//波特率9600 ,TH1=256-FOSC/16/12/波特率
      TL1=TH1;
      EA=1;                            //總中斷打開
      ES=0;                             //關閉串口中斷
      TR1=1;                     //啟動定時器1
}
















void Send_Uart(uchar value)
{
      ES=0;         //關閉串口中斷
      TI=0;         //清發送完畢中斷請求標志位
      SBUF=value;     //發送
      while(TI==0);   //等待發送完畢
      TI=0;         //清發送完畢中斷請求標志位
      ES=1;         //允許串口中斷
}












void ESP8266_Set(uchar *puf) // 數組指針*puf指向字符串數組               
{


      while(*puf!='\0')    //遇到空格跳出循環
      {
           Send_Uart(*puf);  //向WIFI模塊發送控制指令。
           us_delay(5);
           puf++;      
      }
      us_delay(5);
      Send_Uart('\r');//回車
      us_delay(5);
      Send_Uart('\n');   //換行
      ms_delay(50);
}  


//四位數據發送

void ESP8266_Sent(uchar *puf)      // 數組指針*puf指向字符串數組               
{
      ESP8266_Set("AT+CIPSEND=0,4");
           ms_delay(30);
      while(*puf!='\0')    //遇到空格跳出循環
      {
           Send_Uart(*puf);   //向WIFI模塊發送控制指令。
           us_delay(5);
           puf++;      
      }
      us_delay(5);
      Send_Uart('\n');   //換行
      ms_delay(10);
}   


//六位數據發送


void ESP82661_Sent(uchar *puf)      // 數組指針*puf指向字符串數組               
{
      ESP8266_Set("AT+CIPSEND=0,10");
           ms_delay(100);
      while(*puf!='\0')    //遇到空格跳出循環
      {
           Send_Uart(*puf);   //向WIFI模塊發送控制指令。
           us_delay(5);
           puf++;      
      }
      us_delay(5);
      Send_Uart('\n');   //換行
          Send_Uart('\n');   //換行
      ms_delay(100);
}   






//多位數據發送


void ESP826612_Sent(uchar *puf)      // 數組指針*puf指向字符串數組               
{
      ESP8266_Set("AT+CIPSEND=0,40");
           ms_delay(100);
      while(*puf!='\0')    //遇到空格跳出循環
      {
           Send_Uart(*puf);   //向WIFI模塊發送控制指令。
           us_delay(5);
           puf++;      
      }
      us_delay(5);
      Send_Uart('\n');   //換行
          Send_Uart('\n');   //換行
      ms_delay(100);
}   










void main()
{         jd1=0;
        sd0=1 ;
     LED0=0;          //gongzuozhishi
       ms_delay(5000)  ;
                   LED0=1;
                   ms_delay(1000)         ;
      LED0=0;//關閉LED燈
      Uart_Init();//使用獨立的波特率發生器
//   ESP8266_Set("AT+CWMODE=2"); //設置路由器模式 1 station模式 2 AP
//點 路由器模式 3 station+AP混合模式
       // ms_delay(1000)         ;
//ESP8266_Set("AT+RST");     //重新啟動wifi模塊


       ms_delay(100)         ;


ESP8266_Set("AT+CIOBAUD=9600");     //重新啟動wifi模塊
                                         ms_delay(1000)         ;


   //       ESP8266_Set("AT+CWSAP=\"WIFI\",\"1234567890\",11,4");
//設置模塊SSID:WIFI, PWD:密碼 及安全類型加密模式(WPA2-PSK)
ESP8266_Set("AT+CIPMUX=1");//開啟多連接模式,允許多個各客戶端接入


         ms_delay(1000)         ;


ESP8266_Set("AT+CIPSERVER=1,8899");  //啟動TCP/IP 端口為8080 實現基于網絡//控制
                   ms_delay(1000)         ;
          ESP8266_Sent("連接");
                   ms_delay(1000)         ;
          ESP82661_Sent("即將開始  ");
                   ms_delay(2000)         ;
          ESP82661_Sent("初始化完成");




      ES=1;
           m=0;
      LED0=1;//關閉LED燈
          ms_delay(1000) ;
         
          ESP82661_Sent("進入循環掃");        
                                                                                         //允許串口中斷
      while(1)
      {  
//sbit sd0 = P0^0;
//sbit sd1 = P0^1;
//sbit sd2 = P0^2;
//sbit sd3 = P0^3;








  if(m==0)
{
ESP82661_Sent("進入自動  ");


                     ms_delay(1000) ;




        if(sd0==1)
        {


           jd1=0;
           ESP8266_Sent("開水");


        }


         if(sd0==0)
        {


           jd1=1;
          ESP8266_Sent("關水");
           ms_delay(1000) ;
           //ESP8266_Sent("關水");


        }
}




  if(m==1)
{
          ESP82661_Sent("進入遠程  ");


                     ms_delay(1000) ;


        if(k==11)
        {


           jd1=0;
           ESP8266_Sent("開水");


        }


         if(k==12)
        {


           jd1=1;
          ESP8266_Sent("關水");
           ms_delay(1000) ;
           //ESP8266_Sent("關水");


        }


}


  /*


        if(k==12)
        {


           jd1=1;
           ESP8266_Sent("  12");
          ms_delay(2000)         ;
           ESP8266_Sent("來水");


        }




         if(k==13)
        {
           sd0=0;
           jd1=0;
          ESP8266_Sent("1313");
         // ms_delay(2000)         ;
          // ms_delay(1000) ;
           //ESP8266_Sent("關水");
            sd0=1;
        }




*/


































//sd0=1;


}         
}









void uart() interrupt 4
{
  static uchar i=0;


    if(RI == 1)   


    {


        RI = 0;     //清除串口接收標志位


        Recive_table[ i]=SBUF;[ i]


        if(Recive_table[0]=='+')


        {


                i++;


        }


        else


        {


                i=0;


        }












        if(i>10)
        {
//                 if(Recive_table[7]=='1'||Recive_table[7]=='2')
                 {
            i=0;
                    }
                if(Recive_table[7]=='1')
                {
//                 ESP8266_Sent("7wei");
                        
                switch(Recive_table[9])
                {


                        case '1':


                                LED0=0;
                                ESP8266_Sent("循1");
        
                                break;


                        case '2':


                                LED0=1;
                                ESP8266_Sent("循2");
                                break;


                        case '3':
                                  ESP8266_Sent("循3");
                                LED0=0;


                                break;


                        case '4':


                                LED0=1;
                                  ESP8266_Sent("循4");
                                break;


                        case '5':


                                LED0=0;
                                    ESP8266_Sent("循5");
                                break;


                        case '6':


                                LED0=1;
                                    ESP8266_Sent("循6");
                                break;
               
                //        case '0':
         //
                //                LED0=1;
                //                    ESP8266_Sent("循0");
                //                break;


                        case '7':


                                LED0=0;
                                    ESP8266_Sent("循7");
                                break;




                        case '8':


                                LED0=1;
                                ESP8266_Sent("循8");
                                break;




                        case '9':


                                LED0=0;
                                    ESP8266_Sent("循9");
                                break;






                }        //switchjieshu
        }


           /*/
                         if(Recive_table[10]=='2')
    {
                                  ESP8266_Sent("10w2");


           }
                 */


         else if(Recive_table[7]=='2')
    {
                switch(Recive_table[10])


                {
                         case '0':




                                LED0=0;


                                k=10;


                                break;




                        case '1':


                                LED0=1;
                                   k=11;
//                         ESP8266_Sent("循11");
                                break;


                        case '2':


                                LED0=0;
                                   k=12;
                        //        ESP8266_Sent("循12");
                                break;


                        case '3':
                                 // ESP8266_Sent("循13");
                                 m=1;
                                 k=13;
                                LED0=1;


                                break;


                        case '4':


                                LED0=0;
                                m=0;
                         //          ESP8266_Sent("循14");
                                break;


                        case '5':


                                LED0=0;
                                  ESP8266_Sent("循15");
                                break;


                        case '6':


                                LED0=1;
                                  ESP8266_Sent("循16");
                                break;


                }        //switchjieshu
          }        ;
















        










                }        //switchjieshu














   


  }


}
















/*
void Uart_Interrupt() interrupt 4        
{
  static uchar i=0;
  
      if(RI==1)
      {
           RI=0;
      Receive=SBUF;        //MCU接收wifi模塊反饋回來的數據        


      Recive_table[15]=Receive;              
           i++;         
           if((Recive_table[i-1]=='\n'))i=0;


                     //遇到換行 重新裝值
                  
      }
      else TI=0;        
}
*/



作者: 158751hei0141    時間: 2021-4-7 19:00
請問有完整的工程文件和仿真嗎




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1