找回密码
 立即注册

QQ登录

只需一步,快速开始

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

52单片机用ESP8266控制电机正转反转和停止 的程序简单逻辑

[复制链接]
跳转到指定楼层
楼主
ID:367369 发表于 2018-7-9 21:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit P00=P0^0;
sbit P01=P0^1;//第一个轮子
sbit P02=P0^2;
sbit P03=P0^3;//第二个轮子
/**串口数据使用**/
#define        RX1_Lenth                32                        //串口接收缓冲长度

uchar        idata RX1_Buffer[RX1_Lenth];        //接收缓冲
uchar        TX1_Cnt;        //发送计数
uchar        RX1_Cnt;        //接收计数
uchar i;
signed char a=0;
bit                B_TX1_Busy;        //发送忙标志

/**wifi模块命令**/
unsigned char        idata LYMS[13]="AT+CWMODE=2\r\n";
unsigned char idata SZLY[38]="AT+CWSAP='ESP8266','0123456789',11,0\r\n";
unsigned char idata RST[8]="AT+RST\r\n";
unsigned char idata SZDLJ[13]="AT+CIPMUX=1\r\n";
unsigned char idata KQFU[21]="AT+CIPSERVER=1,5000\r\n";
unsigned char idata FSSJ[13]="AT+CIPSEND=\r\n";//AT+CIPSEND= 发送数据
void Delay3(unsigned int N)
{
        int i;
        for(i=0;i<N*10;i++);
}
void Uart_Init(void)
{
     TMOD = 0x20;   //定时器工作在定时器1的方式2
     PCON = 0x00;   //不倍频
     SCON = 0x50;        //串口工作在方式1,并且启动串行接收       
     TH1 = 0xFd;    //设置波特率 9600
     TL1 = 0xFd;
     TR1 = 1;                //启动定时器1
                 IT0=1;
           IT1=1;
           EX0=1;
           EX1=1;
                 PX0=0;
           PX1=0;
                 PS=1;
           ES = 1;                //开串口中断
           EA = 1;                //开总中断
           RX1_Cnt=0;                //接受计数清零
           TX1_Cnt = 0;        //发送计数清零
           B_TX1_Busy = 0;//初始化判忙标志位               
}
void wifi(void)
{
        char i=0;
        /******************设置WiFi模块**********************************************/
        for(i=0;i<13;i++)//AT+CWMODE=2 设置成路由模式
        {
                SBUF=LYMS[i];Delay3(5);
        }
        Delay3(1000);
        for(i=0;i<38;i++)//AT+CWSAP="ESP8266","0123456789",11,0 设置路由
        {
                SBUF=SZLY[i];Delay3(5);
        }
        Delay3(3000);
        for(i=0;i<8;i++)//AT+RST 重启
        {
                SBUF=RST[i];Delay3(5);
        }
        Delay3(5000);
        for(i=0;i<13;i++)//AT+CIPMUX=1 设置成多连接
        {
                SBUF=SZDLJ[i];Delay3(5);
        }
        Delay3(2000);
        for(i=0;i<21;i++)//AT+CIPSERVER=1,5000 开启TCP服务端口
        {
                SBUF=KQFU[i];Delay3(5);
        }
        Delay3(2000);
}
void dianji1()//左上至右下
{
        P00=0;P01=1;
        P02=0;P03=1;
}
void dianji2()//右上至左下
{
        P00=1;P01=0;
        P02=1;P03=0;

}

void dianjig()//停止电机转动
{
        P00=0;P01=0;
        P02=0;P03=0;

}
void main()
{
        Uart_Init();
        wifi();
        while(1)
        {
                if(a==2)
                        dianji1();
                else
                {
                        if(a==1)
                                dianji2();
                        else
                        {
                                if(a==3)
                                        dianjig();
                        }

                }
               
        }
       
}
void UART1_int (void) interrupt 4
{
        if(RI)
        {
                RI = 0;
                RX1_Buffer[RX1_Cnt] = SBUF;                //保存一个字节
                if(RX1_Buffer[0]==0x45)
                {
                        RX1_Cnt++;
                }
                else
                {
                        RX1_Cnt=0;
                }
                if(RX1_Cnt>=10)
                {
                        if(RX1_Buffer[0]==0x45&&RX1_Buffer[1]==0x53&&RX1_Buffer[2]==0x50)
                        {
                                if(RX1_Buffer[4]==0x4C&&RX1_Buffer[5]==0x45&&RX1_Buffer[6]==0x44)
                                {
                                        if(RX1_Buffer[7]==0x31)
                                        {
                                                if(RX1_Buffer[3]==0x44)
                                                {
                                                        a=0;
                                                }
                                                if(RX1_Buffer[3]==0x45)
                                                {
                                                        a=1;
                                                }
                                                if(RX1_Buffer[3]==0x46)
                                                {
                                                        a=2;
                                                }
                                                if(RX1_Buffer[3]==0x47)
                                                {
                                                        a=3;
                                                }
                                               
                                        }
                                }
            }
                        RX1_Cnt=0;
                }
                               
        }
       
        if(TI)
        {
                TI = 0;
                B_TX1_Busy = 0;                //清除发送忙标志
        }
}

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:361216 发表于 2020-5-3 11:56 | 只看该作者
能单独用esp8266来控制电机正反停转不呢 ?
回复

使用道具 举报

板凳
ID:964308 发表于 2021-10-30 13:43 来自手机 | 只看该作者
lhqsbz 发表于 2020-5-3 11:56
能单独用esp8266来控制电机正反停转不呢 ?

可以是可以,但你的程序就要写在esp8266里了,esp8266用的是arduino或MicroPython,而且没办法用esp-01/esp-01s,因为它们都没有io口
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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