Sivo 悉见

esp8266-01s实现控制51单片机led灯亮灭代码

匿名 · 更新于 2023/3/4

请注意,网络上很多代码不能实现TCP客户端连接的重要原因之一是首次发送AT指令前没有延迟等待,也就是以下代码中的71行代码delay_ms(1000); 另外代码写入后记得重启单片机

#include <reg51.h>
#include <stdio.h>

#define UART_BAUD_RATE 9600 #define uint unsigned int #define uchar unsigned char

sbit led0 = P1 ^ 0; sbit led1 = P1 ^ 1; sbit led2 = P1 ^ 2;

uchar Recive_table[15]; uint i;

void delay_ms(uint ms) {     uchar i, j;     for (i = ms; i > 0; i--)         for (j = 120; j > 0; j--); }

//void delay_us(uchar us) { //    while (us--); //}

// 初始化UART void uart_init() {     TMOD |= 0x20; // 设置为自动重载模式     TH1 = 0xFD;   // 设置波特率为9600,12MHz晶振     SCON = 0x50;  // 设置串口工作在模式1     TR1 = 1;      // 开始计数

    TL1 = TH1;

    PCON = 0;//波特率不加倍

    TR1 = 1;//启动计数器     EA = 1;//开总中断 }

// 发送一个字符到串口 void uart_putc(unsigned char c) {     SBUF = c;     while(!TI);   // 等待发送完成     TI = 0; }

// 发送一个字符串到串口 void uart_puts(const char *s) {     while(*s)         uart_putc(*s++); }

// 发送AT指令到ESP8266 void esp8266_send_at(const char *cmd) {     ES = 0;//关闭串口中断     uart_puts("AT");     uart_puts(cmd);     uart_puts("\r\n"); }

void WIFI_Init()//通过单片机配置AT指令 {     // 发送AT指令,启用TCP服务器并将其绑定到端口8080 //    esp8266_send_at("+CWMODE=1");     delay_ms(1000);     esp8266_send_at("+CIPMUX=1");     delay_ms(1000);     led0 = 0;//发送成功后亮灯     esp8266_send_at("+CIPSERVER=1,8080");     delay_ms(1000);     led1 = 0;//设置成功后亮2号灯     ES = 1; }

void main() {     uart_init();     WIFI_Init();

    while(1); }

void Uart() interrupt 4 //中断程序 {     if(RI==1){//接受一帧完成后由硬件置一         RI = 0;//软件清零,防止下次未接收完成就执行程序         Recive_table[i] = SBUF; //将接受数据存入数组         if(Recive_table[0]=='+')             i++;         else             i = 0;         if(i>=10){             if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P')&&(Recive_table[3]=='D')){                 if(Recive_table[9]=='1')//输入1亮灯                     led2 = 0;                 if(Recive_table[9]=='0')//输入0关灯                     led2 = 1;             }             i = 0;//如果不清零 就无法达到变化         }     }else         TI = 0; }