




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上目錄引言由于對(duì)生態(tài)環(huán)境的破壞,導(dǎo)致近幾年氣候極其不穩(wěn)定。有時(shí)昨天還短衣短褲,過著夏天的生活,一覺醒來,一朝回到寒冷冬季。由于沒注意到溫、濕度的變化,及時(shí)添衣補(bǔ)水,導(dǎo)致感冒頻發(fā),所以對(duì)溫濕度的檢測及控制就非常有必要了。51系列單片機(jī)由于價(jià)格低廉,便于控制,時(shí)常用于小型程序的控制。本文便采用AT89C52來進(jìn)行對(duì)DHT11采集到的信號(hào)進(jìn)行分析、控制,使其能實(shí)時(shí)采集當(dāng)前溫度、濕度,并可通過對(duì)應(yīng)來按鍵來進(jìn)行溫濕度上下限的設(shè)置,若當(dāng)前溫度超過設(shè)定的上下限時(shí),產(chǎn)生報(bào)警、提醒。將采集信號(hào)置于室外,可提醒人們出門需添衣補(bǔ)水;將采集信號(hào)置于大棚種植中,可提醒農(nóng)夫?qū)Υ笈镞M(jìn)行調(diào)溫、對(duì)農(nóng)作物
2、進(jìn)行補(bǔ)水,防止農(nóng)作物死亡。一、設(shè)計(jì)目的1、掌握AT89C52的控制2、掌握DHT11的控制原理3、掌握數(shù)碼管的動(dòng)態(tài)掃描4、掌握按鍵的輸入二、設(shè)計(jì)要求1、溫、濕度實(shí)時(shí)檢測及顯示:通過4位數(shù)碼管實(shí)時(shí)顯示傳感器DHT11檢測到的溫度和濕度,并可通過固定時(shí)間切換顯示溫度和濕度。2、溫、濕度上下限設(shè)置按鈕:分配按鍵,通過對(duì)應(yīng)的按鍵,可實(shí)現(xiàn)對(duì)溫度上、下限的設(shè)置;濕度上、下限的控制。3、自動(dòng)報(bào)警:當(dāng)溫度或濕度超過其上、下限時(shí),蜂鳴器會(huì)通過不同的報(bào)警對(duì)象來產(chǎn)生不同的報(bào)警方式。三、DHT11介紹1、基本參數(shù)型號(hào)測量范圍測濕精度測溫精度封裝建議掃描周期DHT112090%RH050±5%RH±
3、24針單排直插>=1s圖一:DHT11實(shí)物圖圖二:DHT11封裝尺寸圖2、引腳說明正面從左向右數(shù)第一根引腳第二根引腳第三根引腳第四根引腳VDD供電35.5VDC串行數(shù)據(jù)單總線空腳,請(qǐng)懸空GND接地,電源負(fù)極3、工作原理3.1數(shù)據(jù)傳輸格式單片機(jī)發(fā)送一次開始信號(hào)后,DHT11從低功耗模式轉(zhuǎn)換到高速模式,等待單片機(jī)開始信號(hào)結(jié)束后,DHT11發(fā)送40bit的數(shù)據(jù),高位先出。數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗(yàn)和數(shù)據(jù)傳輸正確時(shí),校驗(yàn)和數(shù)據(jù)等于“8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)
4、數(shù)據(jù)”所得結(jié)果的末八位如果沒有接收到單片機(jī)發(fā)送的開始信號(hào),DHT11不會(huì)主動(dòng)進(jìn)行溫濕度采集,轉(zhuǎn)換到低功耗模式。圖三:DHT11工作時(shí)序圖3.2 采集開始方式DHT11空閑時(shí)為高電平,單片機(jī)把總線拉低等待DHT11響應(yīng),拉低時(shí)間需大于18ms,保證DHT11能檢測到起始信號(hào)。DHT11接收到主機(jī)的開始信號(hào)后,等待單片機(jī)開始信號(hào)結(jié)束,然后發(fā)送80us低電平響應(yīng)信號(hào)。單片機(jī)發(fā)送開始信號(hào)結(jié)束后,延時(shí)等待2040us后,讀取DHT11的響應(yīng)信號(hào),可以切換到輸入模式,或者輸出高電平均可,總線由上拉電阻拉高。圖四:DHT11啟動(dòng)時(shí)序圖3.3DHT11信號(hào)發(fā)送方式圖五:“0”信號(hào)表示時(shí)序圖圖六:“1”信號(hào)表示
5、時(shí)序圖如果總線為低電平,說明DHT11發(fā)送響應(yīng)信號(hào),DHT11發(fā)送響應(yīng)信號(hào)后,會(huì)再把總線拉高80us,開始準(zhǔn)備數(shù)據(jù),每一bit數(shù)據(jù)都以50us低電平開始,通過判斷高電平的時(shí)間,來決定采集到的數(shù)是“0”還是“1”;當(dāng)高電平時(shí)間為26us28us時(shí),則采集到的數(shù)為“0”,如圖四所示;當(dāng)高電平時(shí)間大于28us時(shí),則采集到的數(shù) “1”,如圖五所示。當(dāng)最后1bit數(shù)據(jù)傳輸完畢后,DHT11拉低總線50us,隨后由上拉電阻拉高進(jìn)入空閑狀態(tài)。如果總線為高電平,說明DHT11沒有響應(yīng),有可能是線路沒插好。四、方案說明及相關(guān)功能電路接線圖控制中心AT89C52采集裝置DHT11輸入裝置按鍵顯示裝置數(shù)碼管報(bào)警裝置
6、蜂鳴器4.1整體框架圖4.2控制中心AT89C52單片機(jī)圖七:AT89C52單片機(jī)的最小系統(tǒng)電路圖該系統(tǒng)的控制中心,是由一片AT89C52單片機(jī)來控制、分析。該款單片機(jī)的最小系統(tǒng)由復(fù)位電路、晶振電路,IO口電路,完成其它功能的元器件均接在該片單片機(jī)的IO口上,由該單片機(jī)控制。4.3 采集裝置DHT11傳感器DHT11信號(hào)端接單片機(jī)的P2.1口,外加上拉電阻。DHT11與單片機(jī)之間的數(shù)據(jù)傳輸都是從該P(yáng)2.1口上傳輸。電路接法如圖八所示。4.4 輸入裝置按鍵圖八:DHT11接線圖按鍵由一個(gè)光電開關(guān)和4個(gè)普通按鍵組成。用戶可根據(jù)固定的按鍵來設(shè)置溫濕度報(bào)警的上限線,電路解法如圖九所示。各個(gè)按鍵的作用如
7、下:P3.3口的光電開關(guān):用于切換進(jìn)入設(shè)置界面 還是顯示界面P3.4口的普通按鍵:當(dāng)前設(shè)定對(duì)象值減一P3.5口的普通按鍵:當(dāng)前設(shè)定對(duì)象值加一P3.6口的普通按鍵:切換設(shè)置對(duì)象的上、下限P3.7口的普通按鍵:切換設(shè)置對(duì)象(溫濕度) 圖九:按鍵接線圖 4.5 顯示裝置數(shù)碼管顯示部分由四位數(shù)碼管構(gòu)成的,用戶可根據(jù)數(shù)碼管的顯示,看到的溫、濕度,以及其當(dāng)前設(shè)置的上、下限。接線圖如圖十所示。每位數(shù)碼管的功能如下:首位:當(dāng)首位滅時(shí),為顯示狀態(tài);亮?xí)r為設(shè)置狀態(tài) 當(dāng)顯示“”時(shí),表示設(shè)置當(dāng)前對(duì)象的上限當(dāng)顯示為“”時(shí),表示設(shè)置當(dāng)前對(duì)象的下限末尾:用于判別對(duì)象:當(dāng)顯示“E”時(shí),則表示 濕度 當(dāng)顯示“C“時(shí),則表示 溫
8、度中間兩位數(shù):用于顯示數(shù)值圖十:數(shù)碼管接線圖4.6 報(bào)警裝置蜂鳴器當(dāng)溫濕度的其中一項(xiàng)超過其設(shè)定的上下限,蜂鳴器就會(huì)產(chǎn)生報(bào)警,用戶可根據(jù)不同的報(bào)警方式,判斷是溫度超過界限,還是濕度超過界限。溫度報(bào)警:急促的響聲濕度報(bào)警:緩慢的響聲二則同時(shí)報(bào)警:響停時(shí)間一樣圖十一:蜂鳴器接線圖五、主要程序流程圖等待響應(yīng)信號(hào)結(jié)束把讀到的40bit的數(shù),分別放在對(duì)應(yīng)的位置,出來的順序依次是 濕度整數(shù)、濕度小數(shù)、溫度整數(shù)、溫度小數(shù)、校驗(yàn)碼DHT11拉低約50us再拉高,使其進(jìn)入空閑狀態(tài)計(jì)算四個(gè)數(shù)據(jù)的校驗(yàn)碼計(jì)算的校驗(yàn)碼與讀到的是否相等數(shù)據(jù)正確,把讀到的數(shù)據(jù),存在對(duì)應(yīng)的位置返回NYDHT11采集程序DHT11先拉低20ms
9、再拉高2040us將DHT11拉高設(shè)為輸入模式判斷有無響應(yīng)NY主程序中斷初始化開啟總中斷開啟定時(shí)器中斷調(diào)用DHT11采集程序調(diào)用按鍵操作程序判斷是否采集信號(hào)判斷顯示溫度還是濕度調(diào)用DHT11采集程序溫濕度標(biāo)志位切換YNNY中斷程序各類定時(shí)次數(shù)加一顯示時(shí)間到調(diào)用數(shù)碼管顯示程序定時(shí)次數(shù)清零YN返回是否該響蜂鳴器停蜂鳴器響返回YN報(bào)警處理程序溫、濕度同時(shí)報(bào)警周期適中溫度報(bào)警濕度報(bào)警周期長周期短YYNN響期清零周期清零Y計(jì)數(shù)>周期?計(jì)數(shù)清零YNYN按鍵操作程序判斷是否進(jìn)入設(shè)置界面NY溫濕度切換按鈕按下上下限切換按鈕按下N切換溫濕度切換上下限加一按鈕按下判斷出現(xiàn)在的操作對(duì)象、上下限,把該位加一減一
10、按鈕按下判斷出現(xiàn)在的操作對(duì)象、上下限,把該位減一返回NNYYYN首位符號(hào)出現(xiàn)顯示濕度最大值末位符號(hào)出現(xiàn)數(shù)碼管顯示判斷程序顯示界面?數(shù)碼管首位滅調(diào)用報(bào)警判斷顯示溫度?溫度整數(shù)顯示末尾標(biāo)志出現(xiàn)濕度整數(shù)顯示末尾標(biāo)志出現(xiàn)濕度最小值?溫度最小值?濕度最大值?首位符號(hào)出現(xiàn)顯示濕度最小值末位符號(hào)出現(xiàn)首位符號(hào)出現(xiàn)顯示溫度最小值末位符號(hào)出現(xiàn)首位符號(hào)出現(xiàn)顯示溫度最大值末位符號(hào)出現(xiàn)返回YYYYYNNNNN六、調(diào)試結(jié)果:6.1總體顯示:開機(jī)上電后,數(shù)碼管能正常顯示當(dāng)前溫度、濕度,并且每隔一段時(shí)間會(huì)溫濕度自動(dòng)切換。6.2按鍵調(diào)試:1、進(jìn)入設(shè)置界面(光電開關(guān)P3.3),后,數(shù)碼管會(huì)自動(dòng)顯示成當(dāng)前對(duì)應(yīng)對(duì)象所設(shè)的對(duì)應(yīng)值,再按
11、一次,則又退出設(shè)置界面。例如:數(shù)碼管顯示“40C”,則表示當(dāng)前設(shè)置的溫度上限為40;顯示“50E”則表示當(dāng)前濕度下限設(shè)置值為50%。2、進(jìn)入設(shè)置界面后(光電開關(guān)P3.3),按溫濕度切換按鈕(普通按鍵P3.7),數(shù)碼管會(huì)自動(dòng)切換對(duì)應(yīng)對(duì)象,并且出現(xiàn)前對(duì)應(yīng)對(duì)象所設(shè)的對(duì)應(yīng)值。例如:數(shù)碼管本來顯示“50E”,按下按鈕后,變成“20C”,則表示數(shù)碼管本來顯示的是濕度下限設(shè)置為50%,按下按鈕后,則數(shù)碼管變成顯示溫度下限當(dāng)前設(shè)置值位20。3、進(jìn)入設(shè)置界面后(光電開關(guān)P3.3),按上下限切換按鈕(普通按鍵P3.6),數(shù)碼管會(huì)自動(dòng)切換顯示當(dāng)前對(duì)象所設(shè)的對(duì)應(yīng)值。例如:數(shù)碼管本來顯示“40C”,按下該按鈕后,數(shù)碼管
12、會(huì)變成“20C”,則表示數(shù)碼管本來顯示的是溫度上限為40,按下該按鈕后,則數(shù)碼管會(huì)變成顯示溫度下限當(dāng)前設(shè)置值位20。4、進(jìn)入設(shè)置界面后(光電開關(guān)P3.3),按加一按鈕(普通按鍵P3.5),會(huì)把當(dāng)前對(duì)象的設(shè)置值加一,數(shù)碼管顯示的值也會(huì)對(duì)應(yīng)加一。例如:數(shù)碼管本來顯示“20C”,按下該按鈕后,數(shù)碼管顯示“21C”。即表示本來當(dāng)前的溫度下限設(shè)置值為20,按下該按鈕后,溫度下限的設(shè)置值變?yōu)?1。5、進(jìn)入設(shè)置界面后(光電開關(guān)P3.3),按減一按鈕(普通按鍵P3.4),會(huì)把當(dāng)前對(duì)象的設(shè)置值減一,數(shù)碼管顯示的值也會(huì)對(duì)應(yīng)減一。例如:數(shù)碼管本來顯示“50E”,按下該按鈕后,數(shù)碼管顯示“49E”。即表示濕度下限本來
13、設(shè)置值為50%,按下該按鈕后,濕度下限設(shè)置值變49%。6、沒有進(jìn)入設(shè)置界面,按其它四個(gè)按鍵無反應(yīng)。6.3報(bào)警調(diào)試1、將溫度的報(bào)警下限調(diào)到超過當(dāng)前溫度或者報(bào)警上限調(diào)低于當(dāng)前溫度時(shí),蜂鳴器會(huì)發(fā)出急促的報(bào)警聲。2、將濕度的報(bào)警下限調(diào)到超過當(dāng)前濕度或者報(bào)警上限調(diào)低于當(dāng)前濕度時(shí),蜂鳴器會(huì)發(fā)出緩慢的報(bào)警聲。3、當(dāng)溫濕度同時(shí)都報(bào)警時(shí),蜂鳴器會(huì)發(fā)出響停一致的報(bào)警聲。4、當(dāng)正處于報(bào)警時(shí),進(jìn)入設(shè)置界面,報(bào)警聲會(huì)停止,用戶可重新設(shè)置上下限,讓報(bào)警取消,以免擾民。七、調(diào)試過程遇到的問題7.1問題:單片機(jī)始終未接收到DHT11的信號(hào)。現(xiàn)象:運(yùn)行程序后,數(shù)碼管始終顯示00。分析:硬件原因,1、DHT11壞了,信號(hào)未采集,
14、導(dǎo)致單片機(jī)無信號(hào)。 軟件原因,1、采集步驟出錯(cuò),未理解透DHT11采集原理,導(dǎo)致信號(hào)未采集。 2、顯示程序錯(cuò)誤,未正確賦值顯示,以至于DHT11已采集到信號(hào),但未能正確顯示,以至于誤以為是DHT11未采集信號(hào)。問題解決:硬件問題排除,買了幾個(gè)全新的DHT11,分別接上單片機(jī),發(fā)現(xiàn)全都不能使用,所以初步排除了硬件原因。軟件原因,最有可能的就是未能正確理解DHT11采集過程,所以特地跟組員規(guī)定,先不探討,各自去看DHT11采集原理,之后再探討各自認(rèn)為DHT11如何采集,然后再按各自的理解,一個(gè)一個(gè)實(shí)驗(yàn),看那個(gè)能采集到信號(hào),確定出DHT11正確的采集過程。7.2問題:數(shù)碼管動(dòng)態(tài)掃描不穩(wěn)定?,F(xiàn)象:本來
15、在主程序調(diào)用數(shù)碼管顯示程序,使4位數(shù)碼管逐個(gè)給值、顯示,4位數(shù)碼管都能正常穩(wěn)定的顯示,但經(jīng)過一次數(shù)據(jù)采集之后,數(shù)碼管會(huì)有一段時(shí)間的晃動(dòng),甚至全滅,之后再變穩(wěn)定。分析:未采集信號(hào)前,數(shù)碼管能正常顯示,遇到采集信號(hào)時(shí),數(shù)碼管不能正常顯示,推測是DHT11采集時(shí)耗時(shí)太久,所以數(shù)碼管更新顯示時(shí)間邊長,所以數(shù)碼管動(dòng)態(tài)掃描不穩(wěn)定。問題解決:采用定時(shí)器中斷,每隔一段時(shí)間,中斷發(fā)生時(shí),掃描數(shù)碼管的一位,下次掃描時(shí),自動(dòng)切換到掃描數(shù)碼管下一位。這樣能保證數(shù)碼管穩(wěn)定顯示。但用中斷時(shí),DHT11采集前時(shí),需把中斷關(guān)掉,防止采集過程中,信號(hào)丟失。7.3問題:數(shù)碼管顯示位數(shù)太少,要顯示的東西太多?,F(xiàn)象:數(shù)碼管只有四位,
16、不僅要顯示溫度、濕度,還要顯示濕度與溫度各自的最大值與最小值,數(shù)據(jù)較多。分析:由于沒有標(biāo)志,不知道當(dāng)前顯示的是什么數(shù),顯示是否正確。問題解決:經(jīng)小組統(tǒng)一決定將四位數(shù)碼管的中間兩位來顯示數(shù)值,首尾兩個(gè)數(shù)碼管用來確定當(dāng)前顯示的是什么數(shù)。具體的格式如前面數(shù)碼管的介紹中所說。在程序中,建立了4個(gè)變量,來給數(shù)碼管顯示判斷,各個(gè)變量各種狀態(tài)效果如下所述:變量名“0”狀態(tài)“1”狀態(tài)bianliang顯示界面設(shè)置界面bianliang1設(shè)置濕度設(shè)置溫度bianliang2最小值最大值bianliang3顯示當(dāng)前濕度顯示當(dāng)前溫度例如:bianliang和bianliang3都為“0”,則數(shù)碼管顯示當(dāng)前濕度 bi
17、anliang=1并且bianliang1和bianliang2都為0,則數(shù)碼管顯示的濕度的最小值。PS:只有進(jìn)入設(shè)置界面,才能看到溫濕度所設(shè)置的最大值和最小值。7.4問題:報(bào)警太單一,無法區(qū)分是濕度報(bào)警,還是溫度報(bào)警?,F(xiàn)象:報(bào)警時(shí),蜂鳴器產(chǎn)生長鳴,想把上下限調(diào)到合適的位置,讓報(bào)警取消以免擾民,卻不知道要跳那個(gè)界限。分析:報(bào)警只有單一的長鳴,不能辨別解決方案:將報(bào)警方式分為,溫度報(bào)警、濕度報(bào)警、兩則同時(shí)報(bào)警三種情況。通過判斷響停時(shí)間長短來判斷報(bào)警形式,具體報(bào)警形式如前面蜂鳴器中所說。若停止報(bào)警,只需進(jìn)入設(shè)置界面,將改報(bào)警對(duì)象的上下限合適調(diào)整即可。八、實(shí)驗(yàn)總結(jié)經(jīng)過了這兩周的實(shí)訓(xùn),使我收獲頗多。首
18、先,使我懂得了DHT11傳感器的工作原理,理解其工作時(shí)序圖。DHT1內(nèi)部有測溫元件和測濕元件,當(dāng)單片機(jī)發(fā)送采集信號(hào)給DHT11后,DHT11會(huì)將采集到的溫度、濕度轉(zhuǎn)換成40bit的數(shù)據(jù)給單片機(jī)。其次,讓我懂得用定時(shí)器中斷來實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)顯示。數(shù)碼管顯示的程序本來是放在主程序里,當(dāng)掃描到數(shù)碼管程序時(shí)才能顯示,最后發(fā)現(xiàn)要是主程序程序太多的話,數(shù)碼管顯示出來的數(shù)字就會(huì)不穩(wěn)定。經(jīng)過研究后,發(fā)現(xiàn)可以用定時(shí)器中斷,讓每隔一段時(shí)間,中斷產(chǎn)生時(shí),掃描數(shù)碼管的其中一位。這樣就可以讓數(shù)碼管穩(wěn)定顯示了。最后,使我深刻的意識(shí)到了自己在匯編上的不足。該程序本來是打算用匯編語言寫的,由于事先沒有安排好變量的存儲(chǔ)地址,后
19、來一寫才發(fā)現(xiàn)自己被匯編語言的跳轉(zhuǎn)指令,跳得自己都暈了。不像C語言那樣,會(huì)自動(dòng)分配變量的存儲(chǔ)地址。兩周時(shí)間,說長也不算長,卻讓我對(duì)控制有了興趣。當(dāng)自己所寫的程序,如自己所想的那般執(zhí)行時(shí),那種喜悅是不可言語的。實(shí)訓(xùn)雖結(jié)束了,但激情還在。之后還應(yīng)以這次的經(jīng)歷,多多研究控制其它元器件。九、程序清單/*實(shí)驗(yàn)?zāi)繕?biāo)*采用DHT11實(shí)現(xiàn)溫濕度的采集,并在4位數(shù)碼管上顯示通過對(duì)應(yīng)的按鍵,可實(shí)現(xiàn)設(shè)置溫濕度的上下限當(dāng)溫濕度超過上下限時(shí),會(huì)產(chǎn)生報(bào)警*/*定義區(qū)*地址、變量定義*/#include<at89x52.h>/頭文件#define uint unsigned int#define uchar un
20、signed charsfr smg=0x80; /數(shù)碼管顯示值,當(dāng)前定義為P0口sfr esmg=0xa0;/數(shù)碼管位選地址,當(dāng)前定義為P2口sbit dht11=0xa1;/DHT11信號(hào)端,當(dāng)前定義為P2_1sbit moshi=0xb7;/設(shè)置溫度濕度切換按鈕,當(dāng)前定義為P3_7sbit qiehuan=0xb6;/切換上限下限切換按鈕,當(dāng)前定義為P3_6sbit add=0xb5; /設(shè)置值加1按鈕,當(dāng)前定義為P3_5sbit sub=0xb4; /設(shè)置值減一按鈕,當(dāng)前定義為P3_4sbit shezhi=0xb3; /設(shè)置界面顯示界面切換按鈕sbit fengming=0x93;/
21、蜂鳴器地址,當(dāng)前定義為P1_3bit bianliang=0; /設(shè)置與顯示的標(biāo)志位bit bianliang1=0; /設(shè)置溫度與濕度的標(biāo)志位bit bianliang2=0; /設(shè)置最大值與最小值的標(biāo)志位bit bianliang3=1; /顯示溫度與濕度測定值標(biāo)志位bit baojing1=0; /溫度報(bào)警標(biāo)志位bit baojing2=0; /濕度報(bào)警標(biāo)志位uint bj,bj1,bj2; /報(bào)警蜂鳴器低電平時(shí)間*50us,周期時(shí)間*50usuint xs; /四位數(shù)碼管中間兩位顯示的值uint ds,cj,qh;/ 定時(shí)次數(shù)變量,ds:用于數(shù)碼管顯示頻率 cj:用于溫濕度采集頻率 q
22、h,溫濕度顯示切換頻率uchar max_R=80,min_R=20,max_T=50,min_T=10; /用于設(shè)置濕度上限、下限;溫度上限、下限uchar shou=0xff,mo=0xff; /數(shù)碼管首位和末位顯示uchar byte,RH,RL,TH,TL; /采集到的 字節(jié)、濕度整數(shù)、濕度小數(shù);溫度整數(shù),溫度小數(shù)int a=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /數(shù)碼管字段碼/*延時(shí)程序區(qū)*/void Delay20ms()/11.0592MHzunsigned char i, j;i = 36;j = 217;dowh
23、ile (-j); while (-i);void Delay8ms()/11.0592MHzunsigned char i, j;i = 15;j = 84;dowhile (-j); while (-i);void Delay28us()/11.0592MHzunsigned char i;i = 10;while (-i);/*定時(shí)中斷設(shè)置區(qū)*/void Timer0Init(void)/50微秒11.0592MHzTMOD &= 0xF0;/設(shè)置定時(shí)器模式TMOD |= 0x02;/設(shè)置定時(shí)器模式TL0 = 0xD2;/設(shè)置定時(shí)初值TH0 = 0xD2;/設(shè)置定時(shí)重載值TF0
24、= 0;/清除TF0標(biāo)志TR0 = 1;/定時(shí)器0開始計(jì)時(shí)/*數(shù)碼管顯示區(qū)*/void xianshi (int num) int i; switch (i) case 0:esmg=0xf0|esmg;smg=shou;esmg=0xef&esmg;i+;break; case 1:esmg=0xf0|esmg;smg=anum%100/10;esmg=0xdf&esmg;i+;break; case 2:esmg=0xf0|esmg;smg=anum%10/1;esmg=0xbf&esmg;i+;break; case 3:esmg=0xf0|esmg;smg=mo
25、;esmg=0x7f&esmg;i+;break; default:i=0;break; /*報(bào)警處理區(qū)*/void baojing() if(TH>=max_T|TH<=min_T)baojing1=1;/溫度超極限,溫度報(bào)警標(biāo)志位置一 else baojing1=0;/否則,溫度報(bào)警標(biāo)志位清零 if(RH>=max_R|RH<=min_R)baojing2=1;/濕度超極限,濕度報(bào)警標(biāo)志位置一 else baojing2=0;/否則,濕度報(bào)警標(biāo)志位清零 void baojingchuli() if(baojing1=1&&baojing2=1
26、) /溫濕度同時(shí)報(bào)警 bj1=5000; /響時(shí)間 bj2=10000; /周期 else /都無報(bào)警 /溫濕度都無報(bào)警 bj1=0;/響時(shí)間 bj2=0;/周期 if(baojing1) /只有溫度報(bào)警 bj1=1000;/響時(shí)間 bj2=5000;/周期 if(baojing2) /只有濕度報(bào)警 bj1=9000;/響時(shí)間 bj2=30000;/周期 /如果 計(jì)數(shù)<bj1,響;bj1<計(jì)數(shù)<bj2,停;計(jì)數(shù)>bj2,計(jì)數(shù)清零 if(bj<bj1)fengming=0; else if(bj<bj2) fengming=1; else bj=0;/*數(shù)碼管
27、顯示判斷區(qū)*/void panduan() if(!bianliang) /進(jìn)入顯示界面 shou=0xff;/數(shù)碼管首位滅 baojing(); /判斷是否報(bào)警 if(!bianliang3) /顯示界面,顯示濕度 xs=RH; /當(dāng)前濕度給數(shù)碼管顯示 mo=0x86;/數(shù)碼管末尾出現(xiàn)“E" else /顯示界面,顯示溫度 xs=TH;/當(dāng)前溫度給數(shù)碼管顯示 mo=0xC6; /數(shù)碼管末尾出現(xiàn)"C" else /設(shè)置界面 if(bianliang1=0&&bianliang2=0) / 設(shè)置 濕度最小值 shou=0xC8; /數(shù)碼管首位出現(xiàn) 最
28、小值符號(hào)mo=0x86; /數(shù)碼管末尾出現(xiàn) 濕度符號(hào)xs=min_R;/把當(dāng)前的濕度最小值給數(shù)碼管顯示 else if(bianliang1=1&&bianliang2=0) /設(shè)置 溫度最小值 shou=0xC8;/數(shù)碼管首位出現(xiàn) 最小值符號(hào) mo=0xc6; /數(shù)碼管末尾出現(xiàn) 溫度符號(hào) xs=min_T;/把當(dāng)前的溫度最小值給數(shù)碼管顯示 else if(bianliang1=0&&bianliang2=1) /設(shè)置 濕度最大值 shou=0xc1;/數(shù)碼管首位出現(xiàn) 最大值符號(hào) mo=0x86; /數(shù)碼管末尾出現(xiàn) 濕度符號(hào)xs=max_R; /把當(dāng)前的濕度最大
29、值給數(shù)碼管顯示 else /設(shè)置溫度最大值 shou=0xC1;/數(shù)碼管首位出現(xiàn) 最大值符號(hào) mo=0xC6; /數(shù)碼管末尾出現(xiàn)溫度符號(hào) xs=max_T; /把當(dāng)前的溫度最大值給數(shù)碼顯示 /*中斷程序*/ void zhongduan() interrupt 1 ds+ ;cj+;bj+;if(ds>=10)/判斷是否該顯示數(shù)碼管,改變數(shù)字,可改頻率 panduan(); xianshi(xs);ds=0; /*DHT11采集區(qū)*/*DHT11啟動(dòng)程序*void qidong() dht11=0; /DHT11拉低電平 Delay20ms();/延時(shí)20ms,等待響應(yīng),需大于18ms
30、dht11=1;/拉高電平 Delay28us();/延時(shí)28us,延時(shí)范圍:20us40us /*讀取DHT11一個(gè)字節(jié)的數(shù)*uchar duqu() uchar i,temp; for(i=0;i<8;i+)/接收8bit的數(shù)據(jù) while(!dht11); /等待50us低電平開始信號(hào)結(jié)束 Delay28us(); /高電平時(shí)間為28us temp=0; /則讀到的數(shù)據(jù)為“0” if(dht11)temp=1;/28us后仍為高電平,則讀到的數(shù)據(jù)為“1” while(dht11);/等待高電平信號(hào)結(jié)束 byte<<=1;/數(shù)據(jù)高位先輸出,所以需右移 byte|=temp
31、;/讀到的數(shù)串在一起 return byte; /返回讀到的一個(gè)字節(jié)的數(shù) /*采集信號(hào)*void jieshou() uchar T_H,T_L,R_H,R_L,check,check1; qidong();/DHT11啟動(dòng)子程序 dht11=1; /主機(jī)設(shè)為輸入模式 if(!dht11) /判斷DHT11有無低電平響應(yīng) while(!dht11);/等待DHT11,低電平顯示是否結(jié)束while(dht11);/等待DHT11,高電平顯示是否結(jié)束R_H=duqu();/ 濕度整數(shù)位R_L=duqu(); /濕度小數(shù)位T_H=duqu();/溫度整數(shù)位T_L=duqu();/溫度小數(shù)位check
32、=duqu();/校驗(yàn)位dht11=0; /讀取完畢,DHT11拉低電平Delay28us(); /需延時(shí)約50usDelay28us();dht11=1; /DHT11拉高,進(jìn)入空閑狀態(tài)check1=R_H+R_L+T_H+T_L;/計(jì)算讀到的四個(gè)數(shù)據(jù)的校驗(yàn)碼if(check1=check) /判斷計(jì)算結(jié)果與讀到的結(jié)果是否一樣 /結(jié)果一致時(shí),把對(duì)應(yīng)的數(shù),存在對(duì)應(yīng)的位置 RH=R_H; RL=R_L; TH=T_H; TL=T_L; check=check1; /*按鍵處理程序*/void anjian(void) if( shezhi=0) /判斷是顯示狀態(tài),還是設(shè)置狀態(tài) Delay8ms(
33、); while(shezhi=0) ; Delay8ms(); bianliang=bianliang; if(bianliang)/如果是設(shè)置狀態(tài) if(!moshi)/判斷溫濕度切換按鈕是否按下 Delay8ms(); while(!moshi); Delay8ms(); bianliang1=bianliang1; if(!qiehuan)/判斷上下限切換按鈕是否按下 Delay8ms(); while(!qiehuan) ; Delay8ms(); bianliang2=bianliang2; if(!add)/判斷值加一按鈕是否按下 Delay8ms(); while(!add); Delay8ms(); /以下為判斷設(shè)置的對(duì)象 if(bianliang1=0&&bianliang2=0) min_R+; else if(bianliang1=1&&bianliang2=0) min_T+;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 黑龍江省伊春市紅星區(qū)2025年三下數(shù)學(xué)期末綜合測試模擬試題含解析
- 2024-2025學(xué)年四川省巴中市平昌縣四下數(shù)學(xué)期末聯(lián)考模擬試題含解析
- 湖南稅務(wù)高等??茖W(xué)?!盾浖_發(fā)工具》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年西雙版納傣族自治州數(shù)學(xué)四年級(jí)第二學(xué)期期末考試模擬試題含解析
- 四川省自貢市榮縣2024-2025學(xué)年三下數(shù)學(xué)期末學(xué)業(yè)水平測試模擬試題含解析
- 長春科技學(xué)院《MAPLE編程及工程應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南醫(yī)藥健康職業(yè)學(xué)院《會(huì)計(jì)學(xué)2》2023-2024學(xué)年第二學(xué)期期末試卷
- 蘭州航空職業(yè)技術(shù)學(xué)院《用戶界面設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年蠡縣六年級(jí)下學(xué)期調(diào)研數(shù)學(xué)試卷含解析
- 廣西水利電力職業(yè)技術(shù)學(xué)院《社會(huì)工作學(xué)概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年湖南高速鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫附答案
- 2025屆高考英語二輪復(fù)習(xí)備考策略課件
- 《高鐵乘務(wù)安全管理與應(yīng)急處置(第3版)》全套教學(xué)課件
- 歷年湖北省公務(wù)員筆試真題2024
- 學(xué)校食品安全長效管理制度
- 2.2 說話要算數(shù) 第二課時(shí) 課件2024-2025學(xué)年四年級(jí)下冊道德與法治 統(tǒng)編版
- 《工程勘察設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)》(2002年修訂本)
- 潔凈室空調(diào)凈化系統(tǒng)驗(yàn)證方案(通過BSI和華光審核)
- 2024年電力交易員(中級(jí)工)職業(yè)鑒定理論考試題庫-下(多選、判斷題)
- 電力建設(shè)工程質(zhì)量監(jiān)督檢查大綱新版
- GB-T-15894-2008-化學(xué)試劑-石油醚
評(píng)論
0/150
提交評(píng)論