输入ESPKLED,LED灯亮,输入ESPGLED,灯灭
单片机源程序如下:
/**************************************************
*
* 平台:keil5 + STC154K58S
* 功能:输入ESPKLED,LED灯亮,输入ESPGLED,灯灭
* 日期:2020年7月22日
*
***************************************************/
# include "config.h"
# include "GPIO.h"
# include "delay.h"
# include "USART.h"
# include
# define uchar unsigned char
# define uint unsigned int
uchar s;
uchar flag;
uchar a;
sbit LED = P0^0;
void delay() //延时1000ms
{
uchar i;
for(i=0;i<5;i++)
{
delay_ms(200);
}
}
void GPIO_init() //将P3口设置为准双向口
{
GPIO_InitTypeDef GPIO_init3;
GPIO_init3.Mode = GPIO_PullUp;
GPIO_init3.Pin = GPIO_Pin_All;
GPIO_Inilize(GPIO_P3, &GPIO_init3);
}
/******************************************************
*
* 功能:串口初始化
* 描述:8位波特率可变,使用定时器1,波特率为115200
* 使用P30,P31口
*
*
*******************************************************/
void USART_init1()
{
COMx_InitDefine USART_init1;
USART_init1.UART_Mode = UART_8bit_BRTx; //模式
USART_init1.UART_BRT_Use = BRT_Timer1; //使用定时器1作为波特率发生器
USART_init1.UART_BaudRate = 115200UL; //波特率
USART_init1.Morecommunicate = DISABLE; //多机通讯禁止
USART_init1.UART_RxEnable = ENABLE; //允许接收
USART_init1.BaudRateDouble = DISABLE; //波特率不加倍
USART_init1.UART_Interrupt = ENABLE; //允许中断
USART_init1.UART_Polity = PolityLow; //优先级低(默认)
USART_init1.UART_P_SW = UART1_SW_P30_P31; //USART端口
USART_init1.UART_RXD_TXD_Short = DISABLE; //内部短路RXD与TXD, 做中继
USART_Configuration(USART1, &USART_init1);
}
/****************************************************
*
* 功能:ESP8266模块初始化
* 描述:利用AT指令,
* 设置WIFI名称为:ESPESP1
* 密码:12345678
* 端口:3333
* IP地址:192.168.4.1(默认)
*
*****************************************************/
void ESP8266_init()
{
for(s=0;s<3;s++) //多进行几次初始化
{
PrintString1("ATrn");
PrintString1("AT+RSTrn");
delay();
PrintString1("AT+CWMODE=3rn");
delay();
PrintString1("AT+CWSAP="ESPESP1","12345678",5,3rn");
delay();
PrintString1("AT+RSTrn");
delay();
PrintString1("AT+CIPMUX=1rn");
delay();
PrintString1("AT+CIPSERVER=1,3333rn");
delay();
}
}
/**************************************
功能描述:握手成功与否函数
入口参数:uint8 *a
返回值:位
***************************************/
bit Hand(uchar *a)
{
if(strstr(RX1_Buffer,a)!=NULL) //判断字符串a是否是字符串Rec_Buf的子串
return 1; //如果字符串a是字符串Rec_Buf的子串
else
return 0; //如果字符串a不是字符串Rec_Buf的子串
}
void main()
{
GPIO_init();
delay_ms(10);
USART_init1();
ES = 1; //允许串口1中断
EA = 1; //允许总中断
delay_ms(20);
ESP8266_init();
while (1)
{
delay_ms(1);
if(COM1.RX_TimeOut > 0) //超时计数
{
if(--COM1.RX_TimeOut == 0)
{
if(COM1.RX_Cnt > 0)
{
if(Hand("ESPKLED"))
{
ES = 0; //关闭串口1中断
LED = 0;
ES = 1; //打开串口1中断
}
if(Hand("ESPGLED"))
{
ES = 0; //关闭串口1中断
LED = 1;
ES = 1; //打开串口1中断
}
}
COM1.RX_Cnt = 0;
}
}
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』