历史上的今天
返回首页

历史上的今天

今天是:2024年12月16日(星期一)

正在发生

2019年12月16日 | C51单片机利用ESP8266配置WIFI,发送温度数据的源码

2019-12-16 来源:51hei

使用DS18B20,ESP8266,实现WIFI传输温度,底层部分代码。其中WIFI是作为服务器,上位机作为客户端。

单片机源程序如下:

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

程序名:wifi_3.c

功能:单片机与手机通信,实现温度信息的传输

编程人: baxlumen

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

#include "reg52.h"

#include

#define uint unsigned int

#define uchar unsigned char

#define ulong  unsigned long

typedef unsigned int u16;        

typedef unsigned char u8;

sbit DSPORT=P3^7;

sbit moto=P1^1;



sbit CLK  = P3^6;          //时钟

sbit DIN  = P3^4;          //输入

sbit CS   = P3^5;          //片选


#define LCD1602_DATAPINS P0

sbit LCD1602_E=P2^7;

sbit LCD1602_RW=P2^5;

sbit LCD1602_RS=P2^6;



u16 sun;    //光照

int temp;

int sdata;           //温度

int xiaoshu1;

int xiaoshu2;


float tp;

uchar DisplayData[]={0,0,0,0,0,0,0,0};


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

定义程序中所需要的延时

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

void Delay1ms(uint y)   

{

        uint x;

        for( ; y>0; y--)

        {

                for(x=110; x>0; x--);

        }

}

void delay(u16 i)

{

        while(i--);        

}

void delay1ms()

{

unsigned char i;

for(i=124;i>0;i--);  //延时124*8+10=1002us

}

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

* 函 数 名         : Lcd1602_Delay1ms

* 函数功能                   : 延时函数,延时1ms

* 输    入         : c

* 输    出         : 无

* 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。

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


void Lcd1602_Delay1ms(uint c)   //误差 0us

{

    uchar a,b;

        for (; c>0; c--)

        {

                 for (b=199;b>0;b--)

                 {

                          for(a=1;a>0;a--);

                 }      

        }            

}

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

初始化DS18B20

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

uchar Ds18b20Init()

{

        uchar i;

        DSPORT = 0;                         //将总线拉低480us~960us

        i = 70;        

        while(i--);//延时642us

        DSPORT = 1;                        //然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低

        i = 0;

        while(DSPORT)        //等待DS18B20拉低总线

        {

                Delay1ms(1);

                i++;

                if(i>5)//等待>5MS

                {

                        return 0;//初始化失败

                }

        

        }

        return 1;//初始化成功

}




void Ds18b20WriteByte(uchar dat)//写入数据

{

        uint i, j;


        for(j=0; j<8; j++)

        {

                DSPORT = 0;                       //每写入一位数据之前先把总线拉低1us

                i++;

                DSPORT = dat & 0x01;  //然后写入一个数据,从最低位开始

                i=6;

                while(i--); //延时68us,持续时间最少60us

                DSPORT = 1;        //然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值

                dat >>= 1;

        }

}


uchar Ds18b20ReadByte()          //读数据

{

        uchar byte, bi;

        uint i, j;        

        for(j=8; j>0; j--)

        {

                DSPORT = 0;//先将总线拉低1us

                i++;

                DSPORT = 1;//然后释放总线

                i++;

                i++;//延时6us等待数据稳定

                bi = DSPORT;         //读取数据,从最低位开始读取                

                byte = (byte >> 1) | (bi << 7);                                                  

                i = 4;                //读取完之后等待48us再接着读取下一个数

                while(i--);

        }                                

        return byte;

}


void  Ds18b20ChangTemp() //设置DS18B20

{

        Ds18b20Init();

        Delay1ms(1);

        Ds18b20WriteByte(0xcc);                //跳过ROM操作命令                 

        Ds18b20WriteByte(0x44);            //温度转换命令

        //Delay1ms(100);        //等待转换成功,而如果你是一直刷着的话,就不用这个延时了

   

}


void  Ds18b20ReadTempCom()        //读取温度数据

{        


        Ds18b20Init();

        Delay1ms(1);

        Ds18b20WriteByte(0xcc);         //跳过ROM操作命令

        Ds18b20WriteByte(0xbe);         //发送读取温度命令

}


void Ds18b20ReadTemp()                //将温度数据转化为十进制

{

        

        uchar tmh, tml,tem,tem2,tem3;

        Ds18b20ChangTemp();                                 //先写入转换命令

        Ds18b20ReadTempCom();                        //然后等待转换完后发送读取温度命令

        tml = Ds18b20ReadByte();                //读取温度值共16位,先读低字节

        tmh = Ds18b20ReadByte();                //再读高字节

        sdata = tml/16+tmh*16;

        if(sdata>29)        

           //直流电机,当温度数值超过30度时启动

                {

                  moto=1;

                  Delay1ms(3000);

                  moto=0;        

                }         

        tem=tml/16+tmh*16;

        xiaoshu1 = (tml&0x0f)*10/16; //小数第一位

        xiaoshu2 = (tml&0x0f)*100/16%10;//小数第二位

        tem2=(tml&0x0f)*10/16;

    tem3=(tml&0x0f)*100/16%10;

  

    DisplayData[0] = sdata/10;

        DisplayData[1] = sdata%10;

        DisplayData[2] = '.';

           DisplayData[3] =xiaoshu1;

        DisplayData[4] =xiaoshu2;




                

}


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

串口通信初始化

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

void UsartInit()

{

        SCON=0X50;                        //设置为工作方式1

        TMOD=0X20;                        //设置计数器工作方式2

        PCON=0X80;                        //波特率加倍

        TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的

        TL1=0XF3;

        ES=1;                                                //打开接收中断

        EA=1;                                                //打开总中断

        TR1=1;                                                //打开计数器

推荐阅读

史海拾趣

深圳杜因特(DOINGTER)公司的发展小趣事

作为一家快速发展的电子企业,杜因特深知人才是公司最宝贵的财富。因此,公司始终将团队建设和人才培养放在重要位置。通过引进优秀人才、加强内部培训等方式,杜因特打造了一支高效协作、专业精湛的团队。同时,公司还为员工提供了良好的工作环境和福利待遇,让员工能够在一个如家般的团队中做具有革新性的工作。

以上五个故事仅是基于已知信息对深圳杜因特公司发展起来的相关事实的概括性描述,具体细节可能因实际情况而有所不同。

Heidenhain Corp公司的发展小趣事

随着智能制造的兴起,海德汉公司积极转型为智能制造解决方案提供商。该公司与多家电子企业合作,共同探索智能制造的新模式和新路径。通过集成海德汉的数控系统、自动化设备和智能管理软件,这些企业成功构建了高效、灵活、智能的生产体系。海德汉的智能制造解决方案不仅提高了生产效率和产品质量,还降低了生产成本和能耗,为电子行业的可持续发展做出了积极贡献。

CSR plc(剑桥硅晶无线电)公司的发展小趣事

为了进一步拓展业务范围,CSR plc在2010年8月收购了专业音频压缩技术供应商APT。这次收购让CSR plc得以将APT-X的低延迟音频压缩编解码器与公司的下一代音频产品实现更紧密的集成,从而支持公司向前景更广阔的音频市场进军。这一举措不仅让CSR plc在音频领域取得了更大的市场份额,也为其未来的发展开辟了新的道路。

EOREX公司的发展小趣事

在电子行业的早期,EOREX公司由一群热衷于技术创新的工程师创立。他们专注于研发高性能的半导体芯片,以满足当时市场对更快、更稳定电子产品的需求。通过不断的技术创新和产品迭代,EOREX逐渐在半导体领域树立了良好的口碑,吸引了众多合作伙伴和投资者的关注。随着公司规模的扩大,EOREX不断加大对研发的投入,推出了更多具有竞争力的产品,逐渐在电子行业中崭露头角。

Excellence Optoelectronics Inc公司的发展小趣事

在电子行业的早期,Excellence Optoelectronics Inc公司(简称EOI)就致力于LED技术的研发。公司创始人凭借对光电技术的深刻理解和对市场趋势的敏锐洞察,带领团队成功研发出了一系列高性能、高亮度的LED产品。这些产品不仅满足了市场对高品质LED的需求,还为公司赢得了良好的口碑。随着技术的不断进步,EOI不断推出创新产品,逐渐在LED市场中占据了重要地位。

ERNI Electronics公司的发展小趣事

ERNI Electronics一直致力于技术创新和产品升级。继成功开发出世界上第一个DIN连接器后,公司又发展了多种电路板连接器和输入/输出连接器。这些连接器具有不同的针脚大小和间距,满足了各种应用场景的需求。此外,ERNI还推出了高速数据传输连接器、坚固耐用的M8/M12连接器以及最新的MiniBridge单排电缆连接器系统等创新产品,不断推动电子行业的发展。

问答坊 | AI 解惑

CN3063-专为太阳能供电方案

概述:             CN3063是可以用太阳能电池供电的单节锂电池充电管理芯片.该器件 内部包括功率晶体管,应用时不需要外部的电流检测电阻和阻流二极管.         内 ...…

查看全部问答>

cofdm 无线应急指挥调度系统

cofdm产品   无线应急指挥调度系统…

查看全部问答>

仪表放大器设计指南

本帖最后由 paulhyde 于 2014-9-15 03:59 编辑 仪表放大器设计指南,希望对做仪器仪表的同学有所帮助!  …

查看全部问答>

摩托罗拉的MC9S08AC16的I/O口带负载能力是多少呀?

如题。 刚刚用这个东西,翻了规格书也不知道。 MC9S08AC16的I/O究竟可以驱动多大的电流,希望各位可以给出一个精确的数据。 谢谢啦。…

查看全部问答>

CAN总线概况与原理

一、概述       对于一般控制,设备间连锁可以通过串行网络完成。因此,BOSCH公司开发了CAN总线(Controller Area Network),并已取得国际标准化组织认证(ISO11898),其总线结构可参照I SO/OSI参考模型。同时,国际上一些大的半导体 ...…

查看全部问答>

网络收音机有人做不?

网络收音机有人做不? 我想玩玩…

查看全部问答>

WinCE 文件夹属性

Directory(\"\\123\"):-Directory(\"war3 \") 可以在mycomputer目录下创建一个文件夹,请问这个文件夹的属性要怎么设置 ?…

查看全部问答>

我在fedora9上的交叉编译

编译embedded flash出现了impossible constraint in `asm\'错误,不知道怎么解决,是修改makefile文件么?…

查看全部问答>

求助t-DMB的音频AAC++负载

本人最近在做T-DMB项目,想问问AAC++方面的!   我现在把SL包解析后获得SL包负载数据是如何组织的?我要对AAC++解码,该如何处理SL包的负载? 有搞过这方面的大侠吗?给点提示,定重谢! 我最想知道到底解析音频SL包后的数据是啥格 ...…

查看全部问答>