久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

單片機(jī)很好玩7,,制作一個智能溫度計和濕度計,點(diǎn)擊鼠標(biāo)就能查詢

 leafcho 2019-01-12

軟件總是給人一種“無所不能”的感覺,,衣有購物軟件,,食有外賣軟件,住有訂房軟件,,行有打車軟件,。甚至,想知道電腦的主板溫度,,還可以下載監(jiān)控軟件查看,。

借助外界傳感器

看了上一節(jié)文章的朋友應(yīng)該明白,我們之所以能夠使用監(jiān)控軟件查看主板溫度,,是因?yàn)殡娔X主板集成了溫度傳感器,。軟件本身是無法主動獲取外界環(huán)境狀態(tài)的,例如,,如果我想知道現(xiàn)在室內(nèi)的溫度和濕度,,該下載哪個軟件呢?除非電腦本身延伸出了溫度傳感器,,否則無論哪個軟件也不能獲得室內(nèi)的溫度和濕度,。

單片機(jī)很好玩7,制作一個智能溫度計和濕度計,,點(diǎn)擊鼠標(biāo)就能查詢

我的電腦沒有額外的傳感器,,是不是就沒有辦法查看室內(nèi)的溫度和濕度了呢?只依靠軟件的確不行,,但是配合單片機(jī)和傳感器就沒問題了,。本節(jié)將介紹這種方法。最終的效果如下,,可以在電腦上打開軟件查看我室內(nèi)的溫度和濕度信息:

單片機(jī)很好玩7,,制作一個智能溫度計和濕度計,,點(diǎn)擊鼠標(biāo)就能查詢

RH 表示濕度信息,88% 左右,,TM 表示溫度,,7度左右。

計劃使用的還是 51 單片機(jī),,傳感器是 DHT11,。DHT11 數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器,包括一個電阻式感濕元件和一個 NTC 測溫元件,,并與一個高性能的 8 位單片機(jī)連接,。DHT11 只有一根數(shù)據(jù)線,可如下與單片機(jī)相連:

單片機(jī)很好玩7,,制作一個智能溫度計和濕度計,,點(diǎn)擊鼠標(biāo)就能查詢

編寫 C語言代碼,啟動 DHT11 溫濕度傳感器

那么怎樣使用 51 單片機(jī)采集 DHT11 采集的溫濕度信息呢,?這就需要看它的通信協(xié)議了

單片機(jī)很好玩7,,制作一個智能溫度計和濕度計,點(diǎn)擊鼠標(biāo)就能查詢

這就明白了,,51 單片機(jī)先將總線拉低 18 ms 以上,,然后再拉高 20~40 us。接著就可以等待 DHT11 的響應(yīng)了,,響應(yīng)信號也很簡單,,就是先低后高,之后再傳來的就是數(shù)據(jù)了,。所以,,初始化動作的 C語言代碼可以如下寫:

void dht11_start(){ P20 = 1; delay_10us(2000); P20 = 0; delay_10us(2000); P20 = 1; while(P20); while(!P20);}

單片機(jī)很好玩7,制作一個智能溫度計和濕度計,,點(diǎn)擊鼠標(biāo)就能查詢

delay_10us() 函數(shù)是在上一節(jié)的內(nèi)容基礎(chǔ)上實(shí)現(xiàn)的函數(shù),,它的C語言代碼如下:

set_timer0(10);void delay_10us(unsigned int n){ while(n--){ start_timer0(); wait_timer0(); }}

dht11_start() 函數(shù)的邏輯非常簡單,先將與 DHT11 數(shù)據(jù)線連接的 P20 口拉低 20 ms 再拉高,,接著的 while(P20) 和 while(!P20) 是等待 DHT11 的響應(yīng)信號的,。

編寫C語言代碼,讀取DHT11溫濕度信息

DHT11 啟動后,,會一次性發(fā)送 40 bit 的數(shù)據(jù),,高位先出,它的數(shù)據(jù)格式為:

1Byte濕度整數(shù)部分 + 1Byte濕度小數(shù)部分 + 1Byte溫度整數(shù)部分 + 1Byte溫度小數(shù)部分 + 1Byte校驗(yàn)和

那么,, 什么樣的信號表示 bit 1,,什么樣的信號表示 bit 0 呢?請看下圖:

單片機(jī)很好玩7,制作一個智能溫度計和濕度計,,點(diǎn)擊鼠標(biāo)就能查詢

每一 bit 的數(shù)據(jù)都是跟在 50us 的低電平之后的,,究竟是 0 還是 1 則取決于高電平的持續(xù)時間,26us~28us 的高電平表示 0,,70us 的高電平表示 1,。

單片機(jī)很好玩7,制作一個智能溫度計和濕度計,,點(diǎn)擊鼠標(biāo)就能查詢

所以讀取一次溫濕度信息的 C語言代碼可以如下寫:

void dht11_read_once(char* dat){ unsigned char i=0, j; char tmp = 0; while(P20); for(i=0; i<5; i++){ tmp = 0; for(j=0;j<8;j++){ while(!P20);  delay_10us(4); tmp <<= 1; if(P20) tmp |= 1; while(P20); } dat[i] = tmp; }}

單片機(jī)很好玩7,,制作一個智能溫度計和濕度計,點(diǎn)擊鼠標(biāo)就能查詢

dht11_read_once()函數(shù)也是非常的簡單,,核心就是判斷高電平的持續(xù)時間,。while(!P20) 執(zhí)行之后,數(shù)據(jù)總線剛好到達(dá)高電平,,接下來延時 40us,如果數(shù)據(jù)總線還是高電平,,則可以認(rèn)為該 bit 數(shù)據(jù)是 1,,否則就是 0。接下來的 while(P20) 可以等待高電平結(jié)束,,到達(dá)下一 bit 數(shù)據(jù)開始前的低電平,。

編寫C語言代碼,將讀取到的數(shù)據(jù)發(fā)送到電腦

dht11_read_once() 函數(shù)返回的是 5 字節(jié)數(shù)據(jù),,怎樣將其組合,,發(fā)送到電腦呢?其實(shí)使用 printf 函數(shù)是非常簡單,,但是經(jīng)過我的測試,,發(fā)現(xiàn)該函數(shù)消耗的資源太多了,資源匱乏的 51 單片機(jī)扛不住,,直接罷工,,無法正在工作。

所以還是要自己封裝函數(shù),,上一節(jié)封裝的 prints 函數(shù)只能傳輸字符串,,那么我們就需要再定義一個可以傳送數(shù)字的函數(shù),請看如下C語言代碼:

void printn(unsigned char num){ char buf[3] = {0}; buf[0] = num/100 + '0'; buf[1] = (num/10)%10 + '0'; buf[2] = num%10 + '0'; prints(buf);}

printn() 函數(shù)可以把一個 unsigned char 型整數(shù)轉(zhuǎn)換為字符發(fā)送到串口,。所以DHT11的溫濕度信息可以按照如下邏輯傳輸,,請看C語言代碼:

 cks = 0; cks += dat[0]; cks += dat[1]; cks += dat[2]; cks += dat[3]; if((char)cks == dat[4]){ prints('RH: ');printn(dat[0]);prints('.');printn(dat[1]);prints(' '); prints('TM: ');printn(dat[2]);prints('.');printn(dat[3]);prints('\r\n'); }else{ prints('capture failed\r\n'); }

整個 main 函數(shù)的控制邏輯如下:

單片機(jī)很好玩7,制作一個智能溫度計和濕度計,,點(diǎn)擊鼠標(biāo)就能查詢

代碼有很多個 delay_10us(50000); 是因?yàn)?DHT11 要等待 1s 以躍過不穩(wěn)定狀態(tài)?,F(xiàn)在編譯C語言程序,燒寫到單片機(jī),在電腦打開串口調(diào)試工具,,可得:

單片機(jī)很好玩7,,制作一個智能溫度計和濕度計,點(diǎn)擊鼠標(biāo)就能查詢

可以看出我的室內(nèi)溫度是 7℃左右,,濕度 88%,。對著 DHT11 哈氣,溫濕度應(yīng)該會提示,,事實(shí)也是如此:

單片機(jī)很好玩7,,制作一個智能溫度計和濕度計,點(diǎn)擊鼠標(biāo)就能查詢

當(dāng)然,,輸出的信息比較簡陋,,不過拿到數(shù)據(jù)怎么輸出都沒問題,感興趣朋友們可以自己再修飾一下哈,。

歡迎在評論區(qū)一起討論,,質(zhì)疑。文章都是手打原創(chuàng),,每天最淺顯的介紹C語言,、linux等嵌入式開發(fā),喜歡我的文章就關(guān)注一波吧,,可以看到最新更新和之前的文章哦,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多