×
单片机 > 单片机程序设计 > 详情

ESP8266无线18B20温度手机接收有源代码和开源

发布时间:2020-06-08 发布时间:
|

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值


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析