printf 函数这个可以不用直接使用库中的, scanf 函数需要自己添加
这个是.c 文件,粘贴复制可能会出现字符问题,直接编译可能不通过,自己敲敲代码,把不用的函数去掉即可,里面有测试wifi 的函数。
#include "reg51.h"
//#include "intrins.h"
#include "stdio.h"
#include <stdarg.h>
//#include "string.h"
#include "esp8266.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define UART_BUF_SIZE 10
static BYTE uart_rx_wp; //buffer¶Ôê×Ö¸Õë
static BYTE uart_rx_rp; //buffer¶óÎ2Ö¸Õë
static BYTE uart_rx_cnt; //bufferàïÃæμÄ×Ö·ûêyá¿
static BYTE idata uart_rx[UART_BUF_SIZE];
char Receive; //½óêÕμÄμ¥¸ö×Ö·û
char Receive_table[30]; //½óêÕ¶à¸ö×Ö·û′®
bit busy;
void(*pNet_Test)(void);
void SendString_Usart_1(unsigned char *s);//′®¿ú1 ·¢Ëí×Ö·û
void Delay_Ms(WORD ms)
{
WORD i,j;
for(i = ms; i > 0; i--)
for(j = 110; j > 0; j--);
}
void Delay_Us(BYTE us)
{
while(us--);
}
void SendData_Usart_2(BYTE dat)
{
while (busy); //Wait for the completion of the previous data is sent
ACC = dat; //Calculate the even parity bit P (PSW.0)
if (P) //Set the parity bit according to P
{
#if (PARITYBIT == ODD_PARITY)
S2CON &= ~S2TB8; //Set parity bit to 0
#elif (PARITYBIT == EVEN_PARITY)
S2CON |= S2TB8; //Set parity bit to 1
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
S2CON |= S2TB8; //Set parity bit to 1
#elif (PARITYBIT == EVEN_PARITY)
S2CON &= ~S2TB8; //Set parity bit to 0
#endif
}
busy = 1;
S2BUF = ACC; //Send data to UART2 buffer
}
void SendData_Usart_1(BYTE dat)
{
ES = 0; //1رÕ′®¿úÖD¶Ï
SBUF = dat;
while(!TI);
TI = 0;
ES = 1; //ÔêDí′®¿úÖD¶Ï
}
void SendString_Usart_1(unsigned char *s)
{
while (*s!='\0') //Check the end of the string
{
SendData_Usart_1(*s++); //Send current char and increment string ptr
}
}
void SendString_Usart_2(unsigned char *s)
{
while (*s) //Check the end of the string
{
SendData_Usart_2(*s++); //Send current char and increment string ptr
Delay_Us(5);
}
}
void Stc12c5a60s2_Usart1_Init()
{
SCON = 0x50; // ·½ê½1
PCON&=0xef; // 2¨ìØÂê2»¼ó±¶
TMOD = 0x20; // ¶¨ê±Æ÷T1
TH1 = 0xfd;//256-(FOSC/12/32)/BAUD;
TL1 = 0xfd;//TH1;
TI = 1; //ê1óÃprintf
TR1 = 1; //Timer1 start run
//′®¿úÖD¶ÏÔêDíλ
uart_rx_wp = 0;
uart_rx_rp = 0;
uart_rx_cnt = 0;
ES = 1;
EA = 1; //×üÖD¶Ï¿aÆôλ
}
void Stc12c5a60s2_Usart2_Init()
{
S2CON = 0x50; //8-bit variable UART
BRT = 0xfd; //Set auto-reload vaule of baudrate generator
AUXR = 0x10; //Baudrate generator work in 1T mode
IE2 = 0x01; //Enable UART2 interrupt
EA = 1; //Open master interrupt switch
}
//′®¿ú1ÖD¶Ï
void Usart_1_Isr() interrupt 4
{
//char k,temp;
//char Receive_table[30];
ES = 0; //1رÕ′®¿ú1ÖD¶Ï
if(RI)
{ RI = 0; //Clear receive interrupt flag
/*temp=SBUF;
Receive_table[k++] = temp;
if((Receive_table[k-1])='\0'||k==29)
{k=0;}
SendData_Usart_2(temp);*/
if(uart_rx_cnt < UART_BUF_SIZE)
{
uart_rx[uart_rx_wp] = SBUF;
uart_rx_wp = (uart_rx_wp + 1) % UART_BUF_SIZE;
uart_rx_cnt++;
}
}
ES = 1; //¿aÆô′®¿ú1ÖD¶Ï
}
//μçÄÔ·¢Ëíêy¾Yμ½′®¿ú1
//′®¿ú1½óêÕμ½êy¾YóÃ′®¿ú2·¢Ëíoˉêy·¢Ëí3öè¥
//′®¿ú2½óêÕμ½êy¾YóÃ′®¿ú1·¢Ëíoˉêy·¢Ëí»Øà′
void Uart2_2_Isr() interrupt 8 using 1
{ unsigned char k;
unsigned char temp;
IE2 = 0X00;
if(S2CON&S2RI)
{
S2CON &=~S2RI; //Clear receive interrupt flag
temp = S2BUF;
Receive = temp;
Receive_table[k] = Receive;
k++;
if(Receive_table[k-1]=='\0') k=0;
SendData_Usart_1(temp);
//SendString_Usart_1(Receive_table);
}
IE2 = 0X01;
if (S2CON & S2TI)
{
S2CON &= ~S2TI; //Clear transmit interrupt flag
busy = 0; //Clear transmit busy flag
}
}
//óÃóúscanf oˉêy½óêÕ′®¿ú1·¢Ëí1yà′μÄêy¾Y
char hal_uart_getchar(void)
{
unsigned char ch;
//Wait until a character is available:
while(uart_rx_cnt == 0);
ES = 0;
ch = uart_rx[uart_rx_rp];
uart_rx_rp = (uart_rx_rp + 1) % UART_BUF_SIZE;
uart_rx_cnt--;
ES = 1;
return ch;
}
//óÃóú′®¿ú 1
char _getkey () {
return hal_uart_getchar();
}
//ESP8266Ä£¿é Ä£ê½2aêÔ
void ESP8266_Send(char *puf)
{
Delay_Ms(20);
SendString_Usart_2("AT+CIPSEND=9\r\n");
Delay_Ms(20);
SendString_Usart_2(puf);
}
void ESP8266_Send(BYTE *puf)
{
ESP8266_Set("AT+CIPSEND=0,4");
while(*puf!='\0')
{
SendData_Usart_2(*puf);
Delay_Us(5);
puf++;
}
Delay_Us(5);
SendData_Usart_2('\n');
Delay_Us(5);
}
void ESP8266_Set(char *puf)
{
while(*puf!='\0')
{
SendData_Usart_2(*puf);
Delay_Us(5);
puf++;
}
Delay_Us(5);
SendData_Usart_2('\r');
Delay_Us(5);
SendData_Usart_2('\n');
Delay_Us(1000);
}
void ESP8266_Init_AP(void)
{
char cStrInput [100] = { 0 }, * pStrDelimiter [3];
char * pBuf, * pStr;
unsigned char uc = 0;
SendString_Usart_2("AT\r\n"); //ê×Ïè2aêÔÏÂÄ£¿éêÇ·ñoûμ
Delay_Ms(2000); //·μ»ØOK Õy3£
SendString_Usart_2(at_cwmode); //éèÖÃÄ£¿éÄ£ê½ÎaAP
Delay_Ms(2000); //·μ»ØERROR »ò no change
SendString_Usart_2(at_rst); //¸′λò»ÏÂ
Delay_Ms(2000);
SendString_Usart_2("AT+CWMODE?\r\n"); //Ôú2aêÔò»ÏÂÄ£¿é¿′¿′êÇ·ñéèÖÃ3é1|
Delay_Ms(2000);
SendString_Usart_2(at_cwsap); //éèÖÃᬽóμÄwifiÃû3Æ
Delay_Ms(2000);
SendString_Usart_2(at_rst); //¸′λò»ÏÂ
Delay_Ms(2000);
SendString_Usart_2(at_cipmux); //Æôóöà·ᬽóÄ£ê½
Delay_Ms(2000);
SendString_Usart_2(at_cipmode); //éèÖÃ′«êäÄ£ê½êÇí¸′«»1êÇ·Çí¸′«
Delay_Ms(2000);
SendString_Usart_2(at_cipsto); //éèÖÃ3¬ê±ê±¼ä
Delay_Ms(2000);
SendString_Usart_2(at_cipserver); //¿aÆô·tÎñÆ÷¶Ë¿úoÅ 8080
Delay_Ms(2000);
SendString_Usart_2(at_cipsend);
// while ( ( pStr = strtok ( pBuf, "," ) ) != NULL )
// {
// pStrDelimiter [ uc ++ ] = pStr;
// pBuf = NULL;
// }
}
void main()
{
char up[30]={0},down=0,hight=0;
int result;
char ch;
Stc12c5a60s2_Usart1_Init(); //′®¿ú13õê¼»ˉ
Stc12c5a60s2_Usart2_Init(); //′®¿ú23õê¼»ˉ
//ESP8266_Init_AP();
while(1)
{
//printf("**********************\r\n");
//printf("please input up\r\n");
//while((ch=_getkey())!=0x0d);
scanf("%s",up);
printf("%s\r\n",up);
}
}
下面是.h 文件,
#ifndef __ESP8266_H_
#define __ESP8266_H_
#define FOSC 11059200L //System frequency
#define BAUD 9600 //UART baudrate
#define NONE_PARITY 0 //None parity
#define ODD_PARITY 1 //Odd parity
#define EVEN_PARITY 2 //Even parity
#define MARK_PARITY 3 //Mark parity
#define SPACE_PARITY 4 //Space parity
#define PARITYBIT NONE_PARITY //óÃóúÑ¡Ôñ′®¿úμÄÆæżD£Ñéλ
sfr AUXR = 0x8e; //Auxiliary register
sfr S2CON = 0x9a; //UART2 control register
sfr S2BUF = 0x9b; //UART2 data buffer
sfr BRT = 0x9c; //Baudrate generator
sfr IE2 = 0xaf; //Interrupt control 2
#define S2RI 0x01 //S2CON.0
#define S2TI 0x02 //S2CON.1
#define S2RB8 0x04 //S2CON.2
#define S2TB8 0x08 //S2CON.3
/*
* oˉêyÃû£oESP8266_SendString
* Ãèêö £oWF-ESP8266Ä£¿é·¢Ëí×Ö·û′®
* êäèë £oenumEnUnvarnishTx£¬éùÃ÷êÇ·ñòÑê1ÄüáËí¸′«Ä£ê½
* £opStr£¬òa·¢ËíμÄ×Ö·û′®
* £oulStrLength£¬òa·¢ËíμÄ×Ö·û′®μÄ×Ö½úêy
* £oucId£¬ÄĸöID·¢ËíμÄ×Ö·û′®
* ·μ»Ø : 1£¬·¢Ëí3é1|
* 0£¬·¢Ëí꧰ü
* μ÷óà £o±»ía2¿μ÷óÃ
*/
/****
bit ESP8266_SendString ( FunctionalState enumEnUnvarnishTx, char * pStr, u32 ulStrLength, ENUM_ID_NO_TypeDef ucId )
{
char cStr [20];
bit bRet = 0;
if ( enumEnUnvarnishTx )
ESP8266_Usart ( "%s", pStr );
else
{
if ( ucId < 5 )
sprintf ( cStr, "AT+CIPSEND=%d,%d", ucId, ulStrLength + 2 );
else
sprintf ( cStr, "AT+CIPSEND=%d", ulStrLength + 2 );
ESP8266_Cmd ( cStr, "> ", 0, 1000 );
bRet = ESP8266_Cmd ( pStr, "SEND OK", 0, 1000 );
}
return bRet;
}
***/
/***
#define RX_BUF_MAX_LEN 1024
extern struct STRUCT_USARTx_Fram
{
char Data_RX_BUF[ RX_BUF_MAX_LEN ];
union {
volatile InfAll;
struct {
volatile int FramLength :15; // 14:0
volatile int FramFinishFlag :1; // 15
} InfBit;
};
}strPc_Fram_Record, strEsp8266_Fram_Record;
***/
char code at[] = {0x41,0x54,0x0D,0x0D,0x0A};
//2aêÔATÆô¶ˉ
//·μ»Øok
char code at_cwmode[] = {"AT+CWMODE=2\r\n"};
//2é¿′wifi°æ±¾
//·μ»Ø +CWMODE:2 »ò3
char code at_rst[] = "AT+RST\r\n";
//ÖØÆôÄ£¿é
//·μ»ØOK
//2éÑˉÄ£¿é·tÎñÆ÷3¬ê±ê±¼ä
//·μ»Ø+cipsto:60
//ok
char code at_cwjap[] = "AT+CWJAP\r\n"; //·μ»ØOK μ±Ç°á¬½óμÄwifiÃû3Æ
char code at_cwqap[] ="AT+CWQAP\r\n"; //íÆ3öAPᬽó
char code at_cipmode[] = "AT+CIPMODE=1\r\n";//éèÖÃÎaí¸′«Ä£ê½
char code at_cwsap[]="AT+CWSAP=\"wxs\",\"123456789\",1,3\r\n";
char code at_cipmux[]="AT+CIPMUX=\"1\"\r\n"; //μ«á¬½óoí¶àᬽóÖ®·Ö
char code at_cipserver[]="AT+CIPSERVER=\"1\",\"8080\",\r\n";
char code at_cipsto[] = "AT+CIPSTO=\"1800\"\r\n"; //éèÖÃ3¬ê±ê±¼ä
char code at_cipsend[] = "AT+CIPSEND=\"0\",\"9\"\r\n";
//2éÑˉ½óèëμãÃû3Æ
//½øèëμãí¨μà
//½óèëμãÃüÂë
//½óèëμã¼óÃü·½ê½
//·μ»Ø
//+CWSAP:"Ãû3Æ""ÃüÂë""í¨μà""¼óÃü·½ê½"
//′òó¡2aêÔày3ììáê¾DÅÏ¢
//SendString_Usart_1("\r\nESP8266WIFI2aêÔÄ£¿é");
//SendString_Usart_1("\r\n1,STAÄ£ê½TCP_Client");
//SendString_Usart_1("\r\n2,AP Ä£ê½AP_Server");
//SendString_Usart_1("\r\n3,STA+APÄ£ê½TCP_Client+TCP_Server");
//SendString_Usart_1("\r\n");
//Usart_2_Printf(at_rst);
//SendString_Usart_1("\r\nàyèçÔú′®¿úÖDêäèë3 »Ø3μ\r\n");
//Receive_Data = Receive_Usart_1;
/****/
// SendString_Usart_2("AT+CWMODE=2\r\n");
//SendString_Usart_2("AT+CWLIF\r\n"); //2é¿′òѽóèëé豸IP
//SendString_Usart_2("AT+CWMODE\r\n");//2éÑˉÃüáî
//SendString_Usart_2("AT+CWJAP=wxs777,123456789\r\n");
//Ñ¡Ôñwifió|óÃÄ£ê½
// //ATÖ¸áî
//SendString_Usart_2("AT+CIPMUX=1\r\n");
//SendString_Usart_2("AT+CIPSERVER=1,8080\r\n");
//SendString_Usart_2("AT+CWSAP=wxs123,123456789,1,3\r\n");
//SendString_Usart_2("AT+CWJAP?\r\n");
//SendString_Usart_2("AT+CWJAP=wxs123,123456789\r\n");
// Delay_Ms(50);
// SendString_Usart_2(at_rst);
//SendString_Usart_2("AT+CIPMODE?\r\n");
//Delay_Ms(10000);
/*******
SendString_Usart_2("AT+CWMODE=2\r\n");
Delay_Ms(1000);
SendString_Usart_2("AT+RST\r\n");
Delay_Ms(1000);
SendString_Usart_2("AT+CWMODE=2\r\n");
Delay_Ms(1000);
SendString_Usart_2("AT+CWSAP=WXS123,123456789,11,3\r\n");
SendString_Usart_2("AT+RST\r\n");
SendString_Usart_2("AT+CIFSR\r\n");
Delay_Ms(1000);
SendString_Usart_2("AT+CIPMUX=1\r\n");
Delay_Ms(1000);
*******/
/*******óÃóú2aêÔÄ£ê½êÇ·ñ¸Ä±ä**************
SendString_Usart_2("AT+CWMODE=2\r\n");
Delay_Ms(1000);
SendString_Usart_2("AT+RST\r\n");
Delay_Ms(1000);
SendString_Usart_2("AT+CWMODE?\r\n");
//************************/
/*****/
//SendString_Usart_2("AT+CIPMUX=1\r\n");
//Delay_Ms(5000);
//SendString_Usart_2("AT+CIPSERVER=1,8080\r\n");
//Delay_Ms(5000);
//SendString_Usart_2(at_cwsap);
//Delay_Ms(5000);
//SendString_Usart_2("AT+RST\r\n");
//Delay_Ms(5000);
//SendString_Usart_2("AT+CWSAP?\r\n");
//Delay_Ms(5000);
//******/
//SendString_Usart_2("AT+RST\r\n");
//Delay_Ms(1000);
//SendString_Usart_2("AT+CWMODE?\r\n");
#endif
全部测试通过,绝对可以使用 ,里面关于wifi 函数删除或注释掉
|