历史上的今天
返回首页

历史上的今天

今天是:2024年11月25日(星期一)

正在发生

2019年11月25日 | ESP8266无线18B20温度手机接收有源代码和开源

2019-11-25 来源:51hei

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值就被读走了

if(tvalue<0xffff)

                tflag=0;

  else 

  {

  tvalue=~tvalue+1;//得出原数据

                tflag=1;

        }

                tvalue=tvalue*0.625;//把数据乘以精度=温度。为了显示要扩大10倍。(0.0625)

                return(tvalue);//返回tvalue值

}


/******************************************************************** 

名称:主函数  作用:程序的执行入口  

********************************************************************/ 


void main() 

[size=36.9444px]{          [/size]

        Uart_Init();                                                                                        //波特率发生器 

        ms_delay(10);

        ESP8266_Set("AT+CWMODE=2");                                                         //设置路由器模式1 station,模式2 AP,模式3 station+AP混合模式   

        ms_delay(500);

[size=36.9444px]//        ESP8266_Set("AT+RST");                                                                         //重新启动wifi模块            [/size]

推荐阅读

史海拾趣

维峰电子(WCON)公司的发展小趣事

质量是企业的生命线。维峰电子始终将质量管理作为公司发展的重中之重。公司建立了完善的质量管理体系,从原材料采购、生产过程到产品检验等各个环节都进行严格把控。同时,公司还引入了先进的检测设备和技术,确保产品的质量和性能达到最高标准。这些措施的实施不仅提升了产品的竞争力,也赢得了客户的信任和好评。

COMPUTAR公司的发展小趣事

在光学技术不断革新的背景下,CBC株式会社于1979年成功研制出第一只手动变焦镜头。这一创新产品不仅提升了镜头的拍摄效果和灵活性,还进一步巩固了CBC在光学领域的领先地位。手动变焦镜头的推出,为CBC赢得了更多客户的青睐,也为公司的后续发展注入了新的动力。

Harvatek Corporation公司的发展小趣事

背景:成立于1975年的Hantronix公司,自诞生之初便专注于为工业、医疗市场的多元化客户群提供LCD显示解决方案。在那个电子显示技术刚刚起步的年代,Hantronix凭借其前瞻性的市场洞察力和技术积累,迅速在行业中站稳脚跟。

发展:公司初期便明确了其产品定位,即专注于高品质、高性能的LCD显示产品,以满足工业控制和医疗设备对显示精度、稳定性和耐用性的严苛要求。通过不断的技术研发和产品优化,Hantronix逐渐在市场中建立了良好的口碑。

Delphi Connection Systems公司的发展小趣事

面对日益激烈的市场竞争和客户需求的变化,Delphi Connection Systems公司积极推进数字化转型。公司引入先进的生产管理系统和智能化设备,实现了生产过程的自动化和智能化。这不仅提高了生产效率和质量稳定性,也降低了生产成本和人力需求。数字化转型使公司更加灵活和高效地应对市场变化,为未来的发展奠定了坚实基础。

Electrolube公司的发展小趣事

在电子行业的激烈竞争中,Electrolube公司始终坚持以客户需求为导向,不断创新和拓展产品线。除了UVCL涂层外,公司还推出了一系列树脂、涂料和热管理解决方案的产品组合,为EV电池提供全面保护。

这些产品不仅具有优异的性能表现,而且能够满足不同客户的需求。例如,某些产品具有优异的耐高温性能,适用于高温环境下的电子设备;而另一些产品则具有出色的耐化学腐蚀性能,能够在恶劣的工作环境中保持稳定的性能。

Electrolube公司通过不断的技术创新和产品优化,成功拓展了市场份额,并在电子行业中树立了良好的品牌形象。同时,公司还积极与各大汽车制造商合作,共同推动电动汽车产业的发展。

Communications公司的发展小趣事

在电子行业的浪潮中,一家名为“通信先锋”的公司凭借其前瞻性的技术创新,迅速崭露头角。公司创始人敏锐地捕捉到了无线通信市场的巨大潜力,并投入大量资源进行研发。经过数年的努力,他们成功开发出了一款具有革命性的无线通信技术,极大地提升了数据传输速度和稳定性。

随着这款技术的推广和应用,“通信先锋”迅速获得了市场的认可。他们不仅与各大运营商建立了紧密的合作关系,还积极开拓海外市场,将产品和技术推向全球。在激烈的市场竞争中,他们凭借卓越的技术实力和良好的口碑,逐渐成为了通信行业的领军企业。

问答坊 | AI 解惑

关于模拟电路的零极点问题

我在看书的时候遇到一些关于系统零极点的问题,比如一个放大器的零极点对整个放大器信号有什么样的影响,在拉扎维的模拟CMOS集成电路设计中提到右半平面的零点会给系统带来稳定性问题,但没有讲到零极点各种位置对系统的影响在这里想请教路过的高手 ...…

查看全部问答>

有高手会:单片机如何与摄像头进行连接,及其的连接电路和软件编程吗??

单片机如何与摄像头进行连接,及其的连接电路和软件编程?? 其实可以不用单片机的。。。ARM也可以的。。但是最好用单片机(我就对单片机熟悉点) 迷茫啊。。。。在网上找了好多天都找不到。。。有哪个高手有经验的给点灵感啊。。 呵呵。。。我 ...…

查看全部问答>

节能灯的制造流程

毛管生产工艺流程: 切管---涂粉---成型(分螺旋和直管,直管分弯管和接桥,接桥在烤焙之后)---烤焙---封口---排气---老炼 镇流器生产工艺流程: 器件成型---插件---浸焊---切脚---补焊---检测维修 整灯组装工艺流程: 插头(毛管和下塑件粘接)---装 ...…

查看全部问答>

集成运放的放大倍数可调(1,10,100)的放大电路,且放大倍数可由mcu控制

老师让我们设计一基于集成运放的放大倍数可调(1,10,100)的放大电路,且放大倍数可由mcu控制。但我模电学得不是很好,51单片机只是刚入门,我实在没思路,不知道该怎么入手,大家帮忙说点大体思路啊,感激不尽! …

查看全部问答>

关于PCI采集卡的内存映射问题!

通过对PCI寄存器的设置,内存映射了256M的内存空间。 请问这256M的内存空间可以用来进行DMA传输吗,怎么转换物理地址和线性地址?…

查看全部问答>

WINCE下中断线程

各位兄弟:     我现在在看周立功的IIC的驱动代码 在IIC的驱动代码下,创建可一个中断线程来进入中断 但是另一个关于IIC的WINCE驱动资料上写的是在oalintr.h中添加中断号的宏定义,在cfw.c中添加IIC中断的初始化,在armint.c中添加ISR ...…

查看全部问答>

关于CF卡的移植问题,高手们给点意见

s3c2440的WINCE系统下,将SMDK2440的BSP包中的CF卡驱动,移植到SMDK2440A中。开发板是优龙公司的YL2440开发板,该开发板本身的BSP包SMDK2440是有CF卡驱动的,但是想在该开发板上运行SMDK2440A的BSP包,需要将SMDK2440的CF卡驱动移植到SMDK2440A上。 ...…

查看全部问答>

关于WINCE编译平台的问题

编译完wince平台后,下载image文件到模拟器中运行.模拟器一直黑屏.下面是DEBUG信息: 望高人指点!   0 PID:0 TID:0 RTC - Status Reg B - 0x02       0 PID:0 TID:0 PCIBIOS:: BIOS Address static map to addr= ...…

查看全部问答>

修改终端输入的问题

我在弄一个终端的程序 通过fgets()来获取用户的输入 现在的问题是,用户输入数据之后,不能对输入的数据进行修改 如果使用\"…

查看全部问答>

为什么在EVB中显示其它窗体会导致主窗体上的菜单自动消失 ?

当关闭窗体后,消失的主窗体的菜单栏也不能自动再显示出来?请问如何解决?…

查看全部问答>