版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
⑺適宜于制造流水線上的自動(dòng)插件和自動(dòng)裝配過程。濕度傳感器HS1101/HS1100基于獨(dú)特工藝設(shè)計(jì)的電容元件,這些相對濕度傳感器可以大批量生產(chǎn)。可以應(yīng)用于辦公自動(dòng)化,車廂內(nèi)空氣質(zhì)量控制,家電,工業(yè)控制系統(tǒng)等。在需要濕度補(bǔ)償?shù)膱龊纤部梢缘玫胶艽蟮膽?yīng)用。HS1100/HS1101的外部結(jié)構(gòu)及符號(hào)如圖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小時(shí)結(jié)露后恢復(fù)時(shí)間10S濕度遲滯±1.5%長時(shí)間穩(wěn)定性0.5%RH/yr響應(yīng)時(shí)間5S偏離曲線±2%RH工作溫度-40~100℃儲(chǔ)存溫度-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)時(shí)間小于5S;溫度系數(shù)為0.04PF/℃,可見精度是較高的。3.2.2濕度測量電路HS1100/HS1101電容傳感器,在電路構(gòu)成中等效于一個(gè)電容器件,其電容量隨著所測空氣濕度的增大而增大。如何將電容的變化量準(zhǔn)確地轉(zhuǎn)變?yōu)橛?jì)算機(jī)易于接受的信號(hào),常用兩種方法:一是將該濕敏電容置于運(yùn)放與阻容組成的橋式振蕩電路中,所產(chǎn)生的正弦波電壓信號(hào)經(jīng)整流、直流放大、再A/D轉(zhuǎn)換為數(shù)字信號(hào);另一種是將該濕敏電容置于555振蕩電路中,將電容值的變化轉(zhuǎn)為與之呈反比的電壓頻率信號(hào),可直接被計(jì)算機(jī)所采集。我采用第二種方法。頻率輸出的555測量振蕩電路如圖3.13所示。集成定時(shí)器555芯片外接電阻R4、R2與濕敏電容C(這里的HS11××指HS1101),構(gòu)成了對C的充電回路。7端通過芯片內(nèi)部的晶體管對地短路又構(gòu)成了對C的放電回路,并將引腳2、6端相連引入到片內(nèi)比較器,便成為一個(gè)典型的多諧振蕩器,即方波發(fā)生器。另外,R3是防止輸出短路的保護(hù)電阻,R1用于平衡溫度系數(shù)。由于Fout端的電壓在0~5V之間,因此可以直接將與89C51的T1口連接。T1口作為計(jì)數(shù)器,它計(jì)得的數(shù)值是與環(huán)境相對濕度成反比的16進(jìn)制的頻率(相對濕度與頻率的對應(yīng)關(guān)系見表3.10。圖3.13555測量振蕩電路該振蕩電路兩個(gè)暫穩(wěn)態(tài)的交替過程如下:首先電源Vs通過R4、R2向HS1101充電,經(jīng)充電時(shí)間后,Uc達(dá)到芯片內(nèi)比較器的高觸發(fā)電平,約0.67Vs,此時(shí)輸出引腳3端由高電平突降為低電平,然后通過R2放電,經(jīng)t放電時(shí)間后,Uc下降到比較器的低觸發(fā)電平,約0.33Vs,此時(shí)輸出引腳3端又由低電平躍升為高電平。如此翻來覆去,形成方波輸出。其中,充放電時(shí)間為:t充電=C(R4+R2)ln2t放電=CR2ln2因而,輸出的方波頻率為:f=1/(t充電+t放電)=1/[C(R4+2R2)ln2]]可見,空氣濕度通過555測量振蕩電路就轉(zhuǎn)變?yōu)榕c之呈反比的頻率信號(hào),表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時(shí),空氣濕度傳感器的示值誤差小于±5%,分辯率為0.1%。但有幾點(diǎn)需要注意:(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è)計(jì)3.3.1單片機(jī)AT89S52介紹單片機(jī)是整個(gè)系統(tǒng)的核心,在此裝置中選擇8位微處理器AT89C51,AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。1.主要特性·AT89C51與MCS-51系列的單片機(jī)在指令系統(tǒng)和引腳上完全兼容·片內(nèi)有4K字節(jié)在線可重復(fù)編程快擦寫程序存儲(chǔ)器·全靜態(tài)工作,工作范圍:0Hz~24MHz·三級程序存儲(chǔ)器加密·128×8位內(nèi)部RAM·32位雙向輸入輸出線·兩個(gè)16位定時(shí)器/計(jì)數(shù)器·五個(gè)中斷源,兩級中斷優(yōu)先級·一個(gè)全雙工的異步串行口·間歇和掉電工作方式·可編程串行通道·片內(nèi)整蕩器和時(shí)鐘電路2.功能描述AT89C51是一種低損耗、高性能、CMOS八位微處理器,片內(nèi)有4K字節(jié)的在線可重復(fù)編程快擦快寫程度存儲(chǔ)器,能重復(fù)寫入/擦除解1000次,數(shù)據(jù)保存時(shí)間為十年。它與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,四個(gè)I/O口全部提供給用戶??捎?V電壓編程,而且擦寫時(shí)間僅需10毫秒,僅為8751/87C51的擦除時(shí)間的百分之一,與8751/87C51的12V電壓擦寫相比,不易損壞器件,沒有兩種電源的要求,改寫時(shí)不拔下芯片,適合許多嵌入式控制領(lǐng)域。工作電壓范圍寬2.7V~6V,全靜態(tài)工作,工作頻率寬,在0Hz~24MHz內(nèi),比8751/87C51等51系列的6MHz~12MHz更具有靈活性,系統(tǒng)能快能慢。AT89C51芯片提供三級程序存儲(chǔ)器加密,提供了方便靈活而可靠的硬加密手段,能完全保證程序或系統(tǒng)不被仿制。另外,AT89C51還具有MCS-51系列單片機(jī)的所有優(yōu)點(diǎn)。128×8位內(nèi)部RAM,32位雙向輸入輸出線,兩個(gè)十六位定時(shí)/計(jì)時(shí)器,5個(gè)中斷源,兩級中斷優(yōu)先級,一個(gè)全雙工異步串行口及時(shí)鐘發(fā)生器等。3.管腳功能AT89C51單片機(jī)為40引腳芯片,如下圖3.14所示。圖3.14AT89C51引腳圖VCC:供電電壓。GND:接地。P0口:P0口為一個(gè)8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)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í)/計(jì)數(shù)器0外部輸入P3.5T1定時(shí)/計(jì)數(shù)器1外部輸入P3.6WD外部數(shù)據(jù)存儲(chǔ)器寫選通P3.7RD外部數(shù)據(jù)存儲(chǔ)器讀選通RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。ALE/PROG:當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí),ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。
/PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。/EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。3.振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過一個(gè)二分頻觸發(fā)器,因此對外部時(shí)鐘信號(hào)的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。4.芯片擦除:整個(gè)PEROM陣列和三個(gè)鎖定位的電擦除可通過正確的控制信號(hào)組合,并保持ALE管腳處于低電平10ms來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲(chǔ)字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。
此外,AT89C51設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時(shí)器,計(jì)數(shù)器,串口和中斷系本設(shè)計(jì)的CPU單元電路圖如圖3.15所示。圖3.15CPU單元電路圖3.3.2時(shí)鐘信號(hào)設(shè)計(jì)時(shí)鐘引腳為XTAL1、XTAL2。時(shí)鐘引腳外接晶體與片內(nèi)的反向放大器構(gòu)成了一個(gè)振蕩器,它提供單片機(jī)的時(shí)鐘控制信號(hào)。時(shí)鐘引腳也可外接晶體振蕩器。XTAL1(19腳):接外部晶體的一個(gè)引腳。在單片機(jī)內(nèi)部,它是一個(gè)反向放大器的輸入端。這個(gè)放大器構(gòu)成了片內(nèi)振蕩器。當(dāng)采用外接晶體振蕩器時(shí),此引腳應(yīng)接地。XTAL2(18腳):接外部晶體的另一端,在單片機(jī)內(nèi)部接至內(nèi)部反向放大器的輸出端。若采用外部振蕩器時(shí),該引腳接收振蕩器的信號(hào),即把此信號(hào)直接接到內(nèi)部時(shí)鐘發(fā)生器的輸入端。本系統(tǒng)采用晶振時(shí)鐘電路。外部晶振以及電容C2和C3構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中。對外接電容的值雖然沒有嚴(yán)格要求,但電容的大小多少會(huì)影響振蕩器頻率的高低,振蕩器的穩(wěn)定性,起振的快速性和穩(wěn)定性。外接晶振時(shí),C1和C2通常選擇30pf,晶振采用12MHz。時(shí)鐘電路如下圖3.16所示。圖3.16時(shí)鐘電路圖3.3.3本系統(tǒng)采用的復(fù)位電路如圖3.17所示。3.17復(fù)位電路圖本復(fù)位電路必須確保系統(tǒng)上電時(shí)能夠自動(dòng)復(fù)位。上電自動(dòng)復(fù)位電路的基本功能是:系統(tǒng)上電時(shí)提供復(fù)位信號(hào),直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號(hào)。為了可靠起見電源穩(wěn)定后,還要經(jīng)一定的延時(shí)才撤銷復(fù)位信號(hào)以防電源開關(guān)或電源插頭分-合過程中引起的抖動(dòng)而影響復(fù)位。為了實(shí)現(xiàn)這種功能,本設(shè)計(jì)采用了一種RC定時(shí)電路。其時(shí)間常數(shù)τ=RC,系統(tǒng)上電時(shí),C兩端的電壓為零,單片機(jī)的復(fù)位端的電平為高電平,單片機(jī)復(fù)位,經(jīng)過4—5個(gè)τ后,C兩端的電壓約等于電源電壓,單片機(jī)的復(fù)位端的電平為低電平,單片機(jī)退出復(fù)位狀態(tài)。3.4顯示電路的設(shè)計(jì)本系統(tǒng)利用LCD液晶顯示屏顯示溫度、濕度參數(shù)。液晶顯示屏的第一行顯示用戶可能需要調(diào)節(jié)的溫濕度上下限值,第二行顯示當(dāng)前測得的溫度、濕度值。3.4.1液晶顯示簡介①液晶顯示原理液晶顯示的原理是利用液晶的物理特性,通過電壓對其顯示區(qū)域進(jìn)行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規(guī)模集成電路直接驅(qū)動(dòng)、易于實(shí)現(xiàn)全彩色顯示的特點(diǎn),目前已經(jīng)被廣泛應(yīng)用在便攜式電腦、數(shù)字?jǐn)z像機(jī)、PDA移動(dòng)通信工具等眾多領(lǐng)域。②液晶顯示器的分類液晶顯示的分類方法有很多種,通??砂雌滹@示方式分為段式、字符式、點(diǎn)陣式等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。如果根據(jù)驅(qū)動(dòng)方式來分,可以分為靜態(tài)驅(qū)動(dòng)(Static)、單純矩陣驅(qū)動(dòng)(SimpleMatrix)和主動(dòng)矩陣驅(qū)動(dòng)(ActiveMatrix)三種。③液晶顯示器各種圖形的顯示原理:線段的顯示點(diǎn)陣圖形式液晶由M×N個(gè)顯示單元組成,假設(shè)LCD顯示屏有64行,每行有128列,每8列對應(yīng)1字節(jié)的8位,即每行由16字節(jié),共16×8=128個(gè)點(diǎn)組成,屏上64×16個(gè)顯示單元與顯示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時(shí),則屏幕的左上角顯示一條短亮線,長度為8個(gè)點(diǎn);當(dāng)(3FFH)=FFH時(shí),則屏幕的右下角顯示一條短亮線;當(dāng)(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H時(shí),則在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是LCD顯示的基本原理。字符的顯示用LCD顯示一個(gè)字符時(shí)比較復(fù)雜,因?yàn)橐粋€(gè)字符由6×8或8×8點(diǎn)陣組成,既要找到和顯示屏幕上某幾個(gè)位置對應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點(diǎn)亮,為“0”的不亮。這樣一來就組成某個(gè)字符。但由于內(nèi)帶字符發(fā)生器的控制器來說,顯示字符就比較簡單了,可以讓控制器工作在文本方式,根據(jù)在LCD上開始顯示的行列號(hào)及每行的列數(shù)找出顯示RAM對應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對應(yīng)的代碼即可。漢字的顯示漢字的顯示一般采用圖形的方式,事先從微機(jī)中提取要顯示的漢字的點(diǎn)陣碼(一般用字模提取軟件),每個(gè)漢字占32B,分左右兩半,各占16B,左邊為1、3、5……右邊為2、4、6……根據(jù)在LCD上開始顯示的行列號(hào)及每行的列數(shù)可找出顯示RAM對應(yīng)的地址,設(shè)立光標(biāo),送上要顯示的漢字的第一字節(jié),光標(biāo)位置加1,送第二個(gè)字節(jié),換行按列對齊,送第三個(gè)字節(jié)……直到32B顯示完就可以LCD上得到一個(gè)完整漢字。3.4.21602字符型LCD簡介字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式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個(gè)字符芯片工作電壓: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引腳接口說明表編號(hào)符號(hào)引腳說明編號(hào)符號(hào)引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號(hào)14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地時(shí)對比度最高,對比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度。第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負(fù)極。2.1602LCD的指令說明及時(shí)序1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表3.14所示:表3.14控制命令表序號(hào)指令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計(jì)數(shù)器地址10寫數(shù)到CGRAM或DDRAM)10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容1602液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(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)移動(dòng)方向,高電平右移,低電平左移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:高電平時(shí)移動(dòng)顯示的文字,低電平時(shí)移動(dòng)光標(biāo)。指令6:功能設(shè)置命令DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示F:低電平時(shí)顯示5x7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符。指令7:字符發(fā)生器RAM地址設(shè)置。指令8:DDRAM地址設(shè)置。指令9:讀忙信號(hào)和光標(biāo)地址BF:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。與HD44780相兼容的芯片時(shí)序如下表3.15:表3.15基本操作時(shí)序表讀狀態(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=高脈沖輸出無讀寫操作時(shí)序如圖3.19和3.20所示:圖3.19讀操作時(shí)序圖3.20寫操作時(shí)序3.1602LCD的RAM地址映射及標(biāo)準(zhǔn)字庫表液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖3.21是1602的內(nèi)部顯示地址。圖3.211602LCD內(nèi)部顯示地址例如第二行第一個(gè)字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7恒定為高電平1所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在對液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時(shí)光標(biāo)是自動(dòng)右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如圖3.22所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”圖3.22字符代碼與圖形對應(yīng)圖4.1602LCD的一般初始化(復(fù)位)過程延時(shí)15mS寫指令38H(不檢測忙信號(hào))延時(shí)5mS寫指令38H(不檢測忙信號(hào))延時(shí)5mS寫指令38H(不檢測忙信號(hào))以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號(hào)寫指令38H:顯示模式設(shè)置寫指令08H:顯示關(guān)閉寫指令01H:顯示清屏寫指令06H:顯示光標(biāo)移動(dòng)設(shè)置寫指令0CH:顯示開及光標(biāo)設(shè)置LCD液晶顯示單元電路圖如圖3.23所示。圖3.23液晶顯示單元電路圖3.5按鍵電路的設(shè)計(jì)本設(shè)計(jì)采用6個(gè)獨(dú)立按鍵完成對溫、濕度上下限的設(shè)定。設(shè)計(jì)7個(gè)按鍵以完成該功能。7個(gè)按鍵的功能如下:按鍵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報(bào)警單元的設(shè)計(jì)在監(jiān)測系統(tǒng)中,對于重要的參數(shù)一般都設(shè)有緊急狀態(tài)報(bào)警系統(tǒng),以便提醒操作人員注意,或采取緊急措施。其方法就是把計(jì)算機(jī)采集的數(shù)據(jù)或記過計(jì)算機(jī)進(jìn)行數(shù)據(jù)處理、數(shù)字濾波,標(biāo)度變換之后,與該參數(shù)上下限設(shè)定值進(jìn)行比較,如果高于上限值(或低于下限值)則進(jìn)行報(bào)警,否則就作為采樣的正常值,進(jìn)行顯示。本設(shè)計(jì)采用峰鳴音報(bào)警電路。峰鳴音報(bào)警接口電路的設(shè)計(jì)只需購買市售的壓電式蜂鳴器,然后通過單片機(jī)的1根口線經(jīng)驅(qū)動(dòng)器驅(qū)動(dòng)蜂鳴音發(fā)聲。壓電式蜂鳴器約需10mA的驅(qū)動(dòng)電流,可以使用TTL系列集成電路7406或7407低電平驅(qū)動(dòng),也可以用一個(gè)晶體三極管驅(qū)動(dòng)。在圖中,P3.2接晶體管基極輸入端。當(dāng)P3.2輸出高電平“1”時(shí),晶體管導(dǎo)通,壓電蜂鳴器兩端獲得約+5V電壓而鳴叫;當(dāng)P3.2輸出低電平“0”時(shí),三極管截止,蜂鳴器停止發(fā)聲。圖3.25是運(yùn)用三極管驅(qū)動(dòng)的峰鳴音報(bào)警電路。圖3.25三極管驅(qū)動(dòng)的峰鳴音報(bào)警電路4軟件設(shè)計(jì)主程序由溫度采集子程序、濕度采集子程序、鍵盤輸入和顯示子程序和報(bào)警子程序組成。本章將列出主程序清單,并詳細(xì)說明溫度、濕度采集子程序。4.1主程序設(shè)計(jì)系統(tǒng)主程序流程圖如圖4.1所示。返回返回初始化調(diào)用溫度采集子程序調(diào)用濕度采集子程序顯示采集的溫濕度數(shù)據(jù)開始參數(shù)設(shè)定是否設(shè)定鍵是否按下圖4.1主程序流程圖4.2子程序設(shè)計(jì)4.2.1溫度傳感器子程序設(shè)計(jì)1.DS18B20溫度采集子程序流程圖如圖4.2所示。圖4.2DS18B20溫度子程序設(shè)計(jì)流程圖2溫度顯示子程序流程圖如圖4.3所示。檢測DS18B20存在?NY讀取溫度數(shù)據(jù)發(fā)送DS18B20編碼DS18B20復(fù)位I=1,等待溫度轉(zhuǎn)換發(fā)送跳過ROM指令讀DS18B20的序列號(hào)初始化DS18B20開始檢測DS18B20存在?NY讀取溫度數(shù)據(jù)發(fā)送DS18B20編碼DS18B20復(fù)位I=1,等待溫度轉(zhuǎn)換發(fā)送跳過ROM指令讀DS18B20的序列號(hào)初始化DS18B20開始圖4.3溫度顯示程序流程圖3溫度報(bào)警子程序流程圖如圖4.4所示。開始開始總線復(fù)位總線復(fù)位跳過跳過ROM所有所有ds18b20開始溫度轉(zhuǎn)換延時(shí)1秒延時(shí)1秒設(shè)置匹配設(shè)置匹配ROM發(fā)送發(fā)送ROM編號(hào)開始溫度轉(zhuǎn)換開始溫度轉(zhuǎn)換是否是否超限制溫度?Y所有讀取完畢?所有讀取完畢?顯示溫度報(bào)警顯示溫度報(bào)警NY圖4.4溫度報(bào)警流程圖4.2.2濕度傳感器子程序設(shè)計(jì)初始化設(shè)置定時(shí)常數(shù)在62.5ms內(nèi)T0產(chǎn)生中斷嗎?共產(chǎn)生了20次中斷嗎?將T1計(jì)的數(shù)放入50H和51H初始化設(shè)置定時(shí)常數(shù)在62.5ms內(nèi)T0產(chǎn)生中斷嗎?共產(chǎn)生了20次中斷嗎?將T1計(jì)的數(shù)放入50H和51H將其轉(zhuǎn)化成10進(jìn)制放入5CH和5DH返回重設(shè)定時(shí)時(shí)間常數(shù)關(guān)中斷YESYESNONO開始圖4.5濕度采集子程序4.2.3按鍵子程序設(shè)計(jì)根據(jù)課題要求,用戶可以自行設(shè)定溫、濕度上下限。由此,設(shè)計(jì)7個(gè)按鍵以完成該功能。7個(gè)按鍵的功能如下:按鍵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報(bào)警子程序設(shè)計(jì)報(bào)警子程序流程圖如圖4.7所示。圖4.7報(bào)警子程序流程圖4.2.5顯示子程序設(shè)計(jì)顯示子程序流程圖如圖4.8所示。圖4.8顯示子程序流程圖5調(diào)試結(jié)果與總結(jié)本文完成了溫度傳感器的選擇、濕度傳感器的設(shè)計(jì)、數(shù)據(jù)采集的硬件電路設(shè)計(jì)和軟件編程。此部分與鍵盤顯示部分和報(bào)警電路共同構(gòu)成了整個(gè)系統(tǒng)。經(jīng)過整個(gè)系統(tǒng)的研究與設(shè)計(jì),最終采用單總線數(shù)字式溫度傳感器DS18B20進(jìn)行溫度采集,采用濕敏電容HS1101對濕度參數(shù)進(jìn)行采集。LCD液晶顯示屏對于當(dāng)前的溫度值和濕度值進(jìn)行實(shí)時(shí)的顯示,可以方便用戶直觀的了解所測得的溫度、濕度環(huán)境參數(shù)值。用戶可使用按鍵根據(jù)自身要求設(shè)定溫濕度上下限,同時(shí),報(bào)警裝置可依據(jù)用戶的設(shè)定針對溫濕度超限情況進(jìn)行報(bào)警。同時(shí)介紹了用單片機(jī)AT89C51控制DS18B20和HS1101,著重分析各單元電路的設(shè)計(jì),以及各電路與單片機(jī)的接口技術(shù)。最后還給出系統(tǒng)的軟件的設(shè)計(jì)過程,并進(jìn)行程序設(shè)計(jì)。本文是采用模塊化的方式進(jìn)行敘述,對各模塊的設(shè)計(jì)進(jìn)行了比較詳細(xì)地闡述。經(jīng)過反復(fù)調(diào)試,溫濕度能夠正常顯示當(dāng)前值,而且最佳適宜溫度值可以有操作人員根據(jù)不同作物的需求進(jìn)行設(shè)定,在當(dāng)前溫度偏離所設(shè)定的適宜溫度±3℃時(shí),報(bào)警裝置蜂鳴器即會(huì)啟動(dòng),該系統(tǒng)基本實(shí)現(xiàn)了對溫濕度的測量與顯示,操作人員可以根該系統(tǒng)的不足之處在于沒能夠?qū)崿F(xiàn)溫濕度的自動(dòng)調(diào)節(jié),由于時(shí)間倉促和本人知識(shí)有限,在設(shè)計(jì)原理圖時(shí),沒考慮清楚顯示位數(shù),以至該系統(tǒng)無法顯示設(shè)定濕度,該系統(tǒng)可以進(jìn)一步加入溫濕度自動(dòng)調(diào)節(jié)電路,在當(dāng)前溫濕度超出作物所需的最適宜條件時(shí),啟動(dòng)溫濕度調(diào)節(jié)裝置,就可以真正的實(shí)現(xiàn)溫濕度的自動(dòng)控制。為了驗(yàn)證本系統(tǒng)的準(zhǔn)確性,條件有限以至于濕度測量無法驗(yàn)證其準(zhǔn)確性,在調(diào)試時(shí)只對環(huán)境溫度做了十次測量,時(shí)間間隔為一個(gè)小時(shí),并與溫度計(jì)所測量的溫度值做了比較。記錄如表5.1所示:表5-1溫度測量比較表測量次數(shù)測量值(℃)溫度計(jì)顯示值(℃)相對誤差(℃)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ì)工作已經(jīng)完成了。該系統(tǒng)是針對倉庫管理設(shè)計(jì)的,但是從溫濕度傳感器的數(shù)據(jù)采集范圍以及用戶可設(shè)定的上、下限來看,它還可以應(yīng)用到其它諸如圖書館、樓宇溫濕度控制、電教中心溫濕度控制等方面,因此用途是比較廣泛的。致謝經(jīng)過這段時(shí)間的忙碌和工作,本次畢業(yè)設(shè)計(jì)終于完成了,作為一個(gè)本科生的畢業(yè)設(shè)計(jì),由于經(jīng)驗(yàn)的匱乏,難免有許多考慮不周全的地方,如果沒有導(dǎo)師的督促指導(dǎo),以及同學(xué)們的支持和幫助,想要完成這個(gè)設(shè)計(jì)是難以想象的。在此之際,我思緒萬千,心情久久不能平靜?;仡櫵哪陮W(xué)習(xí)期間的一千余個(gè)日日夜夜,自己為課題的研究,靜心鉆研,潛心研究,并取得初步研究成果而感到欣慰。在這里首先要感謝我的導(dǎo)師徐老師。徐老師平日里工作繁多,但在我做畢業(yè)設(shè)計(jì)的每個(gè)階段,從開題報(bào)告到畢設(shè)論文,從設(shè)計(jì)草案的確定和修改,中期檢查,后期詳細(xì)設(shè)計(jì),裝配草圖等整個(gè)過程中都給予了我悉心的指導(dǎo)。徐老師對每一次批改都嚴(yán)格把關(guān),指出了文章中出現(xiàn)的問題,多次修改之后我的論文達(dá)到了規(guī)定標(biāo)準(zhǔn)。在徐老師的幫助下,我的課題的設(shè)計(jì)任務(wù)得以順利完成。徐老師嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度和踏實(shí)的工作作風(fēng)給我留下了深刻的印象,是我學(xué)習(xí)的榜樣。在此,向徐老師致以最誠摯的謝意。同時(shí)還要感謝教育和指導(dǎo)過我的所有老師,你們給予我的不僅僅是知識(shí),還有你們對知識(shí)孜孜不倦的追求精神和對生活的積極向上態(tài)度,使我終身受益。我將在以后的工作中繼續(xù)努力,不斷學(xué)習(xí),努力提高自己。路漫漫其修遠(yuǎn)兮,吾將上下而求索。我愿在未來的學(xué)習(xí)和研究過程中,以更加豐厚的成果來答謝曾經(jīng)關(guān)心、幫助和支持過我的所有領(lǐng)導(dǎo)、老師、同學(xué)、同事和朋友,一并表同時(shí)感謝我的母校蘭州理工大學(xué)技術(shù)工程學(xué)院,它是一片培育桃李、播撒知識(shí)的芬芳的熱土。學(xué)校雄厚的師資力量使我學(xué)到了豐富的知識(shí);學(xué)校嚴(yán)格的基礎(chǔ)培訓(xùn)使我掌握了基本的技能;學(xué)校淳厚的學(xué)風(fēng)使我意識(shí)到知識(shí)可以改變命運(yùn)。在這個(gè)大家庭里我學(xué)到了許多專業(yè)方面的知識(shí)和技能,在多樣化的實(shí)驗(yàn)室里我實(shí)際動(dòng)手操作了許多實(shí)驗(yàn),親手完成了許多實(shí)習(xí)項(xiàng)目,這使得我的動(dòng)手能力有了顯著提高,于此同時(shí)我對專業(yè)知識(shí)的掌握更加牢固與靈活。感謝電信學(xué)院所有的老師,謝謝你們對我的辛勤培育!最后,再次向他們表示我最誠摯的謝意,我將以最大的熱情投入到工作中,以報(bào)答所以幫助我過的老師和同學(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è)計(jì)[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版.2003.7[4]楊文龍.單片機(jī)原理及應(yīng)用[M].西安:西安電子科技大學(xué)出版社.2006.6[5]付家才.單片機(jī)控制工程實(shí)踐技術(shù)[M].北京:化學(xué)工業(yè)出版社.2004.3[6]胡紅生.石秀東,徐亞棟.氣調(diào)保鮮自動(dòng)控制系統(tǒng)的研究[J].2004.6[7]徐瑋等.C51單片機(jī)高效入門[M].北京:機(jī)械工業(yè)出版社.2006年10月.[8]潭浩強(qiáng).語言設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社.1999.[9]何立民主編.單片機(jī)應(yīng)用技術(shù)選編(第五冊)[M].北京:北京航空航天大學(xué)出版社.2000[10]何立民.單片機(jī)應(yīng)用技術(shù)選編[M].北京:北京航空航天大學(xué)出版社.2004.[11]李華.MCS51系列單片機(jī)實(shí)用接口技術(shù)[M].北京:北京航空航天大學(xué)出版社.1993.[12]徐亦朱.DS18B20中文手冊.美國DALLAS半導(dǎo)體公司.1992.[13]郭強(qiáng).液晶顯示應(yīng)用技術(shù)[M].北京:電子工業(yè)出版社.2000.[14]楊建等.濕度測量體制歷史和現(xiàn)狀分析及建議[J].白城:中國白城兵器試驗(yàn)中心,2009.6.[15]胡紅生,石秀東,徐亞棟,氣調(diào)保鮮自動(dòng)控制系統(tǒng)的研究[J].2004.6[16]趙麗娟.基于單片機(jī)的溫度監(jiān)測系統(tǒng)的設(shè)計(jì)與實(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個(gè)數(shù)據(jù)和一個(gè)運(yùn)算暫用/*****************11us延時(shí)函數(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;//定時(shí)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);//延時(shí)500uspresence=~DQ;}DQ=1;//拉高電平}/****************DS18B20寫命令函數(shù)************************///向1-WIRE總線上寫1個(gè)字節(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個(gè)字節(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é)合成一個(gè)整型變量。returntemp;//返回溫度值}///****************溫度數(shù)據(jù)處理函數(shù)************************///二進(jìn)制高字節(jié)的低半字節(jié)和低字節(jié)的高半字節(jié)組成一字節(jié),這個(gè)//字節(jié)的二進(jìn)制轉(zhuǎn)換為十進(jìn)制后,就是溫度值的百、十、個(gè)位值,而剩//下的低字節(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()*功能:定時(shí)器1,每50000us中斷一次。*入口參數(shù):******************************************************************/voidtimer0()interrupt1{EA=0;TR0=0;
TR1=0;TL0=0xFF;
//重裝值
定時(shí)50000usOX4BFFHTH0=0x4B;
tem0=TL1;//讀數(shù)tem1=TH1;TL1=0x00;
//定時(shí)器1清零TH1=0x00;f=1;
//作標(biāo)注位TR0=1;TR1=1;EA=1;}/*****************************************************************************名稱:timer1()*功能:計(jì)數(shù)器,用于計(jì)數(shù)將555輸出的頻率,以計(jì)數(shù)相對濕度。*入口參數(shù):****************************************************************************/voidtimer1()interrupt3
//T1中斷,表示計(jì)數(shù)的頻率溢出,超出了可測量的頻率范圍,顯然在這里不可能。所以重新啟動(dòng)。{EA=0;TR0=0;
TR1=0;TL0=0x00;
//重裝值
定時(shí)50000usTH0=0x4C;
TL1=0x00;
//定時(shí)器1清零TH1=0x00;
TR0=1;
TR1=1;EA=1;}voidInit_timer(){TMOD=0x51;
//01010001定時(shí)器0在模式1下工作16位定時(shí)器,定時(shí)方式定時(shí)器1在模式1下工作16位計(jì)數(shù)器,T1負(fù)跳變加1TL0=0x00;
//定時(shí)器0初值定時(shí)50000usTH0=0x4C;
TL1=0x00;
//定時(shí)器1清零TH1=0x00;ET0=1;
//使能定時(shí)器0中斷ET1=1;
//使能定時(shí)器1中斷EA=1;
//使能總中斷TR0=1;
//開始計(jì)時(shí)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++);
//延時(shí)
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記時(shí)T1計(jì)數(shù)TH0=0x3c;//定時(shí)50msTL0=0xB0;TH1=0x00;//計(jì)數(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;//個(gè)位num=0;TMOD=0x51;//T0記時(shí)T1計(jì)數(shù)TH0=0x3c;//定時(shí)50msTL0=0xB0;TH1=0x00;//計(jì)數(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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 闌尾炎術(shù)后應(yīng)用抗生素聯(lián)合黃藤通腑湯干預(yù)的效果
- 初級會(huì)計(jì)實(shí)務(wù)-《初級會(huì)計(jì)實(shí)務(wù)》預(yù)測試卷364
- 初級會(huì)計(jì)經(jīng)濟(jì)法基礎(chǔ)-初級會(huì)計(jì)《經(jīng)濟(jì)法基礎(chǔ)》??荚嚲?12
- 2025版科技創(chuàng)新項(xiàng)目信托借款合同范本3篇
- 二零二五年度房產(chǎn)買賣合同履約保證金管理合同模板4篇
- 二零二五年度綠色環(huán)保瓦工力工勞務(wù)分包與綠色施工合同9篇
- 二零二五年度個(gè)人房產(chǎn)買賣風(fēng)險(xiǎn)評估與管控合同樣本
- 自媒體項(xiàng)目方案書
- 路面墊層施工方案
- 二零二五年度個(gè)人停車位使用權(quán)投資合作協(xié)議4篇
- 手術(shù)室護(hù)士考試題及答案
- 牙膏項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 浙南名校聯(lián)盟2025屆高一數(shù)學(xué)第二學(xué)期期末達(dá)標(biāo)檢測試題含解析
- 10以內(nèi)加減法練習(xí)題1000題直接打印版
- 單位食堂供餐方案
- DB42-T 2204-2024 湖沼濕地溫室氣體通量監(jiān)測技術(shù)規(guī)范
- 急性會(huì)厭炎的護(hù)理
- 四年級口算題大全(全)
- T-902 千分尺內(nèi)校報(bào)告
- 2024公安聯(lián)考行測題庫
- 部編二上語文第四單元美麗中國 公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
評論
0/150
提交評論