![]() |
發布時間: 2015-8-4 17:29
正文摘要:本帖最后由 王朗的誘惑 于 2015-8-4 21:05 編輯 前幾天在某寶上看到DHT11,感覺藍色的外殼做的很漂亮,然后就買了1個。結果發現網上的程序都是給舊12T單片機用的,注釋也沒幾句,用著很不順手。所以就自己按照數 ... |
把主函數里的break都改成continue![]() |
雖然看不懂,但是還是感覺很NB |
rozzzzz 發表于 2021-12-13 11:31 那改的還挺多,延時函數、串口初始化參數、GetData 里的 t 值。搞臺示波器一會就搞定了,沒有示波器或者邏輯分析儀估計要折騰好久。 |
感謝樓主,如果我的晶振是11.0592的要改那些地方呢![]() ![]() |
感謝樓主 |
stc89c52rclpz 發表于 2020-4-20 23:25 如果通過了累加校驗應該不會出錯啊……檢查傳感器附近是不是有熱源,也不能有陽光直射;檢查算法,手動輸入數據讓LCD顯示看看數據有沒有變;最后再拿水銀溫度計對照一下看看……如果都不行,試試別的傳感器,比如LM75、DS18B20什么的,看看讀數是不是還不正常。(如果這些都試過了還是不行,建議以后不要看天氣預報 ![]() |
用LCD顯示的數據特別不準咋辦。。是這東西本來就誤差大,還是時間沒取好導致數據有誤差啊?或者算法?不能直接高位/10,%10?太離譜了家里溫度顯示27攝氏度,天氣預報也就15攝氏度![]() |
sasafair 發表于 2020-3-21 19:56 文本接收時發送的數字需要進行ASCII編碼,比如發送0,實際發送的字節是0x30;發送1,實際發送的字節是0x31,依次類推。 實現的方法有很多,可以自己寫轉換函數,轉換要發送的數據的每個十進制位;也可以用sprintf函數把數據轉換成字符串然后發送字符串;還可以重定向printf然后直接用printf。 你這個情況的話,推薦使用sprintf。如果為了學習ASCII編碼,建議自己寫個轉換函數。 祝好運~ ![]() |
你這個思路比較好 相當于軟件示波器了 借鑒你這個思路調了408AS 的dht11 數據出來了 !! 另外問個問題 : 串口接收時 開文本接收時 數據一直是字符亂碼 怎么解決 ? SendString("\r\n濕度:"); SendData(dat_r[0]); //濕度整數 SendString("\r\n溫度:"); SendData(dat_r[2]); //溫度整數 ///////////////////////////////////////// 我的串口函數 : /****************************************************************************** ****************************************************************Author:Liming**/ void SendData(unsigned char dat) { while (B_TX1_Busy); //等待前面的數據發送完成 B_TX1_Busy = 1; SBUF = dat; //寫數據到UART數據寄存器 } /******************************************************************************* * @brief None * @param None * @retval None ****************************************************************Author:Liming**/ void SendString(char *s) { while (*s) //檢測字符串結束標志 { SendData(*s++); //發送當前字符 } } |
謝謝大俠, 高手。已經用你的程序做出來通過…… ![]() http://www.zg4o1577.cn/bbs/dpj-182291-1.html |
值得參考學習,謝謝分享. |
謝謝分享 |
感謝樓主的程序,麻煩咨詢下樓主,你的STC52程序中 #define JUDGE 4 //用于判斷通信的0和1,與單片機速度和晶振頻率有關 這是起啥作用。 我看在程序里調用時: if(t >JUDGE) //高電平持續時間較長(70us) dat8 += 1; //傳輸值為1 能解答一下為什么t>JDGE是與70us進行比較呢?新手不太明白,謝謝了。 還有dat8 += 1;是不是就是把dat8最后一位給“1”的意思哈? |
yechuan220 發表于 2020-1-31 17:23 沒……現在我大概明白,提出這些問題的老哥們是沒有示波器什么的,那就串口調試吧。DHT11這東西不是把信號全發過去才返回的,通信的過程就是反饋的過程,比如主機發一個開始信號,然后DHT11就會響應一個低電平信號,檢測這個信號,就知道之前的開始信號正不正常。類似于打電話,得聽到對方的聲音,才知道信號沒問題,對吧。 |
樓主,有沒有在STC15f2k60s上測試過DHT11? 找了很多網上的代碼,根本就讀不出來。 |
夢在夏天 發表于 2019-12-15 20:16 沒有……盲調主要看人品,最好想辦法搞個示波器或者邏輯分析儀。 ![]() |
我測試成功了,謝謝樓主的幫助![]() |
樓主,有沒有在IAP15W4K58S4測試過DHT11? 求分享~ |
zeki520kiki 發表于 2019-11-12 09:11 我沒試過……如果實在調不出來,強烈建議用示波器或者邏輯分析儀看看波形。 |
樓主,有沒有在STC15F408AD測試過DHT11? 找了很多網上的代碼,根本就讀不出來。 |
最近在研究dht11,多謝分享 |
ontheroad 發表于 2019-3-1 17:29 這是STC89C52RC的程序,晶振頻率11.0592MHz,接口還是P1.0,剛剛測試成功了。 |
35.33 KB, 下載次數: 80, 下載積分: 黑幣 -5
11.0592MHz
ontheroad 發表于 2019-3-1 17:29 沒有誒,不過我手上有元件,我可以幫你試試~ |
樓主,有沒有在STC89C52上測試過DHT11? 找了很多網上的代碼,根本就讀不出來。 |
謝謝樓主 |
值得學習!!! |
代碼很有用 |
本帖最后由 王朗的誘惑 于 2017-11-18 11:03 編輯 njzyg 發表于 2017-11-18 09:55 DHT11是單總線器件,驅動的時候時序容易出問題,但是環節太多不知道問題出在哪,調試的時候就費勁。不斷檢測錯誤就是想知道問題出在哪個環節,然后有針對性地解決。那個自加的具體時間不知道,和單片機速度有關系,先把前面調試好了,然后記錄下來0和1對應的t值通過串口發上來,取平均值就可以了。 |
樓主好,感謝分享。請問為什么要檢測那么多次錯誤呢。另外 while(DATA && ++t); 語句檢測時間t自加一次需要多久時間,謝謝樓主 |
cp66 發表于 2017-8-24 13:41 寫個發送字符串函數,把數據的十位和個位分開發,串口助手用文本模式接收。 |
我在stc15上用的,仿真軟件上串口輸出時十六進制,怎么才能輸出的是十進制呢? |
aiait 發表于 2017-5-26 11:06 把數據送到1602屏幕上就行了吧?只是這樣的話不用串口。串口可以用來調試,看看有沒有數據讀出來。 |
smallriver 發表于 2017-5-25 13:13 單總線一般都是時序問題,最好是能有臺示波器看看。 |
請問大神,要用1602顯示的話,還要用到串口嗎? |
請問大神,有沒有DHT11加1602顯示的綜合程序? |
這兩天一直在研究,開始初始化都失敗,然后呢卻卻讀出來數據,真是鬧心,借鑒一下程序看有沒有效果 |
感謝分享,學習了。 |
學習了 |