无线wifi模块,51单片机,C语言程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

无线WIFI模块ESP8266和51单片机实现LED灯的无线控制一、关于51单片机和无线WIFI模块的接线方面RXD、TXD、GND和51单片机的TXD、RXD、GND接好,模块其他引脚均为高电平,电源VCC是3.3V左右(两节1.5v干电池),本人由于没有稳压模块,偷懒了当时使用5V的直流源,测试结果目前没有问题(不过不建议啊!)二、关于安卓手机方面测试时可以使用,网络调试助手(下载这个app安装在手机即可)发送数字1表示小灯亮,0表示灯灭。后续想深入的话可以自己开发安卓app软件。三、参数设置由于参数的设置方法和步奏网上资料很全,这里提供相关的网址自行参考。Uart-WiFi模块ESP8266把玩记物联网wifi模块工作的STA和AP模式详细介绍四、资料可能存在不足之处,仅作参考!/*********************************************************************题目:基于STC12C560S2单片机无线WIFI模块控制内容:通过MCU上位机对ESP8266wifi模块的控制和设置,实现手机端控制LED灯的亮灭。注意:该型号单片机是普通89C51单片执行速度的12倍,内含RAM1280字节,ROM为60K,PCA计数器,PWM发生模块,ADC转换模块等,晶振一定是11.0592MHz。********************************************************************/#includereg52.h//包含头文件#defineuintunsignedint#defineucharunsignedchar#defineRELOAD_COUNT0xFA//宏定义波特率发生器的载入值//defineRELOAD_COUNT(256-(((11520000/16)/12)/9600))也可以或波特率9600//256-晶振频率/波特率x16=BRT/*****************LED灯对应P0口的1个端口*************/sbitLED0=P3^2;/************波特率发生器相关功能寄存器的定义****************/sfrAUXR=0x8E;sfrBRT=0x9C;sfrAUXR1=0xA2;/*****************相关变量**************/ucharReceive,i;uintn;ucharRecive_table[15];//用于接收wifi模块反馈到MCU上的数据/*******************************************************************名称:延时函数作用:毫秒级延时,微妙级延时函数,为数据收发完成作等待.......********************************************************************/voidms_delay(uintt){uinti,j;for(i=t;i0;i--)for(j=110;j0;j--);}voidus_delay(uchart){while(t--);}/********************************************************************名称:波特率发生器函数作用:波特率发生器可以是T1定时器实现,也可以是MCU内部独立的波特率发生器,各自不同的载入值计算式,具体根据寄存器相关设置来参考计算,以实现异步串行通讯。(经测试,两种设置方式均可用,可任选一种。)********************************************************************/voidUart_Init()//使用定时器1作为波特率发生器(STC89C52、STC89C51、AT89C51或者STC12C560S2等均可){SCON=0x50;//设置为串行口以方式1工作,8位异步通讯,允许接收中断。//一帧信息为10位,1位起始位,8位数据位(低位在先),1位停止位。PCON=0x80;//SMOD波特率选择位为1,SMOD=1.TMOD=0x21;//设置定时器1为波特率发生器,工作在模式2,8位自动装载TH1=RELOAD_COUNT;//波特率9600,TH1=256-FOSC/16/12/波特率TL1=TH1;EA=1;//总中断打开ES=0;//关闭串口中断TR1=1;//启动定时器1}/*voidUart_Init()//使用独立的波特率发生器(STC12C560S2或带有独立波特率发生器//、//的单片机均可){SCON=0x50;//设置为串行口以方式1工作,8位异步通讯,允许接收中断。PCON=0x80;//SMOD波特率选择位为1,SMOD=1.BRT=RELOAD_COUNT;//波特率9600256-晶振频率/波特率x16=BRTAUXR=0xD5;//T0、T1不12分频,速度是89C51的12倍,启动独立波特率//发生器,每个时钟计数一次//设置串口1的波特率发生器为独立波特率发生器,AUXR1=0x80;//切换到P1口ES=1;//开启串口中断EA=1;//开启总中断}*//********************************************************************名称:串口发送函数功能:MCU向其他与其连接的设备发送数据(此处是无线WIFI模块ESP8266)********************************************************************/voidSend_Uart(ucharvalue){ES=0;//关闭串口中断TI=0;//清发送完毕中断请求标志位SBUF=value;//发送while(TI==0);//等待发送完毕TI=0;//清发送完毕中断请求标志位ES=1;//允许串口中断}/********************************************************************名称:WIFI模块设置函数作用:启动模块,以便可以实现无线接入和控制********************************************************************/voidESP8266_Set(uchar*puf)//数组指针*puf指向字符串数组{while(*puf!='\0')//遇到空格跳出循环{Send_Uart(*puf);//向WIFI模块发送控制指令。us_delay(5);puf++;}us_delay(5);Send_Uart('\r');//回车us_delay(5);Send_Uart('\n');//换行ms_delay(1000);}/****************************************************名称:ESP8266发送数据函数功能:用于与wifi模块相连的终端发送数据*****************************************************/voidESP8266_Sent(uchar*puf)//数组指针*puf指向字符串数组{ESP8266_Set(AT+CIPSEND=0,4);while(*puf!='\0')//遇到空格跳出循环{Send_Uart(*puf);//向WIFI模块发送控制指令。us_delay(5);puf++;}us_delay(5);Send_Uart('\n');//换行ms_delay(10);}/********************************************************************名称:主函数作用:程序的执行入口********************************************************************/voidmain(){LED0=0;//关闭LED灯Uart_Init();//使用独立的波特率发生器ESP8266_Set(AT+CWMODE=2);//设置路由器模式1station模式2AP//点路由器模式3station+AP混合模式ESP8266_Set(AT+RST);//重新启动wifi模块ESP8266_Set(AT+CWSAP=\WIFI\,\1234567890\,11,4);//设置模块SSID:WIFI,PWD:密码及安全类型加密模式(WPA2-PSK)ESP8266_Set(AT+CIPMUX=1);//开启多连接模式,允许多个各客户端接入ESP8266_Set(AT+CIPSERVER=1,5000);//启动TCP/IP端口为8080实现基于网络//控制ES=1;//允许串口中断while(1){if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//MCU接收到的数据为+IPD时进入判断控制0\1来使小灯亮与灭{if((Recive_table[3]=='D')&&(Recive_table[6]==',')){if(Recive_table[9]=='0'){LED0=0;//0灯灭ESP8266_Sent(灯灭);//wifi模块向pc端或手机端发送灯灭}elseif(Recive_table[9]=='1'){LED0=1;//1灯亮ESP8266_Sent(灯亮);//wifi模块向pc端或手机端发送灯亮}}}}}/*********************************************************************名称:串行通讯中断作用:发送或接收结束后进入该函数,对相应的标志位软件清0,实现模块对数据正常的收发。********************************************************************/voidUart_Interrupt()interrupt4{staticuchari=0;if(RI==1){RI=0;Receive=SBUF;//MCU接收wifi模块反馈回来的数据Recive_table[i]=Receive;i++;if((Recive_table[i-1]=='\n'))i=0;//遇到换行重新装值}elseTI=0;}

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功