欧美极品高清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