历史上的今天
返回首页

历史上的今天

今天是:2024年12月18日(星期三)

正在发生

2019年12月18日 | 51单片机通过esp8266和温度传感器将温度显示到手机上

2019-12-18 来源:51hei

需要的硬件:51单片机,ESP8266(wifi模块),DS18b20(温度传感器)
需要的软件:


手机要下载一个网络调试助手,浏览器就有。
         

部分代码:
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit DQ=P2^4;
sbit k1=P1^0;
sbit fmq=P1^4;
char receiveTable[20]=""; 
char aa[1]=""; 
uint temp,shi,ge,a,i,flag;
void delay(uint i)                //5us
{
        do
        {
                _nop_();             
                _nop_();
                _nop_();
                i--;
        }
        while(i);        
}
void delay1(uint z)                 //1ms
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void sendChar(uchar a)                                 //单片机发送一个字节
{
        SBUF = a;
        while(TI==0);
        TI=0;        
}

void sendString(uchar *s)                        //发送一个字符串
{
        while(*s!='')
        {
                sendChar(*s);
                s++;
        }
                
}
void init()
{
        /*串口中断定时器初始化*/
        TMOD=0x20;                                                        //定时器1工作在方式2  
        TH1=0xfd;                                                        //波特率为9600,精振为11.0592MHz
        TL1=0xfd;
        REN=1;                                                                //启动串行口接收数据
        SM0=0;                                                                //串口工作在方式1
        SM1=1;                                                                //串行口工作方式选择
        EA=1;                                                                //打开总中断
        TR1=1;                                                                //打开定时器中断
        /*esp8266初始化*/
    delay1(100);//延时
        sendString("AT+CWMODE=2rn");            //设置ESP8266工作在station模式
        delay1(100);        
//        sendString("AT+CIOBAUD=9600rn");        //设置9600波特率,因为esp8266波特率默认是115200
//        delay1(10);        
        sendString("AT+CIPMUX=1rn");                  //允许多连接
        delay1(100);
        sendString("AT+CIPSERVER=1,8080rn"); //设置端口号
        delay1(100);
        ES=1;                                          //开串口中断
}

void DS()        //初始化
{
        uchar x=0;
        DQ=1;                  //首先先拉高电平,为复位做准备
        delay(10);          //延迟一下
        DQ=0;                  //将电平拉低,延迟至少480us
        delay(120);          //一次为5us,此处延迟600us,足以等待存在脉冲
        DQ=1;                  //复位信号给出后,将电平拉高,等待获取存在脉冲
        delay(16);          //延迟15~60us,此处延迟90us,足以给存在脉冲时间
        x=DQ;                  //读取存在脉冲
        delay(80);          //读取存在脉冲,存在脉冲至少为60us到240us的低电平信号,这里给出400us
        DQ=1;                 
}
uchar Read1b()    //读取1个字节
{
        uchar i=0;
        uchar dat=0;
        for(i=0;i<8;i++)
        {
                DQ=0;                 //数据线拉成低电平,表示读数据的开始
                delay(1);                 //读数据时,需要低电平保持至少1us
                DQ=1;                         //释放数据总线
                dat>>=1;                 //一位一位的保存读取到的数据,所以需要移位处理
                if(DQ)                         //读取数据的高电平
                dat|=0x80;                 //与操作一下,得到我们需要的数据,读取数据需要在15us内读取,这样才能保证读取的数据是正确的
                delay(11);
        }
        return(dat);
}
void Write1b(uchar dat)
{
        uchar i=0;
        for(i=0;i<8;i++)
        {
                DQ=0;
                _nop_();
                DQ=dat&0x01;
                delay(12);
                DQ=1;
                dat>>=1;
                delay(5);        
        }                                                  
}                                   
uint Get()
{
        uchar templ,temph,tt;
        uint t;
        DS();                                   //初始化
        Write1b(0XCC);           //因为我们是一个单片机和一个DS18B20连接,故在对ROM指令操作时,选择0xCC跳过ROM指令,不对ROM编码作出反应
        Write1b(0x44);           //RAM操作中的温度转换指令,将转换的温度存入RAM的1,2地址
        DS();                                   //初始化
        Write1b(0xcc);           //同上
        Write1b(0xbe);           //从RAM中读取数据,从0地址读到9地址
        templ=Read1b();           //从DS18B20中读取温度数据中低八位
        temph=Read1b();           //从DS18B20中读取温度数据中的高八位,温度数据由16位数据组成
        t=temph;
        t<<=8;
        t=t|templ;
        tt=t*0.0625;                   /*真实温度的转换*/
        return(tt);                
}
void show(uint wd)
{
        aa[0]=wd/10+'0';          
        aa[1]=wd%10+'0';
}
void main()
{        

        init();
        while(1)
        {
                show(Get())        ;
        }
}

推荐阅读

史海拾趣

Dawn Electronics Inc公司的发展小趣事

Dawn Electronics Inc公司成立于上世纪末,当时电子市场竞争激烈,新公司难以立足。公司创始人凭借对技术的热爱和对市场的敏锐洞察,决定专注于研发高性能的定制电子元件。初创期,公司面临着资金紧张、人才短缺的困境,但创始人带领团队日夜兼程,攻克技术难题,终于在市场上推出了具有竞争力的产品,赢得了客户的认可。

Amkor公司的发展小趣事

随着市场的不断发展,Dawn Electronics Inc公司意识到技术创新的重要性。公司加大了研发投入,成立了专门的研发团队,积极探索新的技术方向。经过不懈的努力,公司成功研发出了一种新型的智能传感器,具有更高的精度和更低的功耗,这一创新技术迅速被市场接受,为公司带来了可观的收益。

EUPEC [eupec GmbH]公司的发展小趣事

EUPEC,全称欧洲电力半导体与电子公司(European Semiconductors and Electronics Company),成立于1990年。它是由西门子和德国另一家大型电器公司AEG生产电力半导体器件的两个部门合并而成。这次合并标志着EUPEC正式进入电力半导体领域,凭借其强大的技术背景和丰富的行业经验,EUPEC迅速在市场中占据了一席之地。

ELESTA GmbH公司的发展小趣事

ELESTA一直注重生产效率和产品质量的提升。公司积极引入精益生产理念,通过优化生产流程、提高生产效率、降低生产成本等方式,不断提升产品竞争力和市场占有率。这一举措不仅为公司带来了显著的经济效益,也为整个电子行业树立了标杆。

BLT Circuit Services公司的发展小趣事

BLT Circuit Services公司深知人才是企业发展的根本。因此,公司注重人才培养和引进,建立了一套完善的人才培训体系。公司不仅为员工提供系统的职业技能培训,还鼓励员工参与各种行业交流活动,提升个人综合素质。这些举措不仅提高了员工的技能水平,也为公司的长期发展提供了有力的人才保障。

Harwin公司的发展小趣事

随着通讯技术的快速发展,射频微波电缆的需求日益增长。Harbour Industries凭借其深厚的电缆制造经验和先进的技术实力,成功研发出了一系列高性能的射频微波电缆。这些电缆在微波射频领域展现出了优异的性能,广泛应用于通讯网络、广播电视、卫星通信等领域。Harbour的射频微波电缆不仅在国内市场占有一席之地,还远销海外多个国家和地区,进一步提升了公司的国际影响力。

问答坊 | AI 解惑

单片机与TA8435的步进电机细分控制方法

1 步进电机 步进电动机是纯粹的数字控制电动机,它将电脉冲信号转变成角位移,即给一个脉冲,步进电机就转一个角度,因此非常适合单片机控制。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响, ...…

查看全部问答>

SAW器件封装技术概述

1 引言 现今,随着整机尺寸的减小和元器件的高度集成,促进了元器件的小型化、薄型化。由于SAW(Surface Acoustic Wave)器件小型化并且有着出众的滤波功能,它们存许多领域的应用中扮演着非常重要的角包。小型化和多功能化是SAW器件发展的主要动力 ...…

查看全部问答>

二相与五相步进电机的差异

 概述:步进电机主要是依相数来做分类,而其中又以二相、五相步进电机为目前市场上所广泛采用。二相步进电机每转最细可分割为400等分,五相则可分割为 1000等分, 所以表现出来的特性以五相步进电机较佳、 加减速时间较短、 动态惯性较低。 二相/ ...…

查看全部问答>

ALTERA 的家庭网络产品方案

本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑 针对消费娱乐的家庭网络连接 利用多媒体家庭联网技术,各种多媒体设备 ( 例如电视机、便携式媒体播放器、照相机和蜂窝电话等) 以及数据设备 (例如PC和PDA) 可以在安全的家庭网络环境中共享音 ...…

查看全部问答>

如何不让导航仪连接上电脑识别为U盘,而是识别为同步移动设备

目前我手上有一台导航仪,用的是wince5.0的系统,现在我想在这台导航仪上开发一个程序。 目前的问题是,我无法直接在该导航仪上调试我的程序,只能将程序编译好后再复制到导航仪上运行,这样调试起来非常不方便。 因为我的导航仪目前是只要通过US ...…

查看全部问答>

菜鸟请教各位高手!!!!!

软件工程中的嵌入式软件与系统是个怎么样的专业 它的就业前景如何啊??????????…

查看全部问答>

推荐一本用PowerPC开发通信设备的书,我还是第一次见同类型的书

嵌入式设计及通信设备开发详解——基于MPC82XX处理器 卓越的链接 http://www.amazon.cn/mn/detailApp?qid=1238487283&ref=SR&sr=13-1&uid=168-0888845-7367438&prodid=bkbk941360 当当的链接 http://product.dangdang.com/product.aspx?pro ...…

查看全部问答>

WinCE中如何禁止/开启Edit自动换行功能

如题,我想实现PC上记事本的自动换行功能。…

查看全部问答>

一个非常奇怪的keil c51串口中断问题!

一个非常奇怪的keil c51串口中断问题! 比如我的程序如下: uchar b[10]; #define a4 0x03 void fun1(void) interrupt 4 { fun2(2); } fun2(uchar a2) { while(a2--) { .... } fun3(a4); } void fun3(uchar a3)//这个函数无论有没 ...…

查看全部问答>

开关电源工程调试技术

《开关电源工程调试技术》可以看一下…

查看全部问答>