1、main.c文件
#include "reg52.h"//代码里边没有,sbit i/o口,可以不要声明 //#include "intrins.h"//代码里边没有_nop_();可以不要该声明 #include "motor.h" #include "dalay.h" #include "uart.h" #include "esp.h" void main() { Delay1000ms(); UartInit(); // init_esp(); while(1){ stop(); } while(1); }
2、esp.c文件
#include "reg52.h" #include "dalay.h" #include "uart.h" code char LJWL[]="AT+CWJAP=\"Xiaomi_7EC3\",\"xiaomi123\"\r\n"; code char LJFWQ[]="AT+CIPSTART=\"TCP\",\"192.168.31.152\",8880\r\n"; char KQTC[]="AT+CIPMODE=1\r\n"; char KQFS[]="AT+CIPSEND\r\n"; sbit D6=P3^6; sbit D5=P3^7; char AT_ok_flag; void senddata(char c) { SBUF=c; while(!TI); TI=0; } void sendstring(char*str) { while(*str!='\0'){ senddata(*str); str++; } } void init_esp() { Delay1000ms(); sendstring(LJWL); while(!AT_ok_flag); D6=0; AT_ok_flag=0; D6=1; sendstring(LJFWQ); D5=1; while(!AT_ok_flag); AT_ok_flag=0; sendstring(KQTC); D6=0; while(!AT_ok_flag); AT_ok_flag=0; sendstring(KQFS); D6=1; while(!AT_ok_flag); if(AT_ok_flag){ D6=0; D5=0; } }
2.1、esp.h文件
sbit D6=P3^6; sbit D5=P3^7; void init_esp();
3、uart.c文件
#include "reg52.h" #include "motor.h" #include "string.h" #include "dalay.h" #include "esp.h" #define SIZE 12 sfr AUXR=0x8E;//不认识AUXR,报错需要声明 char buffer[SIZE]; extern char AT_ok_flag; void UartInit(void) //9600bps@11.0592MHz { AUXR=0x01; SCON=0x50;//配置串口工作方式1,ren能接收01000000 TMOD&=0x0F; TMOD|=0x20;//定时器1的工作方式8位自动重装配置 TH1=0xFD; TL1=0xFD;//9600波特率的初值 TR1=1;//启动定时器 EA=1;//打开总中断 ES=1;//允许串口中断 } void uart_toutine()interrupt 4 { static int i = 0; char tmp; if(RI) { RI = 0; tmp = SBUF; if(tmp=='M'||tmp=='W'||tmp=='O'||tmp=='L'){//WIFI GOT IP中既包含W、又包含F,底下条件满足FI,D5亮 i = 0; } buffer[i++] = tmp; if(buffer[0] == 'O' && buffer[1] == 'K'){ AT_ok_flag = 1; memset(buffer, '\0', SIZE); } if(buffer[0] == 'L' && buffer[1] == '0'){ D5 = 0; memset(buffer, '\0', SIZE); } if(buffer[0] == 'L' && buffer[1] == '1'){ D5 = 1; memset(buffer, '\0', SIZE); } if(buffer[0] == 'M'){ switch(buffer[1]){ case '1': goforward(); Delay10ms(); break; case '2': goleft(); Delay10ms(); break; case '3': goright(); Delay10ms(); break; case '4': goback(); Delay10ms(); break; default: stop(); break; } } } if(i == 12){ memset(buffer, '\0', SIZE); i = 0; } }
uart.h文件
void UartInit(); //9600bps@11.0592MHz
4、motot.c文件
#include "reg52.h" sbit right1=P3^2; sbit right2=P3^3; sbit left1=P3^4; sbit left2=P3^5; void goback() { left1=1; left2=0; right1=1; right2=0; } void goforward() { left1=0; left2=1; right1=0; right2=1; } void goleft() { left1=0; left2=0; right1=0; right2=1; } void goright() { left1=0; left2=1; right1=0; right2=0; } void stop() { left1=0; left2=0; right1=0; right2=0; }
motor.h文件
void goback(); void goforward(); void goleft(); void goright(); void stop();
5、dalay.c(延时函数,名字打错,应该是delay自行修改)
#include "intrins.h" void Delay1000ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); i = 8; j = 1; k = 243; do { do { while (--k); } while (--j); } while (--i); } void Delay10ms() //@11.0592MHz { unsigned char i, j; i = 18; j = 235; do { while (--j); } while (--i); }
dalay.h文件
void Delay1000ms(); void Delay10ms();
编译时需要添加以上代码,再烧录单片机使用