找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4025|回复: 5
打印 上一主题 下一主题
收起左侧

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

  [复制链接]
跳转到指定楼层
楼主
ID:739692 发表于 2020-9-15 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
输入ESPKLED,LED灯亮,输入ESPGLED,灯灭

单片机源程序如下:
  1. /**************************************************
  2. *
  3. *    平台:keil5 + STC154K58S
  4. *    功能:输入ESPKLED,LED灯亮,输入ESPGLED,灯灭
  5. *    日期:2020年7月22日
  6. *
  7. ***************************************************/

  8. # include "config.h"
  9. # include "GPIO.h"
  10. # include "delay.h"
  11. # include "USART.h"
  12. # include <string.h>

  13. # define uchar unsigned char
  14. # define uint unsigned int

  15. uchar s;
  16. uchar flag;
  17. uchar a;

  18. sbit LED = P0^0;

  19. void delay()   //延时1000ms
  20. {
  21.     uchar i;
  22.     for(i=0;i<5;i++)
  23.     {
  24.         delay_ms(200);
  25.     }
  26. }


  27. void GPIO_init()   //将P3口设置为准双向口
  28. {
  29.     GPIO_InitTypeDef GPIO_init3;
  30.     GPIO_init3.Mode = GPIO_PullUp;
  31.     GPIO_init3.Pin = GPIO_Pin_All;
  32.     GPIO_Inilize(GPIO_P3, &GPIO_init3);
  33. }

  34. /******************************************************
  35. *
  36. *   功能:串口初始化
  37. *   描述:8位波特率可变,使用定时器1,波特率为115200
  38. *         使用P30,P31口
  39. *
  40. *
  41. *******************************************************/

  42. void USART_init1()  
  43. {
  44.    
  45.     COMx_InitDefine USART_init1;         
  46.     USART_init1.UART_Mode = UART_8bit_BRTx;     //模式
  47.     USART_init1.UART_BRT_Use = BRT_Timer1;      //使用定时器1作为波特率发生器
  48.     USART_init1.UART_BaudRate = 115200UL;        //波特率
  49.     USART_init1.Morecommunicate = DISABLE;      //多机通讯禁止
  50.     USART_init1.UART_RxEnable = ENABLE;         //允许接收
  51.     USART_init1.BaudRateDouble = DISABLE;        //波特率不加倍
  52.     USART_init1.UART_Interrupt = ENABLE;         //允许中断
  53.     USART_init1.UART_Polity = PolityLow;        //优先级低(默认)
  54.     USART_init1.UART_P_SW = UART1_SW_P30_P31;   //USART端口
  55.     USART_init1.UART_RXD_TXD_Short = DISABLE;  //内部短路RXD与TXD, 做中继
  56.     USART_Configuration(USART1, &USART_init1);
  57.    
  58. }

  59. /****************************************************
  60. *
  61. *  功能:ESP8266模块初始化
  62. *  描述:利用AT指令,
  63. *        设置WIFI名称为:ESPESP1
  64. *        密码:12345678
  65. *        端口:3333
  66. *        IP地址:192.168.4.1(默认)
  67. *
  68. *****************************************************/

  69. void ESP8266_init()
  70. {
  71.    
  72.     for(s=0;s<3;s++)  //多进行几次初始化
  73.      {  
  74.        PrintString1("AT\r\n");
  75.        PrintString1("AT+RST\r\n");
  76.        delay();
  77.        PrintString1("AT+CWMODE=3\r\n");
  78.        delay();
  79.        PrintString1("AT+CWSAP=\"ESPESP1\",\"12345678\",5,3\r\n");
  80.        delay();
  81.        PrintString1("AT+RST\r\n");
  82.        delay();
  83.        PrintString1("AT+CIPMUX=1\r\n");
  84.        delay();
  85.        PrintString1("AT+CIPSERVER=1,3333\r\n");
  86.        delay();
  87.      }
  88. }
  89. /**************************************
  90. 功能描述:握手成功与否函数
  91. 入口参数:uint8 *a
  92. 返回值:位
  93. ***************************************/
  94. bit Hand(uchar *a)
  95. {
  96.     if(strstr(RX1_Buffer,a)!=NULL)     //判断字符串a是否是字符串Rec_Buf的子串
  97.             return 1;                     //如果字符串a是字符串Rec_Buf的子串
  98.         else
  99.                   return 0;                     //如果字符串a不是字符串Rec_Buf的子串
  100. }
  101. void main()
  102. {
  103.     GPIO_init();
  104.     delay_ms(10);
  105.    
  106.     USART_init1();
  107.    
  108.     ES = 1;               //允许串口1中断
  109.     EA = 1;               //允许总中断
  110.     delay_ms(20);
  111.    
  112.     ESP8266_init();
  113.    
  114.     while (1)
  115.         {
  116.                 delay_ms(1);
  117.                 if(COM1.RX_TimeOut > 0)                //超时计数
  118.                 {
  119.                         if(--COM1.RX_TimeOut == 0)
  120.                         {
  121.                                 if(COM1.RX_Cnt > 0)
  122.                                 {
  123.                     if(Hand("ESPKLED"))
  124.                                         {
  125.                                        
  126.                           ES = 0;   //关闭串口1中断
  127.                           LED = 0;
  128.                           ES = 1;  //打开串口1中断
  129.                                         }  
  130.                                         if(Hand("ESPGLED"))
  131.                                         {
  132.                                        
  133.                           ES = 0;   //关闭串口1中断
  134.                           LED = 1;
  135.                           ES = 1;  //打开串口1中断
  136.                                         }  
  137.                                 }
  138.                                 COM1.RX_Cnt = 0;
  139.                         }
  140.                 }
  141.         }
  142. }
复制代码

所有程序51hei提供下载:
ESP8266终极版控制LED.zip (121.54 KB, 下载次数: 149)


评分

参与人数 1黑币 +5 收起 理由
yinds5092 + 5 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏10 分享淘帖 顶4 踩
回复

使用道具 举报

沙发
ID:671956 发表于 2022-1-17 10:39 | 只看该作者
这个怎么没人赞呢?
回复

使用道具 举报

板凳
ID:65369 发表于 2022-4-10 09:10 | 只看该作者
如果可以连接阿里云就更加完美了
回复

使用道具 举报

地板
ID:91150 发表于 2022-7-27 13:22 | 只看该作者
suoguocs 发表于 2022-1-17 10:39
这个怎么没人赞呢?

如果直接用8266控制,节省STC15单片机,可能就会有人点赞; 如果连接阿里云就更加完美;  如果直接使用每月10圆以下的sim卡+家用路由器+8266来控制,可能会得到大大的赞。
回复

使用道具 举报

5#
ID:15745 发表于 2022-8-1 10:03 | 只看该作者
正好用的上,学习学习
回复

使用道具 举报

6#
ID:52228 发表于 2022-9-19 07:55 来自手机 | 只看该作者
cmyldd 发表于 2022-4-10 09:10
如果可以连接阿里云就更加完美了

我连接的百度云
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表