マイクロコントローラ51(STC89C52RC)は、モジュールの温度と湿度DHT11デジタル表示信号取得を読み出します
先週末の妻はどのように多くの家庭の温度を私に尋ねました。。。私が知っているTMは、そのような地獄、何を借り、私はそれを行うと思い、当然のことながら、「TMは、」私は今、今追加したことです。。。^ _ ^、前その後、ラズベリーパイ4Bを購入したいまた再び、ブレッドボードを買ったが、カウントを求めて、大学で学んだ知識を思い出し、そのようなことになりたい、そして、それがあります。。。。。オンライン検索では、20以上のドルは、1を購入することができます。。。。しかし、プログラマーとして、それは苦痛のように好きです。。。また、私は自分のお金の少しを賞賛したいと思います。。そして、もう少し基金へ。。O(∩_∩)Oハハ〜
私はちょうど簡単なソフトウェア開発エンジニアです。。少しの知識が大学に限定し、4〜5年卒業していること、ハードウェアに関しては、忘れていた、とあなたは神の力が来て、駆動行くためにBaiduの共有に依存しています。。。
1.完成品
左、右と湿度完成エミュレーション回路の温度は、変更の実行過程異なり、シミュレーションが行くことはありません、2つの増加アラームインジケータ
2.資金調達のために彼の妻を尋ねた(O(∩_∩)O)
3.注文、購入機器
(私は期待していなかったここで、$ 20かもしれ完成品を購入していますが、それぞれが単一...インとアウトの下で三回を購入しなければならなかった一つのことをしなければならないし、ここだけ..も買って2ヶ月、それの写真を掲載マルチメーター、電気鉄線....デバイスのすべての種類...とにかく何.....の多く)
回路図シミュレーションProteus8.6バージョンを描く4
左温度、湿度右(百度は、実質的に終わりに、種々あり、これは比較的簡単です)
プロテウス回路シミュレーション言語とC - ソースコード
プログラム
#include <reg51.h> の#include <intrins.h> の#define UCHAR unsigned char型 の#define UINT unsigned int型 SBITデータ = P3 ^ 6。 ; // 定義データ線 UCHARのrec_dat [ 9 ]; //は、表示用データを受信しますアレイ // LEDデジタル0--9 UINT LED [ 10 ] = { 0xC0の、0xF9、0xA4の、0xB0、0x99、0x92、0x82と、0xF8、0x80を、0x90を}; ボイド遅延(UINT N) { UINT X、Y。 用(X = N; X> 0 ; x-- ) のために(Y = 110 ; Y> 0 ; y-- )。 } ボイドwrite_com(UCHAR COM) { // RS = 0时输入指令 P2 = COM。 遅延(5 )。 } ボイドDHT11_delay_us(UCHAR N) { 一方( - N)。 } ボイド DHT11_delay_ms(UINT Z) { UINT I、J。 用 I>(I = Z 0 ; i--) について(J = 110、J> 0 ; J、); } ボイドDHT11_start() { データ = 1。; DHT11_delay_us(2 ) データ = 0 ; DHT11_delay_ms(30); // 上記遅延18ms データ= 1。; DHT11_delay_us(30 ); } UCHAR DHT11_rec_byte() // バイト受信 { UCHAR I、DAT = 0 ; のための(I = 0 ; I < 8。; I ++) // ローを順次8ビットのデータ受信 { 一方(データ);! /// 過去/ 50US低い待機 DHT11_delay_us(8); // 遅延60us、それが高い場合、データ1そうでなければ0 DAT << = 1 ; // シフトが正しく、8ビットのデータを受信するためにときに直接シフト0 IF(データ== 1) // データ1、その結果、受信データDAT 1に1を加算 = + DAT 1。; 一方(データ); // データラインをロー待ち } 戻りDATを; } // 遅延ルーチン単位MS ボイド delay222(符号なし整数X) { 符号なし整数I、J; のために I>(I = X 0 ; i-- ) 用(J = 110、J> 0 ; J、); } // セット温度 ボイド設定温度(UCHAR値) { // 取り除かビット、十桁 INT unitPlace =値/ 1。 %10 ; int型 tenPlace =値/ 10%10 ; P0 = LED [tenPlace]; P2 = 0x80を、 delay222(3。)。 P2 = 0x00で、 P0 = LED [unitPlace]; P2 = 0x40の; delay222(3 ); P2 = 0x00で; } // セット湿度 空隙SetHumidity(UCHAR値) { // ビット、十桁除去 INT unitPlace値= / 1%10 ; int型 tenPlace =値/ 10%10 ; P0 = LED [tenPlace]; P2 = 0x20に、 delay222(図3 )。 P2 = 0x00で、 P0 = LED [unitPlace]; P2 = 0x10を、 delay222(3。); P2 = 0x00で; } ボイド DHT11_receive() // 40ビットのデータ受信 { UCHAR R_H、R_L、T_H、T_L、RH、RLをTH、TL、改訂; INT番号; // フリッカ周波数 のint COUNT2; UCHAR tempValue; UCHAR humidityValue; 数 = 20であり、 COUNT2 = 0 ; DHT11_start()。 COUNT2 = 0 ; IF(データ== 0 ) { 一方(データ== 0); // 待ち時間が引っ張ら DHT11_delay_us(40); // 遅延アサート80us R_H DHT11_rec_byte =(); //は8つの高湿度を受信しますビット ; R_L DHT11_rec_byte =() //は湿度8つのローを受信 T_H DHT11_rec_byte =(); // 受信高温8 T_L DHT11_rec_byteを=(); //は8つの低い温度受信 改訂DHT11_rec_byteを=(); //は、修正を受けビット DHT11_delay_us(25 )。 // エンド IF((R_L R_H + + + T_H T_L)==改訂) // 修正 { RH = R_H; RL = R_L; TH = T_H; TL = T_L; } / * データ処理、便利な表示* / / / rec_dat [0] = '0' +(RH / 10); // [1] rec_dat = '0' +(10%RH); // rec_dat [2] = 'R&LT'; // [3] rec_dat = 'H'; // rec_dat = '[4]'; // rec_dat = [5] ''; // rec_dat = '0' +(TH / 10)[6]。 // rec_dat [7] = '0' +(TH 10%); // [8] rec_dat = 'C'; // 温度を読み取り、湿度 tempValue = RH; humidityValue = TH; 一方(COUNT2 < 数) { / / セット温度 設定温度(tempValue); // セット湿度 SetHumidity(humidityValue); COUNT2 ++ ; } COUNT2 = 0 ; } } / * 収集されたデータを表示するために本明細書で使用lcd1602、ドライバlcd1602 51シリーズマイクロブロガーボーエンは、詳細に説明しました* / ボイドメイン() { UCHAR I。 一方、(1 ) { DHT11_receive()。 } }
プログラムとデバッグ回路をブレッドボード
買った赤の2アノードコモンのLED 10フィートの両方が、結果は、結果が間違っている購入、再び発注書に強制的に、燃え尽き、抵抗を制限されていない2つの緑の共通のカソードを買って18足、嫌な、ハエは、溶接の推定値は、理解することができます
6.溶接装置の展開と回路基板
溶接中、それはまた、警告インジケータを増加することが分かりました。そして、2つのP1.0(温度)に接続されたアラームインジケータとP1.1(湿度)を溶接
それはプリント基板の配線を引くませんので、それはおそらく少しを置き、その後、溶接開始しました。。。
本当にXiangmanは、嫌な、間違って購入するので、18フィート2陰極デジタルチューブの合計を買っていません。。これは、直接ドリフト右の限られたレベルの神、ケースに溶接されます。。。。
7.製品の表示
温度が残っている、右の湿度表示は、次に、デジタルも変更プログラム、および新しいアラームインジケータとして変更されます
回路は、おそらく導入します