欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機通過ESP8266發(fā)送DS18B20溫度傳感器數(shù)據(jù)到串口助手
[打印本頁]
作者:
進擊的小牛
時間:
2020-4-1 17:46
標題:
51單片機通過ESP8266發(fā)送DS18B20溫度傳感器數(shù)據(jù)到串口助手
將DS18B20連接在51單片機上之后,通過按鍵k4發(fā)送溫度數(shù)據(jù)到上位機
程序?qū)崿F(xiàn)的功能:
按鍵k1、k2:ESP8266在STA模式下連接上位機
K3:發(fā)送數(shù)據(jù)
具體代碼如下:
#include "reg52.h"
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
typedef unsigned int u16; //對數(shù)據(jù)類型進行聲明定義
typedef unsigned char u8;
uchar aa[]={0,0,0,0,0}; //數(shù)組初始值
uint wd; //溫度
sbit k1=P3^5; //定義P35口是k1
sbit k2=P3^4;
sbit k3=P3^3;
sbit k4=P3^2;
sbit led1=P1^0; //定義P10口是led1
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit DQ=P2^0;
u8 dat;
void Init(void);//串口初始化函數(shù)
void Init_DS18B20(void);//DS18B20初始化
void Delay_ms(u16 n);//延時子函數(shù)
void Sent_ZF(u8 dat);//發(fā)送一個字節(jié)
void AT_Send_String(u8 *string);//發(fā)送字符串
void ESP8266_Init();//ESP8266初始化
void fasong();
void shuju();
void wendu();
void show();
void Init(void) //串口初始化函數(shù)
{
TMOD=0x20; //定時器工作方式2,8位自動重載(0010 0000)
TL1=0xfd; //裝入初值
TH1=0xfd;
TR1=1; //啟動定時器1
REN=1; //允許串行口接收數(shù)據(jù)
SM0=0; //工作方式1,10位異步收發(fā)
SM1=1;
EA=1; //打開全局中斷控制
ES=1; //打開串行口中斷
}
/*******************************************************************************
* 函 數(shù) 名 : delay
* 函數(shù)功能 : 延時函數(shù),i=1時,大約延時10us
*******************************************************************************/
void Delay_ms(u16 i) //串口通信延時函數(shù)
{
while(i--);
}
void delay(uint i) //DS18B20延時函數(shù),延時5us
{
do
{
_nop_();
_nop_();
_nop_();
i--;
}
while(i);
}
void DS() //溫度傳感器的初始化
{
uchar x=0;
DQ=1; //首先先拉高電平,為復(fù)位做準備
delay(10); //延遲一下
DQ=0; //將電平拉低,延遲至少480us
delay(120); //一次為5us,此處延遲600us,足以等待存在脈沖
DQ=1; //復(fù)位信號給出后,將電平拉高,等待獲取存在脈沖
delay(16); //延遲15~60us,此處延遲90us,足以給存在脈沖時間
x=DQ; //讀取存在脈沖
delay(80); //讀取存在脈沖,存在脈沖至少為60us到240us的低電平信號,這里給出400us
DQ=1;
}
uchar Read1b() //讀取1個字節(jié)
{
uchar i=0;
uchar dat=0;
for(i=0;i<8;i++)
{
DQ=0; //數(shù)據(jù)線拉成低電平,表示讀數(shù)據(jù)的開始
delay(1); //讀數(shù)據(jù)時,需要低電平保持至少1us
DQ=1; //釋放數(shù)據(jù)總線
dat>>=1; //一位一位的保存讀取到的數(shù)據(jù),所以需要移位處理
if(DQ) //讀取數(shù)據(jù)的高電平
dat|=0x80; //與操作一下,得到我們需要的數(shù)據(jù),讀取數(shù)據(jù)需要在15us內(nèi)讀取,這樣才能保證讀取的數(shù)據(jù)是正確的
delay(11);
}
return(dat);
}
void Write1b(uchar dat) //寫入1個字節(jié)
{
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() //得到溫度數(shù)據(jù)
{
uchar templ,temph,tt;
uint t;
DS(); //初始化
Write1b(0XCC); //因為我們是一個單片機和一個DS18B20連接,故在對ROM指令操作時,選擇0xCC跳過ROM指令,不對ROM編碼作出反應(yīng)
Write1b(0x44); //RAM操作中的溫度轉(zhuǎn)換指令,將轉(zhuǎn)換的溫度存入RAM的1,2地址
DS(); //初始化
Write1b(0xcc); //同上
Write1b(0xbe); //從RAM中讀取數(shù)據(jù),從0地址讀到9地址
templ=Read1b(); //從DS18B20中讀取溫度數(shù)據(jù)中低八位
temph=Read1b(); //從DS18B20中讀取溫度數(shù)據(jù)中的高八位,溫度數(shù)據(jù)由16位數(shù)據(jù)組成
t=temph;
t<<=8;
t=t|templ;
tt=t*0.0625; /*真實溫度的轉(zhuǎn)換*/
return(tt);
}
void show(uint wd) //將得到的溫度數(shù)據(jù)放到aa[]數(shù)組里
{
aa[0]=wd/10+'0';
aa[1]=wd%10+'0';
}
/*******************************************************************************
* 函 數(shù) 名 : keypros
* 函數(shù)功能 : 按鍵處理函數(shù),判斷按鍵K1是否按下
*******************************************************************************/
void keypros1() //按鍵1
{
if(k1==0) //檢測按鍵K1是否按下
{
Delay_ms(1000); //消除抖動 一般大約10ms
if(k1==0) //再次判斷按鍵是否按下
{
led1=~led1; //led狀態(tài)取反
ESP8266_Init(); //8266初始化,設(shè)置為STA模式,連接WiFi
}
while(!k1); //檢測按鍵是否松開
}
}
void keypros2() //按鍵2
{
if(k2==0) //檢測按鍵K2是否按下
{
Delay_ms(1000); //消除抖動 一般大約10ms
if(k2==0) //再次判斷按鍵是否按下
{
led2=~led2; //led狀態(tài)取反
fasong(); //接入服務(wù)器
}
while(!k2); //檢測按鍵是否松開
}
}
void keypros3() //按鍵3
{
if(k3==0) //檢測按鍵K2是否按下
{
Delay_ms(1000); //消除抖動 一般大約10ms
if(k3==0) //再次判斷按鍵是否按下
{
led3=~led3; //led狀態(tài)取反
shuju(); //發(fā)送數(shù)據(jù)
}
while(!k3); //檢測按鍵是否松開
}
}
void keypros4() //按鍵4
{
if(k4==0) //檢測按鍵K2是否按下
{ show(Get());
Delay_ms(1000); //消除抖動 一般大約10ms
if(k4==0) //再次判斷按鍵是否按下
{
led4=~led4; //led狀態(tài)取反
wendu(); //發(fā)送溫度數(shù)據(jù)
}
while(!k4); //檢測按鍵是否松開
}
}
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main()
{
Init();
P1=0Xff;
while(1)
{
keypros1(); //按鍵處理函數(shù)1
keypros2();
keypros3();
keypros4();
}
}
void Sent_ZF(u8 dat) //發(fā)送一個字節(jié)
{
ES=0; //關(guān)閉串行口中斷
TI=0; //關(guān)閉發(fā)送中斷標志位
SBUF=dat;
while(!TI);
TI=0;
ES=1; //打開串行口中斷
}
void AT_Send_String(u8 *string) //發(fā)送字符串
{
while(*string!='\0')
{
Sent_ZF(*string);
string++;
Delay_ms(1000);
}
}
void ESP8266_Init() //ESP8266初始化
{
AT_Send_String("AT+CWMODE=1\r\n"); //設(shè)置工作方式為STA模式
Delay_ms(1000000);
Delay_ms(1000000);
AT_Send_String("AT+RST\r\n"); //重啟模塊
Delay_ms(1000000);
Delay_ms(1000000);
AT_Send_String("AT+CIFSR\r\n"); //查看WiFi列表
Delay_ms(1000000);
Delay_ms(1000000);
AT_Send_String("AT+CWJAP=\"360WiFi-0F605E\",\"123456789\"\r\n"); //連接WiFi
Delay_ms(100000000);
Delay_ms(100000000);
}
void fasong()
{
AT_Send_String("AT+CIPMUX=0\r\n"); //設(shè)置為單連接模式,啟動模塊
Delay_ms(1000000);
Delay_ms(1000000);
AT_Send_String("AT+CIPSTART=\"TCP\",\"192.168.0.14\",8086\r\n"); //服務(wù)器的設(shè)置端口
Delay_ms(1000000);
Delay_ms(1000000);
AT_Send_String("AT+CIPMODE=1\r\n"); //開啟透傳
Delay_ms(1000000);
Delay_ms(1000000);
AT_Send_String("AT+CIPSEND\r\n"); //進入透傳模式
Delay_ms(1000000);
Delay_ms(1000000);
AT_Send_String("OK"); //發(fā)送OK,連接成功
Delay_ms(1000000);
Delay_ms(1000000);
}
void shuju()
{
AT_Send_String("niuwentao\r\n"); //發(fā)送字符串
Delay_ms(1000000);
Delay_ms(1000000);
}
void wendu() //發(fā)送溫度數(shù)據(jù)
{
AT_Send_String("{\"temp\":");
Delay_ms(1000);
AT_Send_String(aa);
Delay_ms(1000);
AT_Send_String("}");
Delay_ms(1000);
AT_Send_String("\r\n");
Delay_ms(1000);
}
void InterruptUART() interrupt 4 //控制小燈開關(guān)
{
RI=0; //清零
dat= SBUF; //收到的數(shù)據(jù)占存到SBUF中
{
if(dat=='o')
{
led4=0;
}
if(dat=='f')
{
led4=1;
}
}
}
作者:
1231545648
時間:
2020-4-13 21:52
沒有評論嗎?
作者:
lx807
時間:
2020-4-14 12:51
關(guān)鍵是你這啥都沒有!給個圖啥的,仿真圖都沒有,就只有個代碼,操作也沒有
作者:
有心插花花木蘭
時間:
2020-4-22 12:20
這個我已經(jīng)開發(fā)完成,可以到我的資料下載
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1