//作者:忽晓伟 2016-5-28
#include <reg51.h>
#include <string.h>
#include <stdio.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
//#define PWD "TP-LINK_2.4GHz_FC2545"
//#define SSID "idea11424"
#define SSID "david"
#define PWD "david826"
#define ENTER "\r\n"
#define E_RST "AT+RST"
/*STATION_IDLE = 0,?
STATION_CONNECTING,?
STATION_WRONG_PASSWORD,?
STATION_NO_AP_FOUND,?
STATION_CONNECT_FAIL,?
STATION_GOT_IP*/
#define IDLE 0
//#define CONNECTING 1
#define PWD_W 1
#define NO_AP_F 3
#define CONNECT_F 4
#define GOT_IP 5
uint8 E_stat,re_max,ct;
uint8 *ptr;
//lcd2004
#define LCD_BUS P2
#define COM 0
#define DAT 1
sbit rs = P1^4;
sbit rw = P1^5;
sbit e = P1^6;
xdata uint8 sebuf[50] ;
xdata uint8 strbuf[20];
//moto
sbit m10 = P1^0;
sbit m11 = P1^1;
sbit m20 = P1^2;
sbit m21 = P1^3;
//key
sbit key = P1^7;
bit get,gk;
void delay(uint8 m)
{
uint8 i, j;
for(i = 0 ;i < m; i++)
for(j = 0;j < 120 ; j ++)
;
}
void moto(uint8 dir)
{
switch(dir)
{
case 0: m10 = 0;m11 = 0; m20 = 0;m21 = 0;break;
case 1: m10 = 0;m11 = 1; m20 = 0;m21 = 1;break;
case 2: m10 = 1;m11 = 0; m20 = 1;m21 = 0;break;
case 3: m10 = 1;m11 = 0; m20 = 0;m21 = 1;break;
case 4: m10 = 0;m11 = 1; m20 = 1;m21 = 0;break;
}
}
void initutra()
{
TMOD = 0x20;
TH1 = TL1 = 0xfd; //@11.0592 9600
SM0 = 0;
SM1 = 1;
REN = 1; //mode 1 receive enable
TR1 = 1;
ES = 1;
EA = 1;
}
//lcd2004
bit read_stat() //read stat
{
rs = 0;
rw = 1;
e = 1;
delay(1);
if(LCD_BUS&0x80)
{
e = 0;
return 1;
}
else
{ e = 0;
return 0;
}
}
void write_lcd2004(uint8 com,bit cd) //write opertae
{
while(read_stat());
rs = cd;
rw = 0;
e = 1;
LCD_BUS = com;
delay(5);
e = 0;
}
void write_str(uint8 *str)
{
while(*str)
write_lcd2004(*str++,DAT);
}
void initlcd2004()
{
write_lcd2004(0x01,COM); //clear screen
write_lcd2004(0x38,COM); //8bit 2line 5*7dot
write_lcd2004(0x08,COM); // off
write_lcd2004(0x06,COM); //increase
write_lcd2004(0x0e,COM); //displayon
}
void lcd_cle()
{
write_lcd2004(0x01,COM); //clear screen
}
void setpos(uint8 x,uint8 y,uint8 *str)
{
uint8 i,tp;
switch(y)
{
case 0:write_lcd2004(0x80 + x,COM);break;
case 1:write_lcd2004(0xc0 + x,COM);break;
case 2:write_lcd2004(0x80 + 20 + x,COM);break;
case 3:write_lcd2004(0xc0 + 20 + x,COM);break;
}
tp = 0;
for(i = 0;;i++,tp++)
{
if(str[i] == 0)
break;
if((x+tp) > 19)
{
y++;x = 0;
tp = 0;
switch(y)
{
case 0:write_lcd2004(0x80 + x,COM);break;
case 1:write_lcd2004(0xc0 + x,COM);break;
case 2:write_lcd2004(0x80 + 20 + x,COM);break;
case 3:write_lcd2004(0xc0 + 20 + x,COM);break;
}
}
write_lcd2004(str[i],DAT);
}
}
void send(uint8 dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void sends(uint8 *str)
{
while(*str)
send(*str++);
}
void send_t(uint8 *str1)
{
send('"');//david","david826"\r\n");
sends(str1);
send('"');
}
void send_com(uint8 *str)
{
sends(str);
sends(ENTER);
}
void keys()
{
if(!key)
{
while(!key);
gk = 1;
}
}
void main()
{
uint8 try = 0,id;
uint16 sec,secg;
bit getnd;
initutra();
initlcd2004();
for(try = 0 ; try <30 ; try++) //延时等待ESP8266上电
delay(200);
lcd_cle();
send_com(E_RST);
E_stat = 1;
while(E_stat == 1)
{
delay(200);
try++;
if(try > 100)
{
setpos(0,0,"Init ESP8266 falure");
while(1);
}
if(get)
{
get = 0;
if(strstr(sebuf,"ready") != 0 )
{
ptr = strstr(sebuf,"ready");
E_stat = 2;
}
}
}
setpos(0,0,"Init ESP8266 success");
for(try = 0 ; try <30 ; try++) //延时观察液晶显示
delay(200);
lcd_cle();
sends("AT+CWMODE=1\r\n");
while(E_stat == 2)
{
delay(200);
try++;
if(try > 100)
{
setpos(0,0,"Set ESP8266 to station falure");
while(1);
}
if(get)
{
get = 0;
if(strstr(sebuf,"OK") != 0 ) //接收到确认数据
E_stat = 3;
}
}
setpos(0,0,"Set ESP8266 to station success");
for(try = 0 ; try <30 ; try++) //延时观察液晶显示
delay(200);
lcd_cle();
setpos(0,0,"Connect AP: ");
setpos(0,1,SSID);
sends("AT+CWJAP=");
send_t(SSID);
send(',');
send_t(PWD);
sends("\r\n");
while(E_stat == 3)
{
delay(200);
try++;
if(get)
{
get = 0;
if(strstr(sebuf,"OK") != 0 ) //接收到确认数据
E_stat = 4;
}
if(try > 250)
{
setpos(0,0,"Conect AP falure ");
if(strstr(sebuf,"FAIL") != 0 )
ptr = strstr(sebuf,":");
ptr++;
setpos(0,2,"C:"); //失败后显示失败原因
// write_lcd2004(*ptr,DAT); //test ERRO CODE resalut
switch(*ptr - 0x30) //ASCII转换为数字
{
case PWD_W:write_str("PWD EERO!");break;
case NO_AP_F:write_str("NO APP FOUND!");break;
case CONNECT_F:write_str("Connect faluare!");break;
}
while(1);
}
}
setpos(0,0,"Connect AP:");
setpos(0,1,SSID);
setpos(0,3,"Success!");
for(try = 0 ; try <30 ; try++) //延时观察液晶显示
delay(200);
lcd_cle();
sends("AT+CIFSR\r\n"); //查询自身IP
while(E_stat == 4)
{
delay(200);
try++;
if(get)
{
get = 0;
if(strstr(sebuf,"IP") != 0 ) //接收到确认数据
{
E_stat = 5;
REN = 0; // 关闭接收,以防止冲掉数据
}
ptr = strstr(sebuf,"IP");
setpos(0,2,ptr);
}
if(try > 250)
{
setpos(0,0,"Get IP falure ");
while(1);
}
}
REN = 1; //打开数据接受使能
for(try = 0 ; try <30 ; try++) //延时观察液晶显示
delay(200);
lcd_cle();
sends("AT+CIPMUX=1\r\n"); //打开多连接
while(E_stat == 5)
{
delay(200);
try++;
if(try > 100)
{
setpos(0,0,"Set ESP8266 to MUX Con falure");
while(1);
}
if(get)
{
get = 0;
if(strstr(sebuf,"OK") != 0 ) //接收到确认数据
E_stat = 6;
}
}
setpos(0,0,"Set ESP8266 to MUX Con success");
for(try = 0 ; try <30 ; try++) //延时观察液晶显示
delay(200);
lcd_cle();
sends("AT+CIPSERVER=1,8080\r\n");
setpos(0,0,"Set ESP8266 Sever port:8080");
while(E_stat == 6)
{
delay(200);
try++;
if(try > 100)
{
setpos(0,0,"Set ESP8266 Sever falure");
while(1);
}
if(get)
{
get = 0;
if(strstr(sebuf,"OK") != 0 ) //接收到确认数据
E_stat = 7;
}
}
setpos(0,0,"Set ESP8266 Sever port:8080 success");
for(try = 0 ; try <30 ; try++) //延时观察液晶显示
delay(200);
lcd_cle();
while(1)
{
keys();
if(get)
{
get = 0;
if(strstr(sebuf,"CONNECT") != 0 )
{
setpos(0,0,"1 client connect,id is ");
write_lcd2004(sebuf[1],DAT);
id = sebuf[1];
}
else
if(strstr(sebuf,"CLOSE") != 0 )
{
setpos(0,0,"1 client close,id is ");
write_lcd2004(sebuf[0],DAT);
}
else
if(strstr(sebuf,"IPD") != 0 )
{
getnd = 1;
}
if(getnd)
{
getnd = 0;
if(strstr(sebuf,"moto") != 0)
{
setpos(0,0,"moto run ");
ptr = strstr(sebuf,"moto");
ptr = ptr + 4;
moto((*ptr) - 0x30);
switch((*ptr) - 0x30)
{
case 0: setpos(0,1,"stop");break;
case 1: setpos(0,1,"run ");break;
case 2: setpos(0,1,"back");break;
case 3: setpos(0,1,"left");break;
case 4: setpos(0,1,"right");break;
}
}
else
if(strstr(sebuf,"lcd") != 0)
{
ptr = strstr(sebuf,"l
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
esp8266_51.rar (28个子文件)
esp8266.omf 23KB
esp8266 5KB
Last Loaded esp8266_lcd.DBK 103KB
esp8266,omf.M51 6KB
esp8266,omf.lnp 32B
ExtMem.PWI 1KB
esp8266_uvproj.bak 13KB
esp8266.uvgui_hu.bak 70KB
esp8266.plg 180B
esp8266.uvgui_Administrator.bak 68KB
Last Loaded esp8266.DBK 108KB
esp8266.M51 26KB
esp8266,omf 5KB
esp8266.hex 11KB
esp8266.uvopt 5KB
esp8266,omf.hex 735B
esp8266_uvopt.bak 54KB
esp8266.uvproj 13KB
main.LST 18KB
esp8266.uvgui.hu 70KB
esp8266.DSN 108KB
esp8266.lnp 32B
esp8266.PWI 1KB
main.OBJ 27KB
esp8266.uvgui.Administrator 68KB
esp8266.omf.plg 10KB
esp8266_lcd.PWI 2KB
main.c 9KB
共 28 条
- 1
资源评论
- blu10ph2019-10-24这是用51模拟了esp8266的AT指令吗?~daivd8262019-12-30是在计算机上的串口上连接一个支持at指令的esp8266,通过Protues中的单片机与实物8266通信
- 时暑2017-10-15应急。。。。。。。。。。。。
daivd826
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功