单片机 > 单片机程序设计 > 详情

STC15单片机利用ESP8266控制LED 源程序

发布时间:2023-03-24 发布时间:
|

输入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;

}

}

}

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32学习笔记4:外部中断