倉庫溫度濕度監(jiān)測系統(tǒng)的設(shè)計_第1頁
倉庫溫度濕度監(jiān)測系統(tǒng)的設(shè)計_第2頁
倉庫溫度濕度監(jiān)測系統(tǒng)的設(shè)計_第3頁
倉庫溫度濕度監(jiān)測系統(tǒng)的設(shè)計_第4頁
倉庫溫度濕度監(jiān)測系統(tǒng)的設(shè)計_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

⑺適宜于制造流水線上的自動插件和自動裝配過程。濕度傳感器HS1101/HS1100基于獨特工藝設(shè)計的電容元件,這些相對濕度傳感器可以大批量生產(chǎn)。可以應(yīng)用于辦公自動化,車廂內(nèi)空氣質(zhì)量控制,家電,工業(yè)控制系統(tǒng)等。在需要濕度補(bǔ)償?shù)膱龊纤部梢缘玫胶艽蟮膽?yīng)用。HS1100/HS1101的外部結(jié)構(gòu)及符號如圖3.10所示:圖3.10HS1101的外形圖HS1101的特性參數(shù)見表3.9。表3.9HS1101的特性參數(shù)特性參數(shù)典型值單位濕度測量范圍1~99%RH供電電壓5V標(biāo)稱電容@55%RH180Pf溫度系數(shù)0.04Pf/℃33-75%的平均靈敏度0.34Pf/%RH漏電流1Na150小時結(jié)露后恢復(fù)時間10S濕度遲滯±1.5%長時間穩(wěn)定性0.5%RH/yr響應(yīng)時間5S偏離曲線±2%RH工作溫度-40~100℃儲存溫度-40~125℃圖3.11為濕敏電容工作的溫、濕度范圍,圖3.12為濕度-電容響應(yīng)曲線。圖3.11濕敏電容工作的溫、濕度范圍圖3.12濕度—電容響應(yīng)曲線相對濕度在0%~100%RH范圍內(nèi);電容量由162PF變到200PF,其誤差不大于±2%RH;響應(yīng)時間小于5S;溫度系數(shù)為0.04PF/℃,可見精度是較高的。3.2.2濕度測量電路HS1100/HS1101電容傳感器,在電路構(gòu)成中等效于一個電容器件,其電容量隨著所測空氣濕度的增大而增大。如何將電容的變化量準(zhǔn)確地轉(zhuǎn)變?yōu)橛嬎銠C(jī)易于接受的信號,常用兩種方法:一是將該濕敏電容置于運(yùn)放與阻容組成的橋式振蕩電路中,所產(chǎn)生的正弦波電壓信號經(jīng)整流、直流放大、再A/D轉(zhuǎn)換為數(shù)字信號;另一種是將該濕敏電容置于555振蕩電路中,將電容值的變化轉(zhuǎn)為與之呈反比的電壓頻率信號,可直接被計算機(jī)所采集。我采用第二種方法。頻率輸出的555測量振蕩電路如圖3.13所示。集成定時器555芯片外接電阻R4、R2與濕敏電容C(這里的HS11××指HS1101),構(gòu)成了對C的充電回路。7端通過芯片內(nèi)部的晶體管對地短路又構(gòu)成了對C的放電回路,并將引腳2、6端相連引入到片內(nèi)比較器,便成為一個典型的多諧振蕩器,即方波發(fā)生器。另外,R3是防止輸出短路的保護(hù)電阻,R1用于平衡溫度系數(shù)。由于Fout端的電壓在0~5V之間,因此可以直接將與89C51的T1口連接。T1口作為計數(shù)器,它計得的數(shù)值是與環(huán)境相對濕度成反比的16進(jìn)制的頻率(相對濕度與頻率的對應(yīng)關(guān)系見表3.10。圖3.13555測量振蕩電路該振蕩電路兩個暫穩(wěn)態(tài)的交替過程如下:首先電源Vs通過R4、R2向HS1101充電,經(jīng)充電時間后,Uc達(dá)到芯片內(nèi)比較器的高觸發(fā)電平,約0.67Vs,此時輸出引腳3端由高電平突降為低電平,然后通過R2放電,經(jīng)t放電時間后,Uc下降到比較器的低觸發(fā)電平,約0.33Vs,此時輸出引腳3端又由低電平躍升為高電平。如此翻來覆去,形成方波輸出。其中,充放電時間為:t充電=C(R4+R2)ln2t放電=CR2ln2因而,輸出的方波頻率為:f=1/(t充電+t放電)=1/[C(R4+2R2)ln2]]可見,空氣濕度通過555測量振蕩電路就轉(zhuǎn)變?yōu)榕c之呈反比的頻率信號,表3.10給出了其中的一組典型測試值。表3.10輸出頻率與相對濕度的對應(yīng)關(guān)系濕度頻率濕度頻率(%RH)(HZ)(%RH)(HZ)0735160660010722470642820710080633030697690618640685310060335067283.2.3濕度傳感器的標(biāo)定濕度傳感器的感濕特征量與環(huán)境氣相濕度之間并不存在固有的定量關(guān)系,感濕特征量的測量值也不可能直接表征環(huán)境氣相濕度的確切數(shù)值。因此,濕度傳感器必須經(jīng)過定量標(biāo)定,方可使用。目前,相對濕度的標(biāo)定有干濕球法、飽和鹽溶液法、雙壓法、雙溫法等,我采用靜態(tài)標(biāo)定的飽和鹽溶液法。此方法可提供工作標(biāo)準(zhǔn)濕度,在0℃以上對濕度傳感器進(jìn)行定量標(biāo)定。為此,可把封閉容器中飽和鹽溶液的平衡蒸汽壓作為標(biāo)準(zhǔn)濕度,該濕度的高低,是由飽和鹽溶液的種類和平衡溫度所決定的,見表3.11。這種方法在量程為100%RH時,空氣濕度傳感器的示值誤差小于±5%,分辯率為0.1%。但有幾點需要注意:(1)水和鹽的純度要在分析純以上,水必須用去離子水或蒸餾水。(2)盛飽和溶液的容器必須透明而且不漏氣,使飽和蒸汽不與外部交換。(3)容器能加熱和攪拌,有利于很快制成飽和溶液的蒸汽環(huán)境。表3.11通常使用的5種飽和鹽溶液平衡相對濕度溫度HFP/%℃LiCLMgCL2Mg(NO3)NaCLK2SO4151233.3±0.355.6±0.375.6±0.297.9±0.7201233.1±0.254.4±0.375.5±0.297.6±0.62511.3±0.332.8±0.252.9±0.375.3±0.297.3±0.53011.3±0.332.4±0.251.4±0.375.1±0.297.0±0.43511.3±0.332.1±0.249.9±0.374.9±0.296.7±0.43.3CPU單元的設(shè)計3.3.1單片機(jī)AT89S52介紹單片機(jī)是整個系統(tǒng)的核心,在此裝置中選擇8位微處理器AT89C51,AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。1.主要特性·AT89C51與MCS-51系列的單片機(jī)在指令系統(tǒng)和引腳上完全兼容·片內(nèi)有4K字節(jié)在線可重復(fù)編程快擦寫程序存儲器·全靜態(tài)工作,工作范圍:0Hz~24MHz·三級程序存儲器加密·128×8位內(nèi)部RAM·32位雙向輸入輸出線·兩個16位定時器/計數(shù)器·五個中斷源,兩級中斷優(yōu)先級·一個全雙工的異步串行口·間歇和掉電工作方式·可編程串行通道·片內(nèi)整蕩器和時鐘電路2.功能描述AT89C51是一種低損耗、高性能、CMOS八位微處理器,片內(nèi)有4K字節(jié)的在線可重復(fù)編程快擦快寫程度存儲器,能重復(fù)寫入/擦除解1000次,數(shù)據(jù)保存時間為十年。它與MCA-51系列單片機(jī)在指令系統(tǒng)和引腳上完全兼容,不僅可完全代替MCS-51系列單片機(jī),而且能使系統(tǒng)具有許多MCS-51系列產(chǎn)品沒有的功能。AT89C51可構(gòu)成真正的單片機(jī)最小應(yīng)用系統(tǒng),縮小系統(tǒng)體積,增加系統(tǒng)的可靠性,降低了系統(tǒng)成本。只要程序長度小于4K,四個I/O口全部提供給用戶??捎?V電壓編程,而且擦寫時間僅需10毫秒,僅為8751/87C51的擦除時間的百分之一,與8751/87C51的12V電壓擦寫相比,不易損壞器件,沒有兩種電源的要求,改寫時不拔下芯片,適合許多嵌入式控制領(lǐng)域。工作電壓范圍寬2.7V~6V,全靜態(tài)工作,工作頻率寬,在0Hz~24MHz內(nèi),比8751/87C51等51系列的6MHz~12MHz更具有靈活性,系統(tǒng)能快能慢。AT89C51芯片提供三級程序存儲器加密,提供了方便靈活而可靠的硬加密手段,能完全保證程序或系統(tǒng)不被仿制。另外,AT89C51還具有MCS-51系列單片機(jī)的所有優(yōu)點。128×8位內(nèi)部RAM,32位雙向輸入輸出線,兩個十六位定時/計時器,5個中斷源,兩級中斷優(yōu)先級,一個全雙工異步串行口及時鐘發(fā)生器等。3.管腳功能AT89C51單片機(jī)為40引腳芯片,如下圖3.14所示。圖3.14AT89C51引腳圖VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗時,P0輸出原碼,此時P0外部必須被拉高。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”P3口也可作為AT89C51的一些特殊功能口,如下表3.12所示。表3.12P3口的第二功能第一功能標(biāo)記第二功能P3.0RXD串行輸入口P3.1TXD串行輸出口P3.2INT0外部中斷0輸入P3.3INT1外部中斷1輸入P3.4T0定時/計數(shù)器0外部輸入P3.5T1定時/計數(shù)器1外部輸入P3.6WD外部數(shù)據(jù)存儲器寫選通P3.7RD外部數(shù)據(jù)存儲器讀選通RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機(jī)器周期的高電平時間。ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。

/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。/EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。3.振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。4.芯片擦除:整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。

此外,AT89C51設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時器,計數(shù)器,串口和中斷系本設(shè)計的CPU單元電路圖如圖3.15所示。圖3.15CPU單元電路圖3.3.2時鐘信號設(shè)計時鐘引腳為XTAL1、XTAL2。時鐘引腳外接晶體與片內(nèi)的反向放大器構(gòu)成了一個振蕩器,它提供單片機(jī)的時鐘控制信號。時鐘引腳也可外接晶體振蕩器。XTAL1(19腳):接外部晶體的一個引腳。在單片機(jī)內(nèi)部,它是一個反向放大器的輸入端。這個放大器構(gòu)成了片內(nèi)振蕩器。當(dāng)采用外接晶體振蕩器時,此引腳應(yīng)接地。XTAL2(18腳):接外部晶體的另一端,在單片機(jī)內(nèi)部接至內(nèi)部反向放大器的輸出端。若采用外部振蕩器時,該引腳接收振蕩器的信號,即把此信號直接接到內(nèi)部時鐘發(fā)生器的輸入端。本系統(tǒng)采用晶振時鐘電路。外部晶振以及電容C2和C3構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中。對外接電容的值雖然沒有嚴(yán)格要求,但電容的大小多少會影響振蕩器頻率的高低,振蕩器的穩(wěn)定性,起振的快速性和穩(wěn)定性。外接晶振時,C1和C2通常選擇30pf,晶振采用12MHz。時鐘電路如下圖3.16所示。圖3.16時鐘電路圖3.3.3本系統(tǒng)采用的復(fù)位電路如圖3.17所示。3.17復(fù)位電路圖本復(fù)位電路必須確保系統(tǒng)上電時能夠自動復(fù)位。上電自動復(fù)位電路的基本功能是:系統(tǒng)上電時提供復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。為了可靠起見電源穩(wěn)定后,還要經(jīng)一定的延時才撤銷復(fù)位信號以防電源開關(guān)或電源插頭分-合過程中引起的抖動而影響復(fù)位。為了實現(xiàn)這種功能,本設(shè)計采用了一種RC定時電路。其時間常數(shù)τ=RC,系統(tǒng)上電時,C兩端的電壓為零,單片機(jī)的復(fù)位端的電平為高電平,單片機(jī)復(fù)位,經(jīng)過4—5個τ后,C兩端的電壓約等于電源電壓,單片機(jī)的復(fù)位端的電平為低電平,單片機(jī)退出復(fù)位狀態(tài)。3.4顯示電路的設(shè)計本系統(tǒng)利用LCD液晶顯示屏顯示溫度、濕度參數(shù)。液晶顯示屏的第一行顯示用戶可能需要調(diào)節(jié)的溫濕度上下限值,第二行顯示當(dāng)前測得的溫度、濕度值。3.4.1液晶顯示簡介①液晶顯示原理液晶顯示的原理是利用液晶的物理特性,通過電壓對其顯示區(qū)域進(jìn)行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規(guī)模集成電路直接驅(qū)動、易于實現(xiàn)全彩色顯示的特點,目前已經(jīng)被廣泛應(yīng)用在便攜式電腦、數(shù)字?jǐn)z像機(jī)、PDA移動通信工具等眾多領(lǐng)域。②液晶顯示器的分類液晶顯示的分類方法有很多種,通??砂雌滹@示方式分為段式、字符式、點陣式等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。如果根據(jù)驅(qū)動方式來分,可以分為靜態(tài)驅(qū)動(Static)、單純矩陣驅(qū)動(SimpleMatrix)和主動矩陣驅(qū)動(ActiveMatrix)三種。③液晶顯示器各種圖形的顯示原理:線段的顯示點陣圖形式液晶由M×N個顯示單元組成,假設(shè)LCD顯示屏有64行,每行有128列,每8列對應(yīng)1字節(jié)的8位,即每行由16字節(jié),共16×8=128個點組成,屏上64×16個顯示單元與顯示RAM區(qū)1024字節(jié)相對應(yīng),每一字節(jié)的內(nèi)容和顯示屏上相應(yīng)位置的亮暗對應(yīng)。例如屏的第一行的亮暗由RAM區(qū)的000H——00FH的16字節(jié)的內(nèi)容決定,當(dāng)(000H)=FFH時,則屏幕的左上角顯示一條短亮線,長度為8個點;當(dāng)(3FFH)=FFH時,則屏幕的右下角顯示一條短亮線;當(dāng)(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H時,則在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是LCD顯示的基本原理。字符的顯示用LCD顯示一個字符時比較復(fù)雜,因為一個字符由6×8或8×8點陣組成,既要找到和顯示屏幕上某幾個位置對應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點亮,為“0”的不亮。這樣一來就組成某個字符。但由于內(nèi)帶字符發(fā)生器的控制器來說,顯示字符就比較簡單了,可以讓控制器工作在文本方式,根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)找出顯示RAM對應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對應(yīng)的代碼即可。漢字的顯示漢字的顯示一般采用圖形的方式,事先從微機(jī)中提取要顯示的漢字的點陣碼(一般用字模提取軟件),每個漢字占32B,分左右兩半,各占16B,左邊為1、3、5……右邊為2、4、6……根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)可找出顯示RAM對應(yīng)的地址,設(shè)立光標(biāo),送上要顯示的漢字的第一字節(jié),光標(biāo)位置加1,送第二個字節(jié),換行按列對齊,送第三個字節(jié)……直到32B顯示完就可以LCD上得到一個完整漢字。3.4.21602字符型LCD簡介字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。下面以長沙太陽人電子有限公司的1602字符型液晶顯示器為例,介紹其用法。1.1602LCD的基本參數(shù)及引腳功能1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別,兩者尺寸差別如下圖3.18所示:圖3.181602LCD尺寸圖1602LCD主要技術(shù)參數(shù):顯示容量:16×2個字符芯片工作電壓:4.5—5.5V工作電流:2.0mA(5.0V)模塊最佳工作電壓:5.0V字符尺寸:2.95×4.35(W×H)mm引腳功能說明1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表3.13所示:表3.13引腳接口說明表編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時可以讀忙信號,當(dāng)RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負(fù)極。2.1602LCD的指令說明及時序1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表3.14所示:表3.14控制命令表序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標(biāo)返回000000001*3置輸入模式00000001I/DS4顯示開/關(guān)控制0000001DCB5光標(biāo)或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標(biāo)志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM)10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容1602液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置。指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H。指令3:光標(biāo)和顯示模式設(shè)置I/D:光標(biāo)移動方向,高電平右移,低電平左移S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關(guān)控制。D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo)B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標(biāo)或顯示移位S/C:高電平時移動顯示的文字,低電平時移動光標(biāo)。指令6:功能設(shè)置命令DL:高電平時為4位總線,低電平時為8位總線N:低電平時為單行顯示,高電平時雙行顯示F:低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。指令7:字符發(fā)生器RAM地址設(shè)置。指令8:DDRAM地址設(shè)置。指令9:讀忙信號和光標(biāo)地址BF:為忙標(biāo)志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。與HD44780相兼容的芯片時序如下表3.15:表3.15基本操作時序表讀狀態(tài)輸入RS=L,R/W=H,E=H輸出D0—D7=狀態(tài)字寫指令輸入RS=L,R/W=L,D0—D7=指令碼,E=高脈沖輸出無讀數(shù)據(jù)輸入RS=H,R/W=H,E=H輸出D0—D7=數(shù)據(jù)寫數(shù)據(jù)輸入RS=H,R/W=L,D0—D7=數(shù)據(jù),E=高脈沖輸出無讀寫操作時序如圖3.19和3.20所示:圖3.19讀操作時序圖3.20寫操作時序3.1602LCD的RAM地址映射及標(biāo)準(zhǔn)字庫表液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖3.21是1602的內(nèi)部顯示地址。圖3.211602LCD內(nèi)部顯示地址例如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在對液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時光標(biāo)是自動右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,如圖3.22所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”圖3.22字符代碼與圖形對應(yīng)圖4.1602LCD的一般初始化(復(fù)位)過程延時15mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號寫指令38H:顯示模式設(shè)置寫指令08H:顯示關(guān)閉寫指令01H:顯示清屏寫指令06H:顯示光標(biāo)移動設(shè)置寫指令0CH:顯示開及光標(biāo)設(shè)置LCD液晶顯示單元電路圖如圖3.23所示。圖3.23液晶顯示單元電路圖3.5按鍵電路的設(shè)計本設(shè)計采用6個獨立按鍵完成對溫、濕度上下限的設(shè)定。設(shè)計7個按鍵以完成該功能。7個按鍵的功能如下:按鍵1:進(jìn)入溫度上下限設(shè)定;按鍵2:進(jìn)入濕度上下限設(shè)定;按鍵3:進(jìn)入上限設(shè)定;按鍵4:進(jìn)入下限設(shè)定;按鍵5:溫度或濕度的上限或下限值加1;按鍵6:溫度或濕度的上限或下限值減1;按鍵7:退出溫、濕度上下限設(shè)定。按鍵電路圖如圖3.24所示。圖3.24按鍵電路圖3.5報警單元的設(shè)計在監(jiān)測系統(tǒng)中,對于重要的參數(shù)一般都設(shè)有緊急狀態(tài)報警系統(tǒng),以便提醒操作人員注意,或采取緊急措施。其方法就是把計算機(jī)采集的數(shù)據(jù)或記過計算機(jī)進(jìn)行數(shù)據(jù)處理、數(shù)字濾波,標(biāo)度變換之后,與該參數(shù)上下限設(shè)定值進(jìn)行比較,如果高于上限值(或低于下限值)則進(jìn)行報警,否則就作為采樣的正常值,進(jìn)行顯示。本設(shè)計采用峰鳴音報警電路。峰鳴音報警接口電路的設(shè)計只需購買市售的壓電式蜂鳴器,然后通過單片機(jī)的1根口線經(jīng)驅(qū)動器驅(qū)動蜂鳴音發(fā)聲。壓電式蜂鳴器約需10mA的驅(qū)動電流,可以使用TTL系列集成電路7406或7407低電平驅(qū)動,也可以用一個晶體三極管驅(qū)動。在圖中,P3.2接晶體管基極輸入端。當(dāng)P3.2輸出高電平“1”時,晶體管導(dǎo)通,壓電蜂鳴器兩端獲得約+5V電壓而鳴叫;當(dāng)P3.2輸出低電平“0”時,三極管截止,蜂鳴器停止發(fā)聲。圖3.25是運(yùn)用三極管驅(qū)動的峰鳴音報警電路。圖3.25三極管驅(qū)動的峰鳴音報警電路4軟件設(shè)計主程序由溫度采集子程序、濕度采集子程序、鍵盤輸入和顯示子程序和報警子程序組成。本章將列出主程序清單,并詳細(xì)說明溫度、濕度采集子程序。4.1主程序設(shè)計系統(tǒng)主程序流程圖如圖4.1所示。返回返回初始化調(diào)用溫度采集子程序調(diào)用濕度采集子程序顯示采集的溫濕度數(shù)據(jù)開始參數(shù)設(shè)定是否設(shè)定鍵是否按下圖4.1主程序流程圖4.2子程序設(shè)計4.2.1溫度傳感器子程序設(shè)計1.DS18B20溫度采集子程序流程圖如圖4.2所示。圖4.2DS18B20溫度子程序設(shè)計流程圖2溫度顯示子程序流程圖如圖4.3所示。檢測DS18B20存在?NY讀取溫度數(shù)據(jù)發(fā)送DS18B20編碼DS18B20復(fù)位I=1,等待溫度轉(zhuǎn)換發(fā)送跳過ROM指令讀DS18B20的序列號初始化DS18B20開始檢測DS18B20存在?NY讀取溫度數(shù)據(jù)發(fā)送DS18B20編碼DS18B20復(fù)位I=1,等待溫度轉(zhuǎn)換發(fā)送跳過ROM指令讀DS18B20的序列號初始化DS18B20開始圖4.3溫度顯示程序流程圖3溫度報警子程序流程圖如圖4.4所示。開始開始總線復(fù)位總線復(fù)位跳過跳過ROM所有所有ds18b20開始溫度轉(zhuǎn)換延時1秒延時1秒設(shè)置匹配設(shè)置匹配ROM發(fā)送發(fā)送ROM編號開始溫度轉(zhuǎn)換開始溫度轉(zhuǎn)換是否是否超限制溫度?Y所有讀取完畢?所有讀取完畢?顯示溫度報警顯示溫度報警NY圖4.4溫度報警流程圖4.2.2濕度傳感器子程序設(shè)計初始化設(shè)置定時常數(shù)在62.5ms內(nèi)T0產(chǎn)生中斷嗎?共產(chǎn)生了20次中斷嗎?將T1計的數(shù)放入50H和51H初始化設(shè)置定時常數(shù)在62.5ms內(nèi)T0產(chǎn)生中斷嗎?共產(chǎn)生了20次中斷嗎?將T1計的數(shù)放入50H和51H將其轉(zhuǎn)化成10進(jìn)制放入5CH和5DH返回重設(shè)定時時間常數(shù)關(guān)中斷YESYESNONO開始圖4.5濕度采集子程序4.2.3按鍵子程序設(shè)計根據(jù)課題要求,用戶可以自行設(shè)定溫、濕度上下限。由此,設(shè)計7個按鍵以完成該功能。7個按鍵的功能如下:按鍵1:進(jìn)入溫度上下限設(shè)定;按鍵2:進(jìn)入濕度上下限設(shè)定;按鍵3:進(jìn)入上限設(shè)定;按鍵4:進(jìn)入下限設(shè)定;按鍵5:溫度或濕度的上限或下限值加1;按鍵6:溫度或濕度的上限或下限值減1;按鍵7:退出溫、濕度上下限設(shè)定。通過按鍵設(shè)定溫、濕度上下限的按鍵流程圖如圖4.6所示。圖4.6按鍵設(shè)定溫、濕度上下限流程圖4.2.4報警子程序設(shè)計報警子程序流程圖如圖4.7所示。圖4.7報警子程序流程圖4.2.5顯示子程序設(shè)計顯示子程序流程圖如圖4.8所示。圖4.8顯示子程序流程圖5調(diào)試結(jié)果與總結(jié)本文完成了溫度傳感器的選擇、濕度傳感器的設(shè)計、數(shù)據(jù)采集的硬件電路設(shè)計和軟件編程。此部分與鍵盤顯示部分和報警電路共同構(gòu)成了整個系統(tǒng)。經(jīng)過整個系統(tǒng)的研究與設(shè)計,最終采用單總線數(shù)字式溫度傳感器DS18B20進(jìn)行溫度采集,采用濕敏電容HS1101對濕度參數(shù)進(jìn)行采集。LCD液晶顯示屏對于當(dāng)前的溫度值和濕度值進(jìn)行實時的顯示,可以方便用戶直觀的了解所測得的溫度、濕度環(huán)境參數(shù)值。用戶可使用按鍵根據(jù)自身要求設(shè)定溫濕度上下限,同時,報警裝置可依據(jù)用戶的設(shè)定針對溫濕度超限情況進(jìn)行報警。同時介紹了用單片機(jī)AT89C51控制DS18B20和HS1101,著重分析各單元電路的設(shè)計,以及各電路與單片機(jī)的接口技術(shù)。最后還給出系統(tǒng)的軟件的設(shè)計過程,并進(jìn)行程序設(shè)計。本文是采用模塊化的方式進(jìn)行敘述,對各模塊的設(shè)計進(jìn)行了比較詳細(xì)地闡述。經(jīng)過反復(fù)調(diào)試,溫濕度能夠正常顯示當(dāng)前值,而且最佳適宜溫度值可以有操作人員根據(jù)不同作物的需求進(jìn)行設(shè)定,在當(dāng)前溫度偏離所設(shè)定的適宜溫度±3℃時,報警裝置蜂鳴器即會啟動,該系統(tǒng)基本實現(xiàn)了對溫濕度的測量與顯示,操作人員可以根該系統(tǒng)的不足之處在于沒能夠?qū)崿F(xiàn)溫濕度的自動調(diào)節(jié),由于時間倉促和本人知識有限,在設(shè)計原理圖時,沒考慮清楚顯示位數(shù),以至該系統(tǒng)無法顯示設(shè)定濕度,該系統(tǒng)可以進(jìn)一步加入溫濕度自動調(diào)節(jié)電路,在當(dāng)前溫濕度超出作物所需的最適宜條件時,啟動溫濕度調(diào)節(jié)裝置,就可以真正的實現(xiàn)溫濕度的自動控制。為了驗證本系統(tǒng)的準(zhǔn)確性,條件有限以至于濕度測量無法驗證其準(zhǔn)確性,在調(diào)試時只對環(huán)境溫度做了十次測量,時間間隔為一個小時,并與溫度計所測量的溫度值做了比較。記錄如表5.1所示:表5-1溫度測量比較表測量次數(shù)測量值(℃)溫度計顯示值(℃)相對誤差(℃)127.027.20.2226.526.40.1326.826.90.1425.525.80.3526.927.00.1625.225.00.2725.826.20.4827.026.70.3926.526.40.11025.225.00.2引起誤差的原因,一方面可能是由于受到其他電路的干擾,另一方面可能就是讀數(shù)估讀造成的誤差。倉庫溫、濕度監(jiān)測系統(tǒng)的設(shè)計工作已經(jīng)完成了。該系統(tǒng)是針對倉庫管理設(shè)計的,但是從溫濕度傳感器的數(shù)據(jù)采集范圍以及用戶可設(shè)定的上、下限來看,它還可以應(yīng)用到其它諸如圖書館、樓宇溫濕度控制、電教中心溫濕度控制等方面,因此用途是比較廣泛的。致謝經(jīng)過這段時間的忙碌和工作,本次畢業(yè)設(shè)計終于完成了,作為一個本科生的畢業(yè)設(shè)計,由于經(jīng)驗的匱乏,難免有許多考慮不周全的地方,如果沒有導(dǎo)師的督促指導(dǎo),以及同學(xué)們的支持和幫助,想要完成這個設(shè)計是難以想象的。在此之際,我思緒萬千,心情久久不能平靜?;仡櫵哪陮W(xué)習(xí)期間的一千余個日日夜夜,自己為課題的研究,靜心鉆研,潛心研究,并取得初步研究成果而感到欣慰。在這里首先要感謝我的導(dǎo)師徐老師。徐老師平日里工作繁多,但在我做畢業(yè)設(shè)計的每個階段,從開題報告到畢設(shè)論文,從設(shè)計草案的確定和修改,中期檢查,后期詳細(xì)設(shè)計,裝配草圖等整個過程中都給予了我悉心的指導(dǎo)。徐老師對每一次批改都嚴(yán)格把關(guān),指出了文章中出現(xiàn)的問題,多次修改之后我的論文達(dá)到了規(guī)定標(biāo)準(zhǔn)。在徐老師的幫助下,我的課題的設(shè)計任務(wù)得以順利完成。徐老師嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度和踏實的工作作風(fēng)給我留下了深刻的印象,是我學(xué)習(xí)的榜樣。在此,向徐老師致以最誠摯的謝意。同時還要感謝教育和指導(dǎo)過我的所有老師,你們給予我的不僅僅是知識,還有你們對知識孜孜不倦的追求精神和對生活的積極向上態(tài)度,使我終身受益。我將在以后的工作中繼續(xù)努力,不斷學(xué)習(xí),努力提高自己。路漫漫其修遠(yuǎn)兮,吾將上下而求索。我愿在未來的學(xué)習(xí)和研究過程中,以更加豐厚的成果來答謝曾經(jīng)關(guān)心、幫助和支持過我的所有領(lǐng)導(dǎo)、老師、同學(xué)、同事和朋友,一并表同時感謝我的母校蘭州理工大學(xué)技術(shù)工程學(xué)院,它是一片培育桃李、播撒知識的芬芳的熱土。學(xué)校雄厚的師資力量使我學(xué)到了豐富的知識;學(xué)校嚴(yán)格的基礎(chǔ)培訓(xùn)使我掌握了基本的技能;學(xué)校淳厚的學(xué)風(fēng)使我意識到知識可以改變命運(yùn)。在這個大家庭里我學(xué)到了許多專業(yè)方面的知識和技能,在多樣化的實驗室里我實際動手操作了許多實驗,親手完成了許多實習(xí)項目,這使得我的動手能力有了顯著提高,于此同時我對專業(yè)知識的掌握更加牢固與靈活。感謝電信學(xué)院所有的老師,謝謝你們對我的辛勤培育!最后,再次向他們表示我最誠摯的謝意,我將以最大的熱情投入到工作中,以報答所以幫助我過的老師和同學(xué)。參考文獻(xiàn)[1]張永瑞.電子測量技術(shù)基礎(chǔ)[M].西安:西安電子科技大學(xué)出版社.2004.12[2]宋壯興.我國氣調(diào)庫建設(shè)中的若干問題[J].遼寧:遼寧科學(xué)技術(shù)出版社.2001,5[3]張毅剛.新編MCS-51單片機(jī)應(yīng)用設(shè)計[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版.2003.7[4]楊文龍.單片機(jī)原理及應(yīng)用[M].西安:西安電子科技大學(xué)出版社.2006.6[5]付家才.單片機(jī)控制工程實踐技術(shù)[M].北京:化學(xué)工業(yè)出版社.2004.3[6]胡紅生.石秀東,徐亞棟.氣調(diào)保鮮自動控制系統(tǒng)的研究[J].2004.6[7]徐瑋等.C51單片機(jī)高效入門[M].北京:機(jī)械工業(yè)出版社.2006年10月.[8]潭浩強(qiáng).語言設(shè)計(第二版)[M].北京:清華大學(xué)出版社.1999.[9]何立民主編.單片機(jī)應(yīng)用技術(shù)選編(第五冊)[M].北京:北京航空航天大學(xué)出版社.2000[10]何立民.單片機(jī)應(yīng)用技術(shù)選編[M].北京:北京航空航天大學(xué)出版社.2004.[11]李華.MCS51系列單片機(jī)實用接口技術(shù)[M].北京:北京航空航天大學(xué)出版社.1993.[12]徐亦朱.DS18B20中文手冊.美國DALLAS半導(dǎo)體公司.1992.[13]郭強(qiáng).液晶顯示應(yīng)用技術(shù)[M].北京:電子工業(yè)出版社.2000.[14]楊建等.濕度測量體制歷史和現(xiàn)狀分析及建議[J].白城:中國白城兵器試驗中心,2009.6.[15]胡紅生,石秀東,徐亞棟,氣調(diào)保鮮自動控制系統(tǒng)的研究[J].2004.6[16]趙麗娟.基于單片機(jī)的溫度監(jiān)測系統(tǒng)的設(shè)計與實現(xiàn).北京:機(jī)械制造出版社.2006.[17]呂泉.現(xiàn)代傳感器原理及應(yīng)用[M].北京:清華大學(xué)出版社.2006.附錄程序清單/***************************************************/#include<reg51.h>#include<intrins.h>sbitrs=P2^0;sbitrw=P2^1;sbitep=P2^2;unsignedcharcodedis1[]={""};unsignedcharcodedis2[]={""};voiddelay(unsignedcharms){unsignedchari;while(ms--){for(i=0;i<250;i++){_nop_();_nop_();_nop_();_nop_();}}}bitlcd_bz(){bitresult;rs=0;rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();result=(bit)(P0&0x80);ep=0;returnresult;}voidlcd_wcmd(unsignedcharcmd){while(lcd_bz());//判斷LCD是否忙碌rs=0;rw=0;ep=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}voidlcd_pos(unsignedcharpos){lcd_wcmd(pos|0x80);}voidlcd_wdat(unsignedchardat){while(lcd_bz());//判斷LCD是否忙碌rs=1;rw=0;ep=0;P0=dat;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}voidlcd_init(){lcd_wcmd(0x38);delay(1);lcd_wcmd(0x0c);delay(1);lcd_wcmd(0x06);delay(1);lcd_wcmd(0x01);delay(1);}voidmain(void){unsignedchari;lcd_init();//初始化LCDdelay(10);lcd_pos(0x01);//設(shè)置顯示位置i=0;while(dis1[i]!='\0'){lcd_wdat(dis1[i]);//顯示字符i++;}lcd_pos(0x42);//設(shè)置顯示位置i=0;while(dis2[i]!='\0'){lcd_wdat(dis2[i]);//顯示字符i++;}//**************溫度小數(shù)部分用查表法***********//ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//ucharcodedis_7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchardatatemp_data[2]={0x00,0x00};//讀出溫度暫放uchardatadisplay[4]={0x00,0x00,0x00,0x00};//顯示單元數(shù)據(jù),共3個數(shù)據(jù)和一個運(yùn)算暫用/*****************11us延時函數(shù)*************************/voiddel10ms(){uinta,b;for(a=40;a!=0;a--)for(b=248;b!=0;b--);}voiddelay(uintt){for(;t>0;t--);}/*******************************************************/voidtimer0()interrupt1{ TH0=0x3C; TL0=0xB0;//定時50ms num++;//記到20就直接停止}/*******************************************************/voidscankey(){if(key1==0){del10ms();if(key1==0){TH++;}}if(key2==0){del10ms();if(key2==0){TH--;}}T=display[2]*10+display[1];if((TH-3)<T<(TH+3)){LED1=0;LED2=1;BEEP=1;}if((T<TH-3)||(T>TH+3))}/****************顯示掃描函數(shù)***************************/scan(){S=TH/10;G=TH%10;S8=1;S7=1;S6=1;S5=0;S4=1;S3=1;S2=1;S1=1;Disdata=dis_7[display[2]];delay(200);Disdata=0x00;S8=1;S7=1;S6=0;S5=1;S4=1;S3=1;S2=1;S1=1;Disdata=dis_7[display[1]];DIN=1;delay(200);Disdata=0x00;S8=1;S7=0;S6=1;S5=1;S4=1;S3=1;S2=1;S1=1;Disdata=dis_7[display[0]];delay(200);Disdata=0x00;S8=0;S7=1;S6=1;S5=1;S4=1;S3=1;S2=1;S1=1;Disdata=dis_7[S];delay(200);Disdata=0x00;S8=1;S7=1;S6=1;S5=1;S4=1;S3=1;S2=1;S1=0;Disdata=dis_7[G];delay(200);Disdata=0x00;S8=1;S7=1;S6=1;S5=1;S4=1;S3=1;S2=0;S1=1;Disdata=dis_7[B1];delay(200);Disdata=0x00;S8=1;S7=1;S6=1;S5=1;S4=1;S3=0;S2=1;S1=1;Disdata=dis_7[B2];DIN=1;delay(200);Disdata=0x00;S8=1;S7=1;S6=1;S5=1;S4=0;S3=1;S2=1;S1=1;Disdata=dis_7[B3];delay(200);Disdata=0x00;}/****************DS18B20復(fù)位函數(shù)************************/ow_reset(void){charpresence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();//從高拉倒低DQ=0;delay(50);//550usDQ=1;delay(6);//66uspresence=DQ;//presence=0復(fù)位成功,繼續(xù)下一步}delay(45);//延時500uspresence=~DQ;}DQ=1;//拉高電平}/****************DS18B20寫命令函數(shù)************************///向1-WIRE總線上寫1個字節(jié)voidwrite_byte(ucharval){uchari;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();//從高拉倒低DQ=0;_nop_();_nop_();_nop_();_nop_();//5usDQ=val&0x01;//最低位移出delay(6);//66usval=val/2;//右移1位}DQ=1;delay(1);}/****************DS18B20讀1字節(jié)函數(shù)************************///從總線上取1個字節(jié)ucharread_byte(void){uchari;ucharvalue=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_();//4usDQ=1;_nop_();_nop_();_nop_();_nop_();//4usif(DQ)value|=0x80;delay(6);//66us}DQ=1;return(value);}/****************讀出溫度函數(shù)************************///read_temp(){ow_reset();//總線復(fù)位delay(200);write_byte(0xcc);//發(fā)命令write_byte(0x4e);write_byte(TH);//發(fā)命令write_byte(RS);delay(200);ow_reset();write_byte(0xcc);//發(fā)命令write_byte(0x44);delay(200);ow_reset();write_byte(0xcc);//發(fā)命令write_byte(0xbe);temp_data[0]=read_byte();//讀溫度值的第字節(jié)temp_data[1]=read_byte();//讀溫度值的高字節(jié)temp=temp_data[1];temp<<=8;temp=temp|temp_data[0];//兩字節(jié)合成一個整型變量。returntemp;//返回溫度值}///****************溫度數(shù)據(jù)處理函數(shù)************************///二進(jìn)制高字節(jié)的低半字節(jié)和低字節(jié)的高半字節(jié)組成一字節(jié),這個//字節(jié)的二進(jìn)制轉(zhuǎn)換為十進(jìn)制后,就是溫度值的百、十、個位值,而剩//下的低字節(jié)的低半字節(jié)轉(zhuǎn)化成十進(jìn)制后,就是溫度值的小數(shù)部分/********************************************************/work_temp(uinttem){if(tem>6348)//溫度值正負(fù)判斷{tem=65536-tem;}//負(fù)溫度求補(bǔ)碼,標(biāo)志位置1display[3]=tem&0x0f;//取小數(shù)部分的值 display[0]=ditab[display[3]];//存入小數(shù)部分顯示值display[3]=tem>>4;//取中間八位,即整數(shù)部分的值display[2]=display[3]%100/10;//取十位數(shù)據(jù)暫存display[1]=display[3]%100%10;}/**********************濕度采集函數(shù)****************************/#include"reg51.h"#defineucharunsignedchar#defineuintunsignedintuchartem0,tem1;

uchartemp0,temp1;

uint

f=0;

//初值/****************************************************************/*名稱:timer0()*功能:定時器1,每50000us中斷一次。*入口參數(shù):******************************************************************/voidtimer0()interrupt1{EA=0;TR0=0;

TR1=0;TL0=0xFF;

//重裝值

定時50000usOX4BFFHTH0=0x4B;

tem0=TL1;//讀數(shù)tem1=TH1;TL1=0x00;

//定時器1清零TH1=0x00;f=1;

//作標(biāo)注位TR0=1;TR1=1;EA=1;}/*****************************************************************************名稱:timer1()*功能:計數(shù)器,用于計數(shù)將555輸出的頻率,以計數(shù)相對濕度。*入口參數(shù):****************************************************************************/voidtimer1()interrupt3

//T1中斷,表示計數(shù)的頻率溢出,超出了可測量的頻率范圍,顯然在這里不可能。所以重新啟動。{EA=0;TR0=0;

TR1=0;TL0=0x00;

//重裝值

定時50000usTH0=0x4C;

TL1=0x00;

//定時器1清零TH1=0x00;

TR0=1;

TR1=1;EA=1;}voidInit_timer(){TMOD=0x51;

//01010001定時器0在模式1下工作16位定時器,定時方式定時器1在模式1下工作16位計數(shù)器,T1負(fù)跳變加1TL0=0x00;

//定時器0初值定時50000usTH0=0x4C;

TL1=0x00;

//定時器1清零TH1=0x00;ET0=1;

//使能定時器0中斷ET1=1;

//使能定時器1中斷EA=1;

//使能總中斷TR0=1;

//開始計時TR1=1;}voidtran(){f=tem1;f=(f<<8)|tem0;

f=f*20;

//這里f的值是最終讀到的頻率,不同頻率對于不同相對濕度。

if((5623<=f)&&(f<=6852))//相對濕度在有效范圍內(nèi)(0%--100%)

{if((6734<f)&&(f<=6852))

{temp0=0;temp1=(6852-f)*10/118;}if((6618<f)&&(f<=6734)){temp0=1;temp1=(6734-f)*10/116;}if((6503<f)&&(f<=6618)){temp0=2;temp1=(6618-f)*10/115;}if((6388<f)&&(f<=6503)){temp0=3;temp1=(6503-f)*10/115;}if((6271<f)&&(f<=6388)){temp0=4;temp1=(6388-f)*10/117;}if((6152<f)&&(f<=6271)){temp0=5;temp1=(6271-f)*10/119;}

if((6029<f)&&(f<=6152)){temp0=6;temp1=(6152-f)*10/123;}

if((5901<f)&&(f<=6029)){temp0=7;temp1=(6029-f)*10/128;}

if((5766<f)&&(f<=5901)){temp0=8;temp1=(5901-f)*10/135;}

if((5623<f)&&(f<=5766)){temp0=9;temp1=(5766-f)*10/143;}}else{

temp0=0;temp1=0;}}

voidmain(){uchari,k;ucharcount;Init_timer();count=0;while(1){

for(i=0;i<200;i++)

for(k=0;k<200;k++);

//延時

tran();

temp0&=0x0F;

temp1&=0x0F;

temp0=temp0<<4;

count=temp0|temp1;

Ddisp(count);/****************主函數(shù)************************/main(){Disdata=0x00;//初始化端口TH=24;BEEP=1;LED1=1;LED2=1;TMOD=0x51;//T0記時T1計數(shù)TH0=0x3c;//定時50msTL0=0xB0;TH1=0x00;//計數(shù)TL1=0x00;TR0=1;//開T0TR1=1;//開T1ET0=1;//開中斷EA=1;//打開總中斷ow_reset();//開機(jī)先轉(zhuǎn)換一次write_byte(0xcc);//SkipROMwrite_byte(0x44);//發(fā)轉(zhuǎn)換命令while(1){if(num>=60){//記滿一秒number=TH1*256+TL1;number=25000/(number-500);B1=number%1000/100;//百位B2=number%100/10;//十位B3=number%100%10;//個位num=0;TMOD=0x51;//T0記時T1計數(shù)TH0=0x3c;//定時50msTL0=0xB0;TH1=0x00;//計數(shù)TL1=0x00;TR0=1;//開T0TR1=1;//開T1ET0=1;//開中斷EA=1;//打開總中斷}work_temp(read_temp());//處理溫度數(shù)據(jù)scankey();scan();//顯示溫度值}}////***********************結(jié)束**************************//外文資料DescriptionTheAT89C51isalow-power,high-performanceCMOS8-bitmicrocomputerwith4KbytesofFlashProgrammableandErasableReadOnlyMemory(PEROM)and128bytesRAM.ThedeviceismanufacturedusingAtmel’shighdensitynonvolatilememorytechnologyandiscompatiblewiththeindustrystandardMCS-51?instructionsetandpinout.Thechipcombinesaversatile8-bitCPUwithFlashonamonolithicchip,theAtmelAT89C51isapowerfulmicrocomputerwhichprovidesahighlyflexibleandcosteffectivesolutiontomanyembeddedcontrolapplications.Features:?CompatiblewithMCS-51?Products?4KBytesofIn-SystemReprogrammableFlashMemory?Endurance:1,000Write/EraseCycles?FullyStaticOperation:0Hzto24MHz?Three-LevelProgramMemoryLock?128x8-BitInternalRAM?32ProgrammableI/OLines?Two16-BitTimer/Counters?SixInterruptSources?ProgrammableSerialChannel?LowPowerIdleandPowerDownModesTheAT89C51providesthefollowingstandardfeatures:4KbytesofFlash,128bytesofRAM,32I/Olines,two16-bittimer/counters,afivevectortwo-levelinterruptarchitecture,afullduplexserialport,on-chiposcillatorandclockcircuitry.Inaddition,theAT89C51isdesignedwithstaticlogicforoperationdowntozerofrequencyandsupportstwosoftwareselectablepowersavingmodes.TheIdleModestopstheCPUwhileallowingtheRAM,timer/counters,serialportandinterruptsystemtocontinuefunctioning.ThePowerDownModesavestheRAMcontentsbutfreezestheoscillatordisablingallotherchipfunctionsuntilthenexthardwarereset.BlockDiagramPinDescription:VCCSupplyvoltage.GNDGround.Port0Port0isan8-bitopendrainbidirectionalI/Oport.AsanoutputporteachpincansinkeightTTLinputs.Whenisarewrittentoport0pins,thepinscanbeusedashighimpedanceinputs.Port0mayalsobeconfiguredtobethemultiplexedloworderaddress/databusduringaccessestoexternalprogramanddatamemory.InthismodeP0hasinternalpullups.Port0alsoreceivesthecodebytesduringFlashprogramming,andoutputsthecodebytesduringprogramverification.Externalpullupsarerequiredduringprogramverification.Port1Port1isan8-bitbidirectionalI/Oportwithinternalpullups.ThePort1outputbufferscansink/sourcefourTTLinputs.When1sarewrittentoPort1pinstheyarepulledhighbytheinternalpullupsandcanbeusedasinputs.Asinputs,Port1pinsthatareexternallybeingpulledlowwillsourcecurrent(IIL)becauseoftheinternalpullups.Port1alsoreceivesthelow-orderaddressbytesduringFlashprogrammingandverification.Port2Port2isan8-bitbidirectionalI/Oportwithinternalpullups.ThePort2outputbufferscansink/sourcefourTTLinputs.When1sarewrittentoPort2pinstheyarepulledhighbytheinternalpullupsandcanbeusedasinputs.Asinputs,Port2pinsthatareexternallybeingpulledlowwillsourcecurrent(IIL)becauseoftheinternalpullups.Port2emitsthehigh-orderaddressbyteduringfetchesfromexternalprogrammemoryandduringaccessestoexternaldatamemorythatuse16-bitaddresses(MOVX@DPTR).Inthisapplicationitusesstronginternalpull-upswhenemitting1s.Duringaccessestoexternaldatamemorythatuse8-bitaddresses(MOVX@RI),Port2emitsthecontentsoftheP2SpecialFunctionRegister.Port2alsoreceivesthehigh-orderaddressbitsandsomecontrolsignalsduringFlashprogrammingandverification.Port3Port3isan8-bitbidirectionalI/Oportwithinternalpullups.ThePort3outputbufferscansink/sourcefourTTLinputs.When1sarewrittentoPort3pinstheyarepulledhighbytheinternalpullupsandcanbeusedasinputs.Asinputs,Port3pinsthatareexternallybeingpulledlowwillsourcecurrent(IIL)becauseofthepullups.Port3alsoservesthefunctionsofvariousspecialfeaturesoftheAT89C51aslistedbelow:PortpinalternatefunctionsP3.0rxd(serialinputport)P3.1txd(serialoutputport)P3.2^int0(externalinterrupt0)P3.3^int1(externalinterrupt1)P3.4t0(timer0externalinput)P3.5t1(timer1externalinput)P3.6^WR(externaldatamemorywritestrobe)P3.7^rd(externaldatamemoryreadstrobe)Port3alsoreceivessomecontrolsignalsforFlashprogrammingandverification.RSTResetinput.Ahighonthispinfortwomachinecycleswhiletheoscillatorisrunningresetsthedevice.ALE/PROGAddressLatchEnableoutputpulseforlatchingthelowbyteoftheaddressduringaccessestoexternalmemory.Thispinisalsotheprogrampulseinput(PROG)duringFlashprogramming.InnormaloperationALEisemittedataconstantrateof1/6theoscillatorfrequency,andmaybeusedforexternaltimingorclockingpurposes.Note,however,thatoneALEpulseisskippedduringeachaccesstoexternalDataMemory.Ifdesired,ALEoperationcanbedisabledby

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論