中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

什么做網(wǎng)站做個(gè)多少錢啊排名優(yōu)化seo

什么做網(wǎng)站做個(gè)多少錢啊,排名優(yōu)化seo,品牌網(wǎng)app下載,讓網(wǎng)站排名下降“智能檢測(cè),精準(zhǔn)把控。溫濕度檢測(cè)系統(tǒng),為您的生活帶來全方位的健康保障?!?非標(biāo)協(xié)議項(xiàng)目【上】 前言預(yù)備知識(shí)1溫濕度檢測(cè)系統(tǒng)需求2.代碼整合2.1找到編程實(shí)現(xiàn)LCD1602顯示一行工程,打開代碼文件,將所需的LCD1602驅(qū)動(dòng)代碼拷貝到溫濕…

“智能檢測(cè),精準(zhǔn)把控。溫濕度檢測(cè)系統(tǒng),為您的生活帶來全方位的健康保障?!?非標(biāo)協(xié)議項(xiàng)目【上】

    • 前言
    • 預(yù)備知識(shí)
    • 1溫濕度檢測(cè)系統(tǒng)需求
    • 2.代碼整合
      • 2.1找到`編程實(shí)現(xiàn)LCD1602顯示一行工程`,打開`代碼文件`,將所需的`LCD1602驅(qū)動(dòng)代碼`拷貝到`溫濕度檢測(cè)系統(tǒng)_1602顯示串口發(fā)送工程`內(nèi)。
      • 2.2找到`串口編程03_PC發(fā)送指令控制LED`工程,打開`代碼文件`,將所需的`LCD1602驅(qū)動(dòng)代碼`拷貝到`溫濕度檢測(cè)系統(tǒng)_1602顯示串口發(fā)送工程`內(nèi)。
      • 2.3找到`溫濕度通過串口傳到PC顯示`工程,打開`代碼文件`,將所需的`LCD1602驅(qū)動(dòng)代碼`拷貝到`溫濕度檢測(cè)系統(tǒng)_1602顯示串口發(fā)送工程`內(nèi)。
    • 3.構(gòu)造DHT11溫濕度數(shù)據(jù)處理函數(shù)
      • 3.1定義存放`溫度`的`字符數(shù)組`和存放`濕度`的`字符數(shù)組`
      • 3.2在DHT11溫濕度數(shù)據(jù)處理函數(shù)內(nèi)將溫濕度數(shù)據(jù)存入相應(yīng)字符數(shù)組。
    • 4.主函數(shù)調(diào)用API順序
      • 4.1延時(shí)1秒,穩(wěn)定系統(tǒng)
      • 4.2初始化串口
      • 4.3初始化LCD1602
      • 4.4延時(shí)2秒,穩(wěn)定DHT11模塊
      • 4.5在`while(1)`死循環(huán)內(nèi)調(diào)用延時(shí)一秒函數(shù),實(shí)現(xiàn)每隔1秒刷新溫濕度數(shù)據(jù)
      • 4.6在`while(1)`死循環(huán)內(nèi)調(diào)用讀取DHT11溫濕度函數(shù)
      • 4.7在`while(1)`死循環(huán)內(nèi)調(diào)用DHT11溫濕度數(shù)據(jù)處理函數(shù)
      • 4.8在`while(1)`死循環(huán)內(nèi)多次調(diào)用發(fā)送字符串函數(shù),實(shí)現(xiàn)向PC發(fā)送溫濕度數(shù)據(jù)
      • 4.9在`while(1)`死循環(huán)內(nèi)多次調(diào)用LCD1602顯示一行字符函數(shù),實(shí)現(xiàn)在LCD1602上顯示溫濕度數(shù)據(jù)
    • 5.完整工程代碼
    • 6項(xiàng)目運(yùn)行結(jié)果
    • 結(jié)束語

前言

??本篇博文介紹的是用51單片機(jī)的非標(biāo)準(zhǔn)寫協(xié)議項(xiàng)目溫濕度檢測(cè)系統(tǒng)【上】,包含溫濕度檢測(cè)系統(tǒng)需求,代碼整合,構(gòu)造DHT11溫濕度數(shù)據(jù)處理函數(shù),主函數(shù)調(diào)用API順序,完整工程代碼,項(xiàng)目運(yùn)行結(jié)果。看到這篇博文的朋友,可以先贊再看嗎?

預(yù)備知識(shí)

??一、基本電路標(biāo)識(shí)識(shí)別和接線,例如VCC,GND。
??二、電腦基本操作復(fù)制粘貼
??三、C變量
??四、基本輸入輸出
??五、流程控制
??六、函數(shù)

??七、指針
??八,字符串

??如果以上知識(shí)不清楚,請(qǐng)自行學(xué)習(xí)后再來瀏覽。如果我有沒例出的,請(qǐng)?jiān)谠u(píng)論區(qū)寫一下。謝謝啦!

1溫濕度檢測(cè)系統(tǒng)需求

  • 能夠?qū)崟r(shí)通過51單片機(jī)串口發(fā)送溫濕度信息
  • 能夠?qū)崟r(shí)通過51單片機(jī)驅(qū)動(dòng)LCD1602顯示溫濕度信息

2.代碼整合

2.1找到編程實(shí)現(xiàn)LCD1602顯示一行工程,打開代碼文件,將所需的LCD1602驅(qū)動(dòng)代碼拷貝到溫濕度檢測(cè)系統(tǒng)_1602顯示串口發(fā)送工程內(nèi)。

  • LCD1602 IO口定義代碼
//數(shù)據(jù)線定義
//D0到D7 -- P0.1到P0.7
#define dataBuffer P0//控制線定義
/*
RS--P1.0
RW--P1.1
EN--P1.4
*/
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^4;
  • LCD1602初始化必要延時(shí)代碼
void Delay15ms()		//@11.0592MHz
{unsigned char i, j;i = 27;j = 226;do{while (--j);} while (--i);
}void Delay5ms()		//@11.0592MHz
{unsigned char i, j;i = 9;j = 244;do{while (--j);} while (--i);
}
  • 檢測(cè)LCD1602忙代碼
void checkBusy()
{char tmp   = 0x80;dataBuffer = 0x80;while(tmp & 0x80)    //只要dataBuffer中的第8位為1就為忙,因?yàn)锽F:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。{RS = 0;            //根據(jù)手冊(cè)中指令表可知RS=0,RW=1RW = 1;            //RW=1為讀的操作,所以需要配置讀的時(shí)序圖EN = 0;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN開始為低電平_nop_();           //執(zhí)行空函數(shù)等待EN拉高EN = 1;            //根據(jù)手冊(cè)中的讀時(shí)序圖,EN被拉高_nop_();           //執(zhí)行空函數(shù)等待tpw和tF高電平過程_nop_();tmp = dataBuffer;  //讀取dataBuffer中的忙信號(hào)EN = 0;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN被拉低_nop_();           //根據(jù)手冊(cè)中的寫時(shí)序圖,讓EN保持一段時(shí)間的低電平}
}
  • 向LCD1602寫地址也就是指令代碼和寫數(shù)據(jù)代碼
void writeCmd(char cmd)
{       checkBusy();       //檢測(cè)忙信號(hào)RS = 0;            //RS等于零,是寫指令操作RW = 0;            //RW在手冊(cè)中寫的時(shí)序圖是可以全程低電平EN = 0;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN開始為低電平_nop_();           //執(zhí)行空函數(shù)等待EN拉高dataBuffer = cmd;  //根據(jù)手冊(cè)中的寫時(shí)序圖,數(shù)據(jù)在EN還在低電平時(shí)就建立數(shù)據(jù)EN = 1;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN被拉高_nop_();           //執(zhí)行空函數(shù)等待tpw和tF高電平過程_nop_();EN = 0;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN被拉低_nop_();           //根據(jù)手冊(cè)中的寫時(shí)序圖,讓EN保持一段時(shí)間的低電平
}void weiteData(char cData)
{checkBusy();       //檢測(cè)忙信號(hào)RS = 1;            //RS等于1,是寫數(shù)據(jù)操作RW = 0;            //RW在手冊(cè)中寫的時(shí)序圖是可以全程低電平EN = 0;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN開始為低電平_nop_();           //執(zhí)行空函數(shù)等待EN拉高dataBuffer = cData;  //根據(jù)手冊(cè)中的寫時(shí)序圖,數(shù)據(jù)在EN還在低電平時(shí)就建立數(shù)據(jù)EN = 1;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN被拉高_nop_();           //執(zhí)行空函數(shù)等待tpw和tF高電平過程_nop_();EN = 0;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN被拉低_nop_();           //根據(jù)手冊(cè)中的寫時(shí)序圖,讓EN保持一段時(shí)間的低電平
}
  • 初始化LCD1602代碼
void initLCD1602()
{
//(1) 延時(shí) 15msDelay15ms();
//(2) 寫指令 38H(不檢測(cè)忙信號(hào))writeCmd(0x38);
//(3) 延時(shí) 5msDelay5ms();
//(4) 以后每次寫指令,讀/寫數(shù)據(jù)操作均需要檢測(cè)忙信號(hào)
//(5) 寫指令 38H:顯示模式設(shè)置writeCmd(0x38);
//(6) 寫指令 08H:顯示關(guān)閉writeCmd(0x08);
//(7) 寫指令 01H:顯示清屏writeCmd(0x01);
//(8) 寫指令 06H:顯示光標(biāo)移動(dòng)設(shè)置writeCmd(0x06);
//(9) 寫指令 0CH:顯示開及光標(biāo)設(shè)置writeCmd(0x0C);
}
  • 讓LCD1602顯示一行字符的代碼
void LCD1602ShowARow(char line,char column,char *str)
{switch(line) //選擇哪行顯示{case 1:                                        //第一行顯示writeCmd(0x80 + column);                   //選擇哪個(gè)位置顯示,因?yàn)槲恢玫刂返淖罡呶槐仨殲?,所以0x80+列數(shù)while(*str)                                //判斷字符串指針變量不為空?qǐng)?zhí)行循環(huán),不用判斷字符串結(jié)束標(biāo)志{weiteData(*str);                         //發(fā)送字符串單個(gè)字符str++;                                   //字符串指針變量偏移}break;case 2:                                        //第二行顯示writeCmd(0x80 + 0x40 + column);            //選擇哪個(gè)位置顯示,因?yàn)槲恢玫刂返淖罡呶槐仨殲?,所以0x80+列數(shù),又因?yàn)榈诙械牧袕?x40開始while(*str)                                //所以是從0x80 + 0x40 + 列數(shù)(特別注意){                     weiteData(*str);str++;}break;}
}
  • 最后將以上代碼整合到溫濕度檢測(cè)系統(tǒng)_1602顯示串口發(fā)送工程內(nèi)。

2.2找到串口編程03_PC發(fā)送指令控制LED工程,打開代碼文件,將所需的LCD1602驅(qū)動(dòng)代碼拷貝到溫濕度檢測(cè)系統(tǒng)_1602顯示串口發(fā)送工程內(nèi)。

  • 串口初識(shí)化代碼
void UartInit(void)		//自己配
{//配置串口工作方式為方式1,從只收不發(fā)改為能收能發(fā)SCON =  0x50;//配置輔助寄存器,減少電磁輻射,穩(wěn)定晶振頻率  AUXR =  0x01;//設(shè)置定時(shí)器工作方式為定時(shí)器1的8位自動(dòng)重裝TMOD &= 0x0F;TMOD |= 0x20;//設(shè)置串口波特率為9600,0誤差TH1   = 0xFD;TL1   = 0xFD;//打開定時(shí)器1TR1   = 1;
}
  • 發(fā)送字節(jié)和發(fā)送字符串代碼
void sendByte(char data_mas)
{SBUF = data_mas;while(!TI);TI = 0;          //一定要軟件置零,不然會(huì)出現(xiàn)亂序
}void sendString(char *str)
{while(*str != '\0'){sendByte(*str);str++;}
}

2.3找到溫濕度通過串口傳到PC顯示工程,打開代碼文件,將所需的LCD1602驅(qū)動(dòng)代碼拷貝到溫濕度檢測(cè)系統(tǒng)_1602顯示串口發(fā)送工程內(nèi)。

  • 存放溫濕度數(shù)據(jù)代碼
char THdata[5];      //存放溫濕度數(shù)據(jù)變量
  • 打開DHT11高速模式和讀取DHT11溫濕度數(shù)據(jù)必要延時(shí)代碼
void Delay30ms()		//@11.0592MHz
{unsigned char i, j; i = 54;j = 199;do{while (--j);} while (--i);
}void Delay40us()		//@11.0592MHz
{unsigned char i;_nop_();i = 15;while (--i);
}
  • 打開DHT11高速模式代碼
void startDHT()
{Data = 1;Data = 0;//至少延時(shí)18ms,那么延時(shí)30msDelay30ms();Data = 1;//檢測(cè)d點(diǎn)while(Data);//檢測(cè)e點(diǎn)while(!Data);//檢測(cè)f點(diǎn)while(Data);
}
  • 讀取DHT11溫濕度數(shù)據(jù)代碼
void readDHTData()
{char i; //輪次char j; //次數(shù)char flag;char tmp;//打開DHT11高速模式startDHT();for(i=0; i<5; i++){for(j=0; j<8; j++){//檢測(cè)G點(diǎn)while(!Data);//根據(jù)傳送1和0的時(shí)間不同,0是26us,1是70us。等待60us后,如果Data = 1,就傳1,Data = 0;就傳0//Delay60us();   延時(shí)60微妙太長了,可能在讀0時(shí)讀到下一個(gè)發(fā)送序列了,延時(shí)40微妙Delay40us();if(Data == 1){flag = 1;while(Data); //傳1的時(shí)間比較久,所以要等傳1結(jié)束}else{flag = 0;}tmp = tmp << 1;tmp |= flag;}THdata[i] = tmp;}
}

3.構(gòu)造DHT11溫濕度數(shù)據(jù)處理函數(shù)

3.1定義存放溫度字符數(shù)組和存放濕度字符數(shù)組

char Temperature[9]; //定義溫度字符數(shù)組
char Humidness[9];    //定義濕度字符數(shù)組

3.2在DHT11溫濕度數(shù)據(jù)處理函數(shù)內(nèi)將溫濕度數(shù)據(jù)存入相應(yīng)字符數(shù)組。

void THDataHandler()
{//濕度數(shù)據(jù)處理Humidness[0] = 'H';Humidness[1] = ':';Humidness[2] = THdata[0]/10 + 0x30;Humidness[3] = THdata[0]%10 + 0x30;Humidness[4] = '.';Humidness[5] = THdata[1]/10 + 0x30;Humidness[6] = THdata[1]%10 + 0x30;Humidness[7] = '%';Humidness[8] = '\0';//溫度處理Temperature[0] = 'T';Temperature[1] = ':';Temperature[2] = THdata[2]/10 + 0x30;Temperature[3] = THdata[2]%10 + 0x30;Temperature[4] = '.';Temperature[5] = THdata[3]/10 + 0x30;Temperature[6] = THdata[3]%10 + 0x30;Temperature[7] = 'C';Temperature[8] = '\0';
}

4.主函數(shù)調(diào)用API順序

4.1延時(shí)1秒,穩(wěn)定系統(tǒng)

Delay1000ms();

4.2初始化串口

UartInit();

4.3初始化LCD1602

initLCD1602();

4.4延時(shí)2秒,穩(wěn)定DHT11模塊

Delay1000ms();       //等待DHT模塊穩(wěn)定
Delay1000ms();

4.5在while(1)死循環(huán)內(nèi)調(diào)用延時(shí)一秒函數(shù),實(shí)現(xiàn)每隔1秒刷新溫濕度數(shù)據(jù)

Delay1000ms();

4.6在while(1)死循環(huán)內(nèi)調(diào)用讀取DHT11溫濕度函數(shù)

readDHTData();

4.7在while(1)死循環(huán)內(nèi)調(diào)用DHT11溫濕度數(shù)據(jù)處理函數(shù)

THDataHandler();

4.8在while(1)死循環(huán)內(nèi)多次調(diào)用發(fā)送字符串函數(shù),實(shí)現(xiàn)向PC發(fā)送溫濕度數(shù)據(jù)

//通過串口發(fā)送溫濕度數(shù)據(jù)
sendString(Humidness);
sendString("\r\n");
sendString(Temperature);
sendString("\r\n");
sendString("\r\n");

4.9在while(1)死循環(huán)內(nèi)多次調(diào)用LCD1602顯示一行字符函數(shù),實(shí)現(xiàn)在LCD1602上顯示溫濕度數(shù)據(jù)

LCD1602ShowARow(1,4,Humidness); 
LCD1602ShowARow(2,4,Temperature);

5.完整工程代碼

#include "reg52.h"
#include "intrins.h"//數(shù)據(jù)線定義
//D0到D7 -- P0.1到P0.7
#define dataBuffer P0sbit LED1 = P3^7; //用尾定義聲明LED1
sbit Data = P3^3; //把DHT11接在單片機(jī)的P1.0口
sfr AUXR = 0x8e;   //聲明AUXR寄存器地址//控制線定義
/*
RS--P1.0
RW--P1.1
EN--P1.4
*/
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^4;char THdata[5];      //存放溫濕度數(shù)據(jù)變量
char Temperature[9]; //定義溫度字符數(shù)組
char Humidness[9];    //定義濕度字符數(shù)組void Delay15ms()		//@11.0592MHz
{unsigned char i, j;i = 27;j = 226;do{while (--j);} while (--i);
}void Delay5ms()		//@11.0592MHz
{unsigned char i, j;i = 9;j = 244;do{while (--j);} while (--i);
}void Delay30ms()		//@11.0592MHz
{unsigned char i, j; i = 54;j = 199;do{while (--j);} while (--i);
}void Delay40us()		//@11.0592MHz
{unsigned char i;_nop_();i = 15;while (--i);
}void Delay1000ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void checkBusy()
{char tmp   = 0x80;dataBuffer = 0x80;while(tmp & 0x80)    //只要dataBuffer中的第8位為1就為忙,因?yàn)锽F:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。{RS = 0;            //根據(jù)手冊(cè)中指令表可知RS=0,RW=1RW = 1;            //RW=1為讀的操作,所以需要配置讀的時(shí)序圖EN = 0;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN開始為低電平_nop_();           //執(zhí)行空函數(shù)等待EN拉高EN = 1;            //根據(jù)手冊(cè)中的讀時(shí)序圖,EN被拉高_nop_();           //執(zhí)行空函數(shù)等待tpw和tF高電平過程_nop_();tmp = dataBuffer;  //讀取dataBuffer中的忙信號(hào)EN = 0;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN被拉低_nop_();           //根據(jù)手冊(cè)中的寫時(shí)序圖,讓EN保持一段時(shí)間的低電平}
}void writeCmd(char cmd)
{       checkBusy();       //檢測(cè)忙信號(hào)RS = 0;            //RS等于零,是寫指令操作RW = 0;            //RW在手冊(cè)中寫的時(shí)序圖是可以全程低電平EN = 0;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN開始為低電平_nop_();           //執(zhí)行空函數(shù)等待EN拉高dataBuffer = cmd;  //根據(jù)手冊(cè)中的寫時(shí)序圖,數(shù)據(jù)在EN還在低電平時(shí)就建立數(shù)據(jù)EN = 1;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN被拉高_nop_();           //執(zhí)行空函數(shù)等待tpw和tF高電平過程_nop_();EN = 0;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN被拉低_nop_();           //根據(jù)手冊(cè)中的寫時(shí)序圖,讓EN保持一段時(shí)間的低電平
}void weiteData(char cData)
{checkBusy();       //檢測(cè)忙信號(hào)RS = 1;            //RS等于1,是寫數(shù)據(jù)操作RW = 0;            //RW在手冊(cè)中寫的時(shí)序圖是可以全程低電平EN = 0;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN開始為低電平_nop_();           //執(zhí)行空函數(shù)等待EN拉高dataBuffer = cData;  //根據(jù)手冊(cè)中的寫時(shí)序圖,數(shù)據(jù)在EN還在低電平時(shí)就建立數(shù)據(jù)EN = 1;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN被拉高_nop_();           //執(zhí)行空函數(shù)等待tpw和tF高電平過程_nop_();EN = 0;            //根據(jù)手冊(cè)中的寫時(shí)序圖,EN被拉低_nop_();           //根據(jù)手冊(cè)中的寫時(shí)序圖,讓EN保持一段時(shí)間的低電平
}void initLCD1602()
{
//(1) 延時(shí) 15msDelay15ms();
//(2) 寫指令 38H(不檢測(cè)忙信號(hào))writeCmd(0x38);
//(3) 延時(shí) 5msDelay5ms();
//(4) 以后每次寫指令,讀/寫數(shù)據(jù)操作均需要檢測(cè)忙信號(hào)
//(5) 寫指令 38H:顯示模式設(shè)置writeCmd(0x38);
//(6) 寫指令 08H:顯示關(guān)閉writeCmd(0x08);
//(7) 寫指令 01H:顯示清屏writeCmd(0x01);
//(8) 寫指令 06H:顯示光標(biāo)移動(dòng)設(shè)置writeCmd(0x06);
//(9) 寫指令 0CH:顯示開及光標(biāo)設(shè)置writeCmd(0x0C);
}void UartInit(void)		//自己配
{//配置串口工作方式為方式1,從只收不發(fā)改為能收能發(fā)SCON =  0x50;//配置輔助寄存器,減少電磁輻射,穩(wěn)定晶振頻率  AUXR =  0x01;//設(shè)置定時(shí)器工作方式為定時(shí)器1的8位自動(dòng)重裝TMOD &= 0x0F;TMOD |= 0x20;//設(shè)置串口波特率為9600,0誤差TH1   = 0xFD;TL1   = 0xFD;//打開定時(shí)器1TR1   = 1;
}void sendByte(char data_mas)
{SBUF = data_mas;while(!TI);TI = 0;          //一定要軟件置零,不然會(huì)出現(xiàn)亂序
}void sendString(char *str)
{while(*str != '\0'){sendByte(*str);str++;}
}void startDHT()
{Data = 1;Data = 0;//至少延時(shí)18ms,那么延時(shí)30msDelay30ms();Data = 1;//檢測(cè)d點(diǎn)while(Data);//檢測(cè)e點(diǎn)while(!Data);//檢測(cè)f點(diǎn)while(Data);
}void LCD1602ShowARow(char line,char column,char *str)
{switch(line) //選擇哪行顯示{case 1:                                        //第一行顯示writeCmd(0x80 + column);                   //選擇哪個(gè)位置顯示,因?yàn)槲恢玫刂返淖罡呶槐仨殲?,所以0x80+列數(shù)while(*str)                                //判斷字符串指針變量不為空?qǐng)?zhí)行循環(huán),不用判斷字符串結(jié)束標(biāo)志{weiteData(*str);                         //發(fā)送字符串單個(gè)字符str++;                                   //字符串指針變量偏移}break;case 2:                                        //第二行顯示writeCmd(0x80 + 0x40 + column);            //選擇哪個(gè)位置顯示,因?yàn)槲恢玫刂返淖罡呶槐仨殲?,所以0x80+列數(shù),又因?yàn)榈诙械牧袕?x40開始while(*str)                                //所以是從0x80 + 0x40 + 列數(shù)(特別注意){                     weiteData(*str);str++;}break;}
}void readDHTData()
{char i; //輪次char j; //次數(shù)char flag;char tmp;//打開DHT11高速模式startDHT();for(i=0; i<5; i++){for(j=0; j<8; j++){//檢測(cè)G點(diǎn)while(!Data);//根據(jù)傳送1和0的時(shí)間不同,0是26us,1是70us。等待60us后,如果Data = 1,就傳1,Data = 0;就傳0//Delay60us();   延時(shí)60微妙太長了,可能在讀0時(shí)讀到下一個(gè)發(fā)送序列了,延時(shí)40微妙Delay40us();if(Data == 1){flag = 1;while(Data); //傳1的時(shí)間比較久,所以要等傳1結(jié)束}else{flag = 0;}tmp = tmp << 1;tmp |= flag;}THdata[i] = tmp;}
}void THDataHandler()
{//濕度數(shù)據(jù)處理Humidness[0] = 'H';Humidness[1] = ':';Humidness[2] = THdata[0]/10 + 0x30;Humidness[3] = THdata[0]%10 + 0x30;Humidness[4] = '.';Humidness[5] = THdata[1]/10 + 0x30;Humidness[6] = THdata[1]%10 + 0x30;Humidness[7] = '%';Humidness[8] = '\0';//溫度處理Temperature[0] = 'T';Temperature[1] = ':';Temperature[2] = THdata[2]/10 + 0x30;Temperature[3] = THdata[2]%10 + 0x30;Temperature[4] = '.';Temperature[5] = THdata[3]/10 + 0x30;Temperature[6] = THdata[3]%10 + 0x30;Temperature[7] = 'C';Temperature[8] = '\0';
}void main()
{LED1 = 1;            //一上電就讓燈滅Delay1000ms();UartInit();          //初始化串口initLCD1602();               //初始化LCD1602Delay1000ms();       //等待DHT模塊穩(wěn)定Delay1000ms();while(1)             //防止程序退出主函數(shù),導(dǎo)致LED1微弱閃爍{Delay1000ms();     //間隔1秒讀一次readDHTData();     //讀取DHT11溫濕度數(shù)據(jù)THDataHandler();   //將DHT11傳回的數(shù)據(jù)裝入溫濕度字符數(shù)組//通過串口發(fā)送溫濕度數(shù)據(jù)sendString(Humidness);sendString("\r\n");sendString(Temperature);sendString("\r\n");sendString("\r\n");LCD1602ShowARow(1,4,Humidness); LCD1602ShowARow(2,4,Temperature);}}

6項(xiàng)目運(yùn)行結(jié)果

在這里插入圖片描述

結(jié)束語

??很高興您能看到這里,點(diǎn)個(gè)贊再走唄。謝謝您啦!!!

http://m.risenshineclean.com/news/64399.html

相關(guān)文章:

  • wordpress用windows會(huì)慢寧波seo關(guān)鍵詞優(yōu)化報(bào)價(jià)
  • 自己做的網(wǎng)站做登錄網(wǎng)店運(yùn)營與推廣
  • 做競彩網(wǎng)站代理犯法么站長統(tǒng)計(jì)app軟件下載
  • 個(gè)人網(wǎng)站可以做企業(yè)宣傳個(gè)人如何做seo推廣
  • 吉林seo刷關(guān)鍵詞排名優(yōu)化進(jìn)一步優(yōu)化
  • 想做程序員需要學(xué)什么黑帽seo技術(shù)
  • 廈門建設(shè)局網(wǎng)站改到哪網(wǎng)站優(yōu)化軟件
  • 網(wǎng)站的服務(wù)器選擇seo品牌優(yōu)化百度資源網(wǎng)站推廣關(guān)鍵詞排名
  • ui設(shè)計(jì)技術(shù)培訓(xùn)學(xué)校手機(jī)管家一鍵優(yōu)化
  • 網(wǎng)站頁面建議seo優(yōu)化是什么職業(yè)
  • 做網(wǎng)站建設(shè)需要多少錢網(wǎng)絡(luò)營銷模式
  • 優(yōu)質(zhì)網(wǎng)站的衡量標(biāo)準(zhǔn)本地網(wǎng)絡(luò)seo公司
  • 烏審旗建設(shè)局網(wǎng)站seo咨詢價(jià)格找推推蛙
  • 福州做網(wǎng)站長沙seo排名扣費(fèi)
  • wordpress 論壇模版南京seo按天計(jì)費(fèi)
  • 如果在網(wǎng)站做推廣連接公司關(guān)鍵詞seo
  • 陜西省人民政府網(wǎng)百度推廣關(guān)鍵詞優(yōu)化
  • 全功能電子商務(wù)網(wǎng)站建設(shè)百度推廣關(guān)鍵詞怎么優(yōu)化
  • 蘭州網(wǎng)站開發(fā)百度推廣優(yōu)化工具
  • 長沙 php企業(yè)網(wǎng)站系統(tǒng)銷售方案怎么做
  • wordpress修改上傳大小限制合肥seo排名優(yōu)化公司
  • 沙元埔做網(wǎng)站的公司優(yōu)化大師有必要安裝嗎
  • 西安高新網(wǎng)站制作收錄是什么意思
  • 房地產(chǎn)銷售營銷方案上??焖倥琶麅?yōu)化
  • 公司網(wǎng)站建設(shè)策劃方案拉新平臺(tái)哪個(gè)好傭金高
  • 常平鎮(zhèn)網(wǎng)站仿做廣州網(wǎng)站開發(fā)多少錢
  • 電腦網(wǎng)站搜索如何做西地那非能提高硬度嗎
  • 自適應(yīng)wordpress美女圖片整站百度今日小說排行榜
  • 外國s網(wǎng)站建設(shè)seo網(wǎng)站排名優(yōu)化工具
  • 制作公司網(wǎng)站抖音企業(yè)推廣