版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 數(shù)字濕度計設計</b></p><p><b> 一、設計任務</b></p><p> 設計一個以單片機為核心的濕度測量系統(tǒng),可實現(xiàn)的功能為:</p><p> 能實時測量所處環(huán)境的濕度值,誤差0.5%;</p><p> 系統(tǒng)可有用戶預設濕度值,測濕范圍0—
2、100%;</p><p> 如若超出預設值時,系統(tǒng)會自動報警,即發(fā)光二極管亮,同時蜂鳴器發(fā)出報警;</p><p> 系統(tǒng)采用數(shù)碼管顯示,能顯示設定溫度值和測得的實際值;</p><p> 設計出原理圖和實際電路板圖。</p><p><b> 二、設計方案</b></p><p>
3、按照系統(tǒng)設計攻能要求,確定系統(tǒng)有5個模塊組成:主控制器,數(shù)字濕度傳感器,報警電路,按鍵電路及驅(qū)動先是電路。</p><p> 主控制器的功能有單片機來完成,主要負責處理由數(shù)字濕度傳感器送來的數(shù)據(jù),并把處理好的數(shù)據(jù)送向顯示模塊。數(shù)字濕度傳感器主要來采集周圍環(huán)境參數(shù),并把所采集來的數(shù)據(jù)送向主控制器。按鍵電路主要用來完成單片機的復位操作和濕度初始值的設定。由于單片機輸出電流太?。▋H有幾毫安),所以增加驅(qū)動電路主要用來
4、驅(qū)動八位數(shù)碼管發(fā)光的。</p><p><b> 三、硬件電路設計</b></p><p><b> Pc板圖</b></p><p><b> 元器件的選則</b></p><p><b> 濕度傳感器</b></p><p&
5、gt; 濕度傳感器的溫度系數(shù)。濕敏元件除對環(huán)境濕度敏感對溫度都十分敏感,而且在不同的相對濕度下其溫度系數(shù)是有差異的。溫漂非線性,我們需要在電路上加溫度補償式。濕度傳感器溫漂曲線的線性化直接影響到補償?shù)男Ч?,非線性的溫漂補償不出較好的效果,采用單片機軟件補償,或者無溫度補償?shù)臐穸葌鞲衅饕彩潜WC不了全溫范圍的精度,只有采用硬件溫度跟隨性補償才會獲得真實的補償效果。應注意的是多數(shù)濕敏元件在40℃以上的環(huán)境是無法正常工作。</p>
6、<p> DHT11數(shù)字溫濕度傳感器是一款含有已校準數(shù)字信號輸出的溫濕度復合傳感器。它應用專用的數(shù)字模塊采集技術和溫濕度傳感技術,確保產(chǎn)品具有極高的可靠性與卓越的長期穩(wěn)定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應、抗干擾能力強、性價比極高等優(yōu)點。每個DHT11傳感器都在極為精確的濕度校驗室中進行校準。校準系數(shù)以程序的形式儲存在OTP內(nèi)存中,傳感器
7、內(nèi)部在檢測信號的處理過程中要調(diào)用這些校準系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,信號傳輸距離可達20米以上,使其成為各類應用甚至最為苛刻的應用場合的最佳選則。產(chǎn)品為 4 針單排引腳封裝。連接方便,特殊封裝形式可根據(jù)用戶需求而提供。</p><p><b> 實物圖</b></p><p><b> 引腳說明</b>
8、;</p><p> 通信過程 </p><p> 總線空閑狀態(tài)為高電平,主機把總線拉低等待DHT11響應,主機把總線拉低必須大于18毫秒,保證DHT11能檢測到起始信號。DHT11接收到主機的開始信號后,等待主機開始信號結(jié)束,然后發(fā)送80us低電平響應信號.主機發(fā)送開始信號結(jié)束后,延時等待20-40us后, 讀取DHT11的響應信號,主機發(fā)送開始信號后,可以切換到輸入
9、模式,或者輸出高電平均可, 總線由上拉電阻拉高。 </p><p><b> LCD</b></p><p> 液晶顯示器1602液晶也叫1602字符型液晶它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊它有若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符。1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行1615 個字
10、符液晶模塊(顯示字符和數(shù)字)。目前市場上字符液晶大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應用于市面上大部分的字符型液晶。</p><p><b> 四、軟件設計</b></p><p><b> 軟件任務,程序框圖</b></p><p><b&g
11、t; 程序:</b></p><p> #include<reg52.h></p><p> #include<math.h></p><p> #include<INTRINS.H></p><p> #define uint unsigned int</p><
12、p> #define uchar unsigned char</p><p> sbit seg1=P2^0;</p><p> sbit seg2=P2^1;</p><p> sbit seg3=P2^2;</p><p> sbit DQ=P1^3;//ds18b20 端口</p><p> s
13、fr dataled=0x80;//顯示數(shù)據(jù)端口</p><p> Ucharcode duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,};</p><p> uchar code we[]={0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xf
14、e,0xff,}; uchar huanchong[]={0,0,0,0,0,0,0,0,};</p><p> uchar dispcount,T0count,time,temp[8];</p><p> sbit led=P1^2;</p><p><b> bit flag;</b></p><p> ui
15、nt temp1;</p><p> uchar flag_get,count,num,minute,second;</p><p> unsigned long x;</p><p> void delay1(uchar MS);</p><p> unsigned int ReadTemperature(void);</p&
16、gt;<p> void Init_DS18B20(void);</p><p> unsigned char ReadOneChar(void);</p><p> void WriteOneChar(unsigned char dat);</p><p> void delay(uint z)</p><p><
17、;b> {</b></p><p> while(z--);</p><p><b> }</b></p><p> void main(void)</p><p><b> {</b></p><p> uchar TempH,TempL;&l
18、t;/p><p><b> uchar i;</b></p><p><b> EA=1;</b></p><p> TMOD=0x15;</p><p><b> TH0=0;</b></p><p><b> TL0=0;</b
19、></p><p> TH1=(65536-4000)/256;</p><p> TL1=(65536-4000)%256;</p><p><b> TR1=1;</b></p><p><b> TR0=1;</b></p><p><b>
20、ET0=1;</b></p><p><b> ET1=1;</b></p><p><b> count=0;</b></p><p><b> while(1)</b></p><p><b> {</b></p>&
21、lt;p> P2=we[7];P0=duan[huanchong[0]];delay(250); P2=we[6];P0=duan[huanchong[1]];delay(250); P2=we[5];P0=duan[huanchong[2]];delay(250); P2=we[4];P0=duan[huanchong[3]];delay(250); P2=we[3];P0=duan[12];delay(250);</
22、p><p> P2=we[2];P0=duan[TempL];delay(250);</p><p> P2=we[1];P0=duan[(TempH%100)%10]|0x80;delay(250); P2=we[0];P0=duan[(TempH%100)/10];delay(250); if(flag
23、_get==1) //定時讀取當前溫度</p><p><b> {</b></p><p> temp1=ReadTemperature();</p><p> if(temp1&0x8000)</p><p><b> {</b></p><p> P2
24、=we[0];P0=0x40;//負號標志</p><p> temp1=~temp1; // 取反加1</p><p> temp1 +=1;</p><p><b> }</b></p><p><b> else</b></p><p> P2=we[0];P
25、0=0;</p><p> TempH=temp1>>4;</p><p> TempL=temp1&0x0F;</p><p> TempL=TempL*6/10;//小數(shù)近似處理</p><p> flag_get=0;</p><p><b> }</b><
26、;/p><p> if(flag==1)</p><p><b> {</b></p><p><b> flag=0;</b></p><p> x=T0count*65536+TH0*256+TL0;</p><p> for(i=0;i<4;i++)<
27、/p><p><b> {</b></p><p> temp[i]=0;</p><p><b> }</b></p><p><b> i=0;</b></p><p> while(x/10)</p><p><
28、b> {</b></p><p> temp[i]=x%10; x=x/10;</p><p><b> i++;}</b></p><p> temp[i]=x;</p><p> for(i=0;i<4;i++)</p><p><b> {<
29、;/b></p><p> huanchong[i]=temp[i]; }</p><p><b> time=0;</b></p><p> T0count=0;</p><p><b> TH0=0;</b></p><p><b> TL0=0
30、;</b></p><p><b> TR0=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void t0(v
31、oid)interrupt 1 using 0</p><p><b> {</b></p><p> T0count++;</p><p><b> }</b></p><p> void t1(void)interrupt 3 using 0</p><p>&l
32、t;b> {</b></p><p> TH1=(65536-4000)/256;</p><p> TL1=(65536-4000)%256;</p><p> time++;num++;</p><p> if(time==250)</p><p><b> {</b&
33、gt;</p><p><b> led=~led;</b></p><p><b> TR0=0;</b></p><p><b> time=0;</b></p><p><b> flag=1;</b></p><p>
34、;<b> }</b></p><p> if (num==50)</p><p><b> {num=0;</b></p><p> flag_get=1;//標志位有效</p><p><b> second++;</b></p><p>
35、 if(second>=60)</p><p><b> {</b></p><p><b> second=0;</b></p><p><b> minute++;</b></p><p><b> }</b></p>&
36、lt;p><b> }</b></p><p><b> }</b></p><p> void Init_DS18B20(void)</p><p><b> {</b></p><p> unsigned char x=0;</p><p
37、> DQ = 1; //DQ復位</p><p> delay(8); //稍做延時</p><p> DQ = 0; //單片機將DQ拉低</p><p> delay(80); //精確延時 大于 480us</p><p> DQ = 1; //拉高總線</p><p> delay(10);&
38、lt;/p><p> x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 delay(5);</p><p><b> }</b></p><p> /******************************************************************/ /* 讀一個字節(jié) */ /*****
39、*************************************************************/ unsigned char ReadOneChar(void)</p><p><b> {</b></p><p> unsigned char i=0;</p><p> unsigned char dat =
40、 0;</p><p> for (i=8;i>0;i--)</p><p><b> {</b></p><p> DQ = 0; // 給脈沖信號</p><p><b> dat>>=1;</b></p><p> DQ = 1; // 給脈
41、沖信號</p><p><b> if(DQ)</b></p><p> dat|=0x80;</p><p><b> delay(5);</b></p><p><b> }</b></p><p> return(dat);</p&
42、gt;<p><b> }</b></p><p> /******************************************************************/ /* 寫一個字節(jié) */ /******************************************************************/ void WriteO
43、neChar(unsigned char dat)</p><p><b> {</b></p><p> unsigned char i=0;</p><p> for (i=8; i>0; i--)</p><p><b> {</b></p><p>&l
44、t;b> DQ = 0;</b></p><p> DQ = dat&0x01;</p><p><b> delay(5);</b></p><p><b> DQ = 1;</b></p><p><b> dat>>=1;</b&
45、gt;</p><p><b> }</b></p><p><b> delay(5);</b></p><p><b> }</b></p><p> /********************************************************
46、**********/ /* 讀取濕度度 */ /******************************************************************/ unsigned int ReadTemperature(void)</p><p><b> {</b></p><p> unsigned char a=0;</p>
47、;<p> unsigned int b=0;</p><p> unsigned int t=0;</p><p> Init_DS18B20();</p><p> WriteOneChar(0xCC); // 跳過讀序號列號的操作</p><p> WriteOneChar(0x44); // 啟動濕度度轉(zhuǎn)換&l
48、t;/p><p> delay(200);</p><p> Init_DS18B20();</p><p> WriteOneChar(0xCC); //跳過讀序號列號的操作</p><p> WriteOneChar(0xBE); //讀取濕度寄存器等(共可讀9個寄存器) a=ReadOneChar(); //低位</p>
49、<p> b=ReadOneChar(); //高位</p><p><b> b<<=8;</b></p><p><b> t=a+b;</b></p><p> return(t);</p><p> }// 前兩個就是濕度</p><p
50、> 五、電路測試與問題解決方法</p><p> 首先是測試顯示電路的正確性,根據(jù)寫好的程序,寫入單片機中。安裝好硬件,上電,顯示正常,達到預期效果,則證明顯示電路是正常的。按下復位按鍵,LCD無顯示,松開,顯示正常,證明復位電路是正常的。然后測試得到濕度程序,將初始化程序,ADC0804正常工作的初始化程序、寫ADC0804程序、讀ADC0804程序,有了濕度子程序,濕度轉(zhuǎn)換子程序,數(shù)據(jù)轉(zhuǎn)換子程序,顯
51、示子程序正確編排后寫入單片機中,上電,顯示不正常。重新讀取源程序,經(jīng)檢查后發(fā)現(xiàn)問題出在ADC0804初始化程序有錯,修改后重新編譯并寫入單片機。上電后,顯示當前濕度。證明ADC0804工作是正常的,各部分子程序都運行正常。最后是按鍵子程序及報警子程序的調(diào)試,將正確編排后的按鍵子程序及報警子程序?qū)懭雴纹瑱C中,上電后,各個部分工作正常,在測得當前濕度超出設定濕度上下限后,蜂鳴器發(fā)出報警聲,調(diào)試基本成功。但按鍵反應遲緩是否是由于顯示程序占用時
52、間過長造成的呢,還是在于按鍵程序采用掃描方式。我們先考慮采用中斷方式解決此問題,又因為ADC0804正常工作有嚴格的時序限制,中斷在很大可能上會影到ADC0804正常工作。在嘗試并采用中斷方式后,決定仍采</p><p><b> 六、功能測試與結(jié)論</b></p><p> 在硬件和軟件單獨調(diào)試成功后進行軟硬件綜合調(diào)試,它可以分成以下三個步驟:</p>
53、;<p> 第一步,濕度傳感器有信號傳出;</p><p> 第二步,使單片機獲得中斷信號,計算出轉(zhuǎn)速值并且存儲;</p><p> 第三步,通過LCD1602顯示屏把測量的數(shù)據(jù)顯示出來。</p><p> 七、設計總結(jié)與 體會</p><p> 本系統(tǒng)是基于單片機AT89S52的處理,可以完美的實現(xiàn)對濕度的監(jiān)測??梢?/p>
54、說傳感器是實現(xiàn)測量與控制的首要環(huán)節(jié),是測控系統(tǒng)的關鍵部件。近來傳感器所檢測的信號顯著地增加,因而其品種也極其繁多。為了對各種各樣的信號進行檢測、控制,就必須獲得盡量簡單易于處理的信號。電信號能較容易地進行放大、反饋、濾波、微分、存貯、遠距離操作等。所以只有電信號能夠滿足這樣的要求。作為一種功能塊的傳感器可狹義的定義為:“將外界的輸入信號變換為電信號的一種元件。用計算機控制的自動化裝置來代替人的勞動,我們可以說電子計算機就相當于人的大腦,
55、那么傳感器則相當于人的五官。傳感器是獲取自然領域中信息的主要途徑與手段。換句話說如果不進行傳感器的開發(fā),電子計算機將處于一種不能適應實際需要的狀態(tài)。同時要求傳感器、電子計算機和執(zhí)行器三者都能相互協(xié)調(diào)。如此一來,傳感器就成了現(xiàn)代科學的中樞神經(jīng)系統(tǒng),并且日益受到人們的普遍重視,現(xiàn)代傳感器技術的應用已成為必然趨勢。有了傳感器對原始被測信號進行準確可靠的捕捉和轉(zhuǎn)換一切準確的測量和控制都可以實現(xiàn),并且是設備和系統(tǒng)都正常運行在最佳狀態(tài),從而保證生產(chǎn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設計-- 單片機的溫濕度計設計
- 單片機畢業(yè)設計--多功能空氣濕度計設計
- 畢業(yè)設計--基于單片機技術的數(shù)字溫濕度計設計
- 畢業(yè)論文--基于單片機的室內(nèi)溫濕度計的設計
- 單片機課程設計-- 基于單片機的數(shù)字溫度計設計
- 單片機課程設計報告--- 基于單片機的頻率計設計
- [雙語翻譯]單片機外文翻譯--基于單片機的低成本便攜式濕度計的設計與開發(fā)
- 單片機課程設計---基于單片機的數(shù)字溫度計設計
- 單片機課程設計--基于單片機的數(shù)字溫度計的設計
- 2015年單片機外文翻譯--基于單片機的低成本便攜式濕度計的設計與開發(fā)
- 2015年單片機外文翻譯--基于單片機的低成本便攜式濕度計的設計與開發(fā).DOCX
- 基于單片機溫度計課程設計
- 單片機課程設計報告---基于單片機的數(shù)字溫度計設計
- 基于單片機溫度計課程設計
- [雙語翻譯]單片機外文翻譯--基于單片機的低成本便攜式濕度計的設計與開發(fā)(英文)
- 課程設計--基于單片機的頻率計
- 單片機課程設計報告--基于單片機的數(shù)字溫度計設計
- [雙語翻譯]單片機外文翻譯--基于單片機的低成本便攜式濕度計的設計與開發(fā)中英全
- 單片機課程設計--基于單片機數(shù)字頻率計設計
- 課程設計-基于單片機的數(shù)字溫度計課程設計
評論
0/150
提交評論