WIFI无线通信结合手机E4A编程,很好的学习例程,开源全部代码,如ESP8266无线网地址是直接做进E4A了,每次一键接入,初始值10.10.10.208
端口5000
不会E4A的就只能按这个值烧录ESP8266模块了。会E4A就直接改成你自己的IP
单片机源程序:
/********************************************************************/
/* WIFI无线传输手机显示 */
/********************************************************************/
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
/*****************相关变量**************/
uint Receive,i,xm1,xm2,xm3,xm0;
long s;
[size=36.9444px]uchar Recive_table[40]; //用于接收wifi模块反馈到MCU上的数据 [/size]
uchar code ta[]="0123456789- "; //测试一下
uchar table[]="温度:00.0 C";//传送用定位模板
sbit dq=P3^7;//18B20总线接口。DQ
bit tflag;//定义一个温度标志位。+、-
uint tvalue;//定义一个全局变量,用来合高低8位温度//显示温度
void delay (int a)//毫秒级延时
{
int x,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
void delayus(int t)//微秒级延时
{
while(t--);
}
/*******************************************************************
名称:延时函数 作用:毫秒级延时,微妙级延时函数,为数据收发完成作等待.......
********************************************************************/
void ms_delay(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
void us_delay(uchar t)
{
while(t--);
}
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t);
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t);
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
[size=36.9444px] while(--t);[/size]
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
[size=36.9444px] while(t--) //大致延时1mS[/size]
[size=36.9444px] {[/size]
[size=36.9444px] DelayUs2x(245);[/size]
DelayUs2x(245);
[size=36.9444px] }[/size]
}
[size=36.9444px]void Uart_Init() //使用定时器1作为波特率发生器(STC89C52、STC89C51、AT89C51等均可) [/size]
{
TMOD = 0x21;
[size=36.9444px] SCON = 0x50; //设置串行方式[/size]
[size=36.9444px] TH1 = 0xFD; //波特率9600[/size]
TL1 = TH1;
PCON = 0x00;
[size=36.9444px] EA = 1; //总中断打开 [/size]
[size=36.9444px] ES = 1; //开串口中断 [/size]
[size=36.9444px] TR1 = 1; //启动定时器1[/size]
}
/********************************************************************
名称:串口发送函数 功能:MCU向无线WIFI模块ESP8266发送数据
********************************************************************/
void Send_Uart(uchar value)
{
ES=0; //关闭串口中断
TI=0; //清发送完毕中断请求标志位
SBUF=value; //发送
while(TI==0); //等待发送完毕
TI=0; //清发送完毕中断请求标志位
ES=1; //允许串口中断
TH0=0;
TL0=0;
}
/********************************************************************
名称:WIFI模块设置函数 作用: 启动模块,以便可以实现无线接入和控制
********************************************************************/
[size=36.9444px]void ESP8266_Set(uchar *puf) // 数组指针*puf指向字符串数组 [/size]
{
while(*puf!='') //遇到空格跳出循环
{
Send_Uart(*puf); //向WIFI模块发送控制指令。
us_delay(5);
puf++;
}
us_delay(5);
Send_Uart('r'); //回车
us_delay(5);
Send_Uart('n'); //换行
}
void ds18b20rst()//复位
{
dq=1;
delay(5);
dq=0;
delayus(400);
dq=1;
delayus(50);
}
uchar ds18b20rd()//读数据
{
uchar i=0;
uchar dat=0;//用DAT把读出来的数据存起来
for(i=0;i<8;i++)
{
dq=0;
dat>>=1;//DAT不但右移一位,还起到延时一微秒的作用
dq=1;
if(dq==1)//还可写(if(dq))
dat|=0x80;//DAT或上0X80
delayus(15);
}
return(dat);//调用DAT
}
uchar ds18b20wr(uchar com)//写数据/命令
{
uchar i=0;
for (i=0; i<8; i++)
{
dq=0;
dq=com&0x01;//写的数和0x01与一下
delayus(15);
dq=1;
com>>=1;//数据
}
}
uint read_temp()//读温度,大于256用uint
{
uchar a,b;//定义两个数为二进制温度。
ds18b20rst();//复位
ds18b20wr(0xcc);//跳过读ROM
ds18b20wr(0x44);//发送温度转换指令
ds18b20rst();//复位
ds18b20wr(0xcc);//跳过读ROM
ds18b20wr(0xbe);//读暂存器
a=ds18b20rd();//A只能读到低8位。
b=ds18b20rd();//B只能读到高8位。
tvalue=b;
tvalue=tvalue<<8;//左移8位//把B中的数据去高8位。也可写成(tvalue=tvalue<<8;)//tvalue=tvalue*256;//tvalue<<=8;
tvalue|=a;//和A或一下,完整的tvalue值
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』