《基于單片機(jī)的智能熱水器系統(tǒng)設(shè)計(jì)11000字(論文)》_第1頁(yè)
《基于單片機(jī)的智能熱水器系統(tǒng)設(shè)計(jì)11000字(論文)》_第2頁(yè)
《基于單片機(jī)的智能熱水器系統(tǒng)設(shè)計(jì)11000字(論文)》_第3頁(yè)
《基于單片機(jī)的智能熱水器系統(tǒng)設(shè)計(jì)11000字(論文)》_第4頁(yè)
《基于單片機(jī)的智能熱水器系統(tǒng)設(shè)計(jì)11000字(論文)》_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

基于單片機(jī)的智能熱水器系統(tǒng)設(shè)計(jì)目錄TOC\o"1-3"\h\u1引言 11.1選題背景、目的及意義 11.2國(guó)內(nèi)外研究狀況和成果 11.3研究設(shè)計(jì) 32硬件系統(tǒng)設(shè)計(jì) 42.1方案設(shè)計(jì) 42.2單片機(jī) 52.3硬件系統(tǒng)設(shè)計(jì) 62.3.1電源 62.3.2按鍵模塊 72.3.3顯示模塊 72.3.4聲光報(bào)警模塊 92.3.5溫度傳感器模塊 92.3.6水位檢測(cè)模塊 102.3.7繼電器模塊 102.3.8紅外遙控模塊 113軟件系統(tǒng)設(shè)計(jì) 113.1主程序流程圖 123.2顯示模塊程序設(shè)計(jì) 123.3按鍵設(shè)置程序設(shè)計(jì) 133.4溫度傳感器模塊程序設(shè)計(jì) 153.5水位檢測(cè)模塊程序設(shè)計(jì) 163.6紅外模塊程序設(shè)計(jì) 174系統(tǒng)調(diào)試 184.1硬件系統(tǒng)調(diào)試 184.2軟件編程調(diào)試 18結(jié)論 20參考文獻(xiàn) 22附錄A 23附錄B 241引言1.1選題背景、目的及意義根據(jù)大數(shù)據(jù)統(tǒng)計(jì),電熱水器是我國(guó)居民用戶用的最多的熱水器,大概能夠占到熱水器總份額的60%以上;隨著時(shí)代的發(fā)展,以前流行的燃?xì)鉄崴饕呀?jīng)慢慢退出了人們的視線,總份額從原來(lái)的50%降到了20%以下;近些年流行的太陽(yáng)能熱水器較其他熱水器來(lái)說(shuō)在性?xún)r(jià)比方面有著很大的優(yōu)勢(shì),盡管它在安裝的時(shí)候非常的麻煩,而且現(xiàn)在發(fā)展趨勢(shì)很快,占有率已經(jīng)達(dá)到了20%。舊式的燃?xì)鉄崴髟谑褂眠^(guò)程中會(huì)產(chǎn)生一些氣體污染,當(dāng)前居民房的通風(fēng)效果并不是很良好,所以氣體需要很長(zhǎng)一段時(shí)間才能被排泄干凈。盡管現(xiàn)在的太陽(yáng)能熱水就不會(huì)在室內(nèi)產(chǎn)生污染,但是它在一些惡劣天氣下就無(wú)法正常使用,比如陰雨天、雪雨天等,使用具有局限性,不能滿足用戶隨時(shí)的需求。然而電熱水器就不會(huì),它的使用方法簡(jiǎn)單,而且容易安裝,占用的空間很小,不會(huì)受到空間的限制,也不受環(huán)境和天氣的影響。性?xún)r(jià)比和安全性也是用戶選擇電熱水器主要的原因之一。早已踏入進(jìn)入21世紀(jì),科技發(fā)展突飛猛進(jìn),家用的電熱水器也越來(lái)越有科技含量。當(dāng)今的電熱水器已經(jīng)不再是我們想象中的那么簡(jiǎn)單了,而是包含了多種高科技的智能化家用電器。時(shí)代的進(jìn)步伴隨著人們生活水平的提高,大家都越來(lái)越想提高自己的生活質(zhì)量,讓自己的生活變得更方便更舒心,所以越來(lái)越多的用戶選擇了智能的電熱水器。因?yàn)殡S著時(shí)代的進(jìn)步,大家越來(lái)越想提高自己的生活質(zhì)量,想讓自己的生活更方便更舒心,使用的家電更加便捷更加人性化。就因如此,我設(shè)計(jì)了智能熱水器控制系統(tǒng),采用了STC89C52單片機(jī)作為熱水器系統(tǒng)的主控芯片。從而實(shí)現(xiàn)檢測(cè)當(dāng)前水溫,自動(dòng)加熱等多種功能。在使用過(guò)程中,用戶可以通過(guò)顯示屏來(lái)查看當(dāng)前的水溫信息,水量信息和時(shí)間等信息,如果水溫過(guò)熱或者水量過(guò)少并且會(huì)有報(bào)警提示音。本熱水供應(yīng)控制系統(tǒng)成本較低,實(shí)用性很強(qiáng),而且溫度檢測(cè)非常的精確,安全可靠。1.2國(guó)內(nèi)外研究狀況和成果據(jù)調(diào)查了解,電熱水器中最為關(guān)鍵的部件就是它的內(nèi)膽,如果在使用中內(nèi)膽出現(xiàn)了故障,那就意味著電熱水器已經(jīng)老化,需要及時(shí)的更換內(nèi)膽,不然會(huì)出現(xiàn)安全隱患。相對(duì)于其它家用電器來(lái)說(shuō),電熱水器是不需要經(jīng)常更新?lián)Q代的,及時(shí)的清理內(nèi)膽可以有效的延長(zhǎng)內(nèi)膽的使用壽命。考慮到用戶對(duì)電熱水器安全和價(jià)格方面的要求,生產(chǎn)廠商需要對(duì)電熱水器的質(zhì)量有非常高的保障。微波爐的核心部件是磁控管,洗衣機(jī)的核心是波輪。電熱水器最為關(guān)鍵的部件就是內(nèi)膽,從某種意義上說(shuō),內(nèi)膽的質(zhì)量代表了電熱水器的質(zhì)量。市面上的內(nèi)膽有著極其復(fù)雜的制作工藝,但是廠商最終的目的都是相同的,內(nèi)膽要具有最基本的保溫性、耐壓性,還要不能生銹,不會(huì)有水垢而且還不能滲水。生活中常見(jiàn)的內(nèi)膽有鈦金內(nèi)膽、晶硅內(nèi)膽、不銹鋼內(nèi)膽、搪瓷內(nèi)膽等,晶硅內(nèi)膽易在高溫水中緩慢溶解,不銹鋼內(nèi)膽的缺點(diǎn)就是焊縫處容易腐蝕,搪瓷內(nèi)膽需要定期的更換,所以日常生活中常用的內(nèi)膽就是鈦金內(nèi)膽,性能非常的穩(wěn)定。用戶除了對(duì)電熱水器質(zhì)量上的要求,對(duì)于更為人性化的智能技術(shù)也越來(lái)越得到了用戶需要,電熱水器的發(fā)展趨勢(shì)一定會(huì)向智能化走去。以前的老式燃?xì)鉄崴饔凶詣?dòng)控制溫度的功能,如果在使用中出現(xiàn)停氣的狀況,熱水器會(huì)立即自動(dòng)關(guān)機(jī),水溫超過(guò)一定的度數(shù)熱水器還會(huì)自動(dòng)排壓,即使在使用的過(guò)程中關(guān)機(jī)了,熱水器還會(huì)存有一定量的熱水。智能的點(diǎn)熱水器有著更加節(jié)能,更加人性化的優(yōu)勢(shì),它會(huì)根據(jù)用戶事先設(shè)置好的溫度提前加熱,用戶可以隨時(shí)有足夠的熱水使用。熱水器還有保溫的功能和省電模式,它會(huì)在空閑時(shí)間依據(jù)用戶設(shè)置的水溫從而得出最佳的溫度,能夠有效的減輕電熱水器的內(nèi)外溫度差。很多的家用電器在節(jié)能方面已經(jīng)取得了很大的突破,例如變頻空調(diào),小功率洗衣機(jī)等等。像電熱水器這樣的大電量家電也需要有著非常好的節(jié)能技術(shù)。傳統(tǒng)的老式電熱水器很難在自身有很大的改進(jìn)和突破,但是不斷的增加更多的功能,把握住人性化的需求,會(huì)是一個(gè)正確的方向??萍嫉倪M(jìn)步就意味著產(chǎn)品的進(jìn)步,落后就要被淘汰。像Ariston,Smith,Haier,Midea等多家廠商正急于推出新技術(shù),例如Haier公司,它生產(chǎn)的電熱水器內(nèi)置了智能人工語(yǔ)音,用戶可以根據(jù)自己需求的模式直接和熱水器對(duì)話,熱水器會(huì)自動(dòng)識(shí)別語(yǔ)音然后啟動(dòng)相應(yīng)的模式,這種只有在智能手機(jī)上出現(xiàn)的語(yǔ)音功能在電熱水器行業(yè)是非常罕見(jiàn)的。西門(mén)子智能電熱水器是國(guó)外非常著名的熱水器品牌之一,它使用的是德國(guó)新興的電腦恒溫控制技術(shù),使得水流恒定而且水溫保持均勻。德國(guó)西門(mén)子是全球電子電氣領(lǐng)域知名的企業(yè)。在防止漏電技術(shù)方面西門(mén)子取得了很大的成就,而且獲得了德國(guó)ELCB安全認(rèn)證。它不僅僅擁有防漏電的裝置,還能在工作時(shí)自動(dòng)檢測(cè)電流,從而獲取防漏電裝置是否在正常運(yùn)行。SakuraIMES智能系統(tǒng)和傳統(tǒng)的智能系統(tǒng)不一樣,它擁有更加人性化的工作模式,它會(huì)根據(jù)用戶一段時(shí)間內(nèi)使用電熱水器的習(xí)慣計(jì)算出相關(guān)數(shù)據(jù),用最節(jié)能的省電模式為用戶提供不間斷的熱水。在工作中如果遇到斷電情況,熱水器會(huì)自動(dòng)保存數(shù)據(jù),而且會(huì)存留一定量的熱水,讓用戶不會(huì)有斷電沒(méi)水的苦惱。獨(dú)一無(wú)二的節(jié)能保溫模式,在省電模式下會(huì)根據(jù)水溫和環(huán)境的變換自動(dòng)切換到不同的保溫溫度,實(shí)現(xiàn)了人性化的操作,省心又省力,節(jié)約又環(huán)保。西門(mén)子智能電熱水器還有多種工作模式,用戶可自定義選擇加熱時(shí)間,也可以設(shè)置記憶加熱、自動(dòng)加熱等加熱模式。西門(mén)子電熱水器最特別的功能就是一鍵清洗,熱水器使用舊了難免會(huì)有水垢存留在熱水器內(nèi)部,這個(gè)功能就很好解決了這一問(wèn)題,用戶使用的更加放心。就中國(guó)的具體情況而言,其研究成果略遜于國(guó)外,但學(xué)者們也在努力尋求技術(shù)突破。例如Haier就在這方面取得了很大的突破,它發(fā)布了一款擁有智能記憶和自動(dòng)計(jì)算的多功能電熱水器,它配有全新的銀海象A6智能專(zhuān)家系統(tǒng)。智能記憶是A6智能系統(tǒng)的最大特色。它擁有獨(dú)特的自動(dòng)記憶功能,即使電源突然關(guān)閉,系統(tǒng)也會(huì)自動(dòng)保存以前設(shè)定的參數(shù),使得用戶原來(lái)設(shè)置好的數(shù)據(jù)在來(lái)電時(shí)自動(dòng)加載,用戶不需要再重新設(shè)置參數(shù),節(jié)省了用戶的操作。自動(dòng)計(jì)算是A6智能系統(tǒng)的又一大優(yōu)勢(shì)。市面上常見(jiàn)的電熱水器很多都有預(yù)約加熱的功能,但是非常多的用戶不知道需要加熱多久的時(shí)間。A6智能系統(tǒng)就很好的解決了這一問(wèn)題,A6智能系統(tǒng)會(huì)根據(jù)內(nèi)部數(shù)據(jù)的分析,從而計(jì)算出熱水器需要加熱的時(shí)間,用戶在使用熱水器之前它就已經(jīng)完成了加熱,不需要等待,不會(huì)耽誤用戶的使用。除了擁有智能記憶和自動(dòng)計(jì)算之外,A6智能系統(tǒng)的外表也是非常美觀的。外表細(xì)膩,擁有超大的OLED觸摸屏,獨(dú)特的文字顯示清晰可見(jiàn)。A6還有遠(yuǎn)程WIFI技術(shù),熱水器連接上家里的無(wú)線網(wǎng)后,用戶可以遠(yuǎn)程用手機(jī)來(lái)操控?zé)崴?,設(shè)置各種參數(shù)。而且A6的占用體積小,不會(huì)受到空間的限制。A6智能系統(tǒng)同時(shí)也有節(jié)能省電模式。在省電模式下會(huì)根據(jù)水溫和環(huán)境的變換自動(dòng)切換到不同的保溫溫度,從而使熱水器內(nèi)的熱水減少熱量的丟失,實(shí)現(xiàn)了人性化的操作,省心又省力,節(jié)約又環(huán)保。。1.3研究設(shè)計(jì)STC89C52單片機(jī)的抗干擾能力不足,因此需要單獨(dú)設(shè)計(jì)和制造電源。單片機(jī)的硬件部分由按鍵和顯示設(shè)備的MCU的最小系統(tǒng)組成。因?yàn)镾TC89C52單片機(jī)受限,所以選用頻率為12M的晶振和容量為30μF的電容器來(lái)組成振蕩電路。通過(guò)按鍵進(jìn)行掃描功能,執(zhí)行設(shè)置,添加,刪除和確定等功能??刂葡到y(tǒng)可通過(guò)紅外遙控器來(lái)遠(yuǎn)程控制電熱水器的運(yùn)行,使得系統(tǒng)控制更加的便捷。熱水器控制系統(tǒng)在運(yùn)行時(shí),首先會(huì)自動(dòng)檢測(cè)按鍵功能,判斷是否有按鍵操作,然后會(huì)通過(guò)檢測(cè)加減功能的按鍵來(lái)控制溫度的范圍和水量的范圍。主板上的功能按鍵在紅外遙控上也可以實(shí)現(xiàn)。啟動(dòng)系統(tǒng)程序,溫度傳感器先會(huì)自動(dòng)檢測(cè)水溫,如果測(cè)量的水溫低于設(shè)置好的溫度,會(huì)啟動(dòng)加熱棒開(kāi)始加熱。如果檢測(cè)到水溫超過(guò)設(shè)置的最高溫度,停止加熱。還可以設(shè)置時(shí)間,進(jìn)行定時(shí)加熱。水位傳感器檢測(cè)水量,水量低于下水位傳感器時(shí),會(huì)有報(bào)警提示,并開(kāi)始加水,水量超過(guò)設(shè)置的最大值是,停止加水。。2硬件系統(tǒng)設(shè)計(jì)2.1方案設(shè)計(jì)本系統(tǒng)采用STC89C52作為控制核心來(lái)設(shè)計(jì)熱水供應(yīng)系統(tǒng),系統(tǒng)功能設(shè)計(jì)需要滿足以下要求:①接入220V電源進(jìn)入系統(tǒng)。②液晶顯示屏顯示當(dāng)前水溫,水量信息和時(shí)間信息。③溫度傳感器檢測(cè)水溫信息,低于設(shè)定溫度時(shí)開(kāi)始加熱,高于設(shè)定溫度時(shí)停止加熱。④水位傳感器檢測(cè)水量信息,低于水量最低值開(kāi)始加水,高于水量最大值停止加水。⑤系統(tǒng)配有5個(gè)按鍵:增加鍵、減少鍵、設(shè)置鍵、確定鍵和最小系統(tǒng)的復(fù)位按鍵。⑥配有紅外遙控器,通過(guò)遙控器可以實(shí)現(xiàn)遠(yuǎn)程控制。STC89C52單片機(jī)的功率損耗低,可控能力強(qiáng),而且成本相對(duì)其他芯片較低,所以STC89C52的應(yīng)用非常的廣泛。系統(tǒng)設(shè)計(jì)框圖如圖2-1所示。圖2-1系統(tǒng)設(shè)計(jì)圖根據(jù)系統(tǒng)的設(shè)計(jì)要求,如果系統(tǒng)出現(xiàn)復(fù)位會(huì)按照系統(tǒng)默認(rèn)的參數(shù)進(jìn)行工作;系統(tǒng)會(huì)首先檢測(cè)是否有按鍵按下,如果沒(méi)有設(shè)置操作,就會(huì)按照系統(tǒng)設(shè)置的溫度進(jìn)行加熱;如果已按下設(shè)置按鍵,則開(kāi)始設(shè)置溫度范圍并進(jìn)行加熱功能。然后系統(tǒng)會(huì)繼續(xù)檢測(cè)溫度按鍵,如果沒(méi)有檢測(cè)到設(shè)置按鍵的操作,系統(tǒng)會(huì)按照默認(rèn)的溫度值進(jìn)行工作。2.2單片機(jī)(1)STC89C52主要性能參數(shù):eq\o\ac(○,1)兼容51系列單片機(jī)的所有指令eq\o\ac(○,2)8K字節(jié)系統(tǒng)可編程Flash存儲(chǔ)器eq\o\ac(○,3)1000次擦寫(xiě)周期eq\o\ac(○,4)3.3-5.5V的工作電壓范圍eq\o\ac(○,5)全靜態(tài)工作模式:0Hz-33MHzeq\o\ac(○,6)三級(jí)程序加密鎖eq\o\ac(○,7)128×8字節(jié)內(nèi)部RAMeq\o\ac(○,8)32個(gè)可編程I/O口線eq\o\ac(○,9)2個(gè)16位定時(shí)/計(jì)數(shù)器eq\o\ac(○,10)6個(gè)中斷源eq\o\ac(○,11)全雙工串行UART通道eq\o\ac(○,12)低功耗空閑和掉電模式eq\o\ac(○,13)看門(mén)狗(WDT)及雙數(shù)據(jù)指針eq\o\ac(○,14)掉電標(biāo)識(shí)和快速編程特性eq\o\ac(○,15)靈活的在線系統(tǒng)編程(ISP字節(jié)或頁(yè)寫(xiě)模式)(2)STC89C52最小系統(tǒng)介紹:①?gòu)?fù)位電路:復(fù)位電路的作用就是復(fù)位,把所有數(shù)據(jù)全部從0位置重新開(kāi)始運(yùn)行;如果單片機(jī)在運(yùn)行過(guò)程中,會(huì)發(fā)生一些不可預(yù)知的故障,比如執(zhí)行任務(wù)突然死機(jī)或者運(yùn)行失敗導(dǎo)致無(wú)法進(jìn)行下一步操作,一直停留在不工作的狀態(tài),這個(gè)時(shí)候就可以通過(guò)復(fù)位按鍵來(lái)解決問(wèn)題,直接就可以把單片機(jī)恢復(fù)到默認(rèn)的狀態(tài)。所以單片機(jī)有復(fù)位電路是很有必要的。②時(shí)鐘電路:?jiǎn)纹瑱C(jī)內(nèi)部所有的工作都是按照時(shí)間順序來(lái)運(yùn)行的,都以時(shí)鐘為基礎(chǔ)。首先延時(shí)的過(guò)程需要依靠時(shí)鐘,其次是計(jì)數(shù)器。時(shí)鐘電路控制著整個(gè)系統(tǒng)有條不紊的運(yùn)行,起到至關(guān)重要的作用。單片機(jī)最小系統(tǒng)如圖2-2所示:圖2-2單片機(jī)最小系統(tǒng)2.3硬件系統(tǒng)設(shè)計(jì)本熱水器系統(tǒng)用STC89C52作為主控芯片,硬件系統(tǒng)主要包括兩部分:電源電路和熱水器控制系統(tǒng)電路。系統(tǒng)包括顯示電路、聲光報(bào)警電路、水溫檢測(cè)電路、水位檢測(cè)電路、紅外接收電路等硬件設(shè)計(jì)電路。2.3.1電源本熱水器控制系統(tǒng)采用的是線性穩(wěn)壓電源,它的輸出電壓比輸入電壓要低,而且反應(yīng)速度快,工作狀態(tài)下產(chǎn)生的噪聲低。穩(wěn)壓電源設(shè)計(jì)框圖如圖2-3所示:圖2-3穩(wěn)壓電源(1)電源變壓器電源變壓器的作用是:當(dāng)前的電壓太小,無(wú)法滿足電子設(shè)備的需要時(shí),電源變壓器能夠改變電壓的大小,從而滿足電子設(shè)備的需要。而且在信號(hào)耦合方面有著至關(guān)重要的作用。(2)整流濾波電路整流電路就是把電路中的交流轉(zhuǎn)換成直流。不管什么樣的電路,只要是轉(zhuǎn)換成直流的,都需要用整流電路來(lái)實(shí)現(xiàn)。橋式整流電路只要增加兩個(gè)二極管,把它們連接成“橋”式結(jié)構(gòu),就有了全波整流電路的好處,而且在一定程度上大大降低了自身的缺點(diǎn)。(3)穩(wěn)壓電路穩(wěn)壓電路的作用是當(dāng)電路內(nèi)的交流電源電壓產(chǎn)生變化時(shí),能夠保證輸出穩(wěn)定的直流電壓。常見(jiàn)的三端穩(wěn)壓器主要有兩種,一種輸出固定電壓,另一種輸出可調(diào)電壓,這兩個(gè)穩(wěn)壓器都是采用串聯(lián)方式形成電路。三段穩(wěn)壓器器只有三個(gè)端口,所以連接的器件很少,相對(duì)其它穩(wěn)壓器來(lái)說(shuō)價(jià)格較低,所以得到了大家的廣泛使用。2.3.2按鍵模塊每個(gè)按鍵都是單獨(dú)連接在單片機(jī)的一個(gè)端口上,所以系統(tǒng)的按鍵都是相互獨(dú)立的。系統(tǒng)一共有五個(gè)功能按鍵:設(shè)置按鍵,增加鍵,減少鍵,確定鍵和單獨(dú)的復(fù)位按鍵。按鍵按下會(huì)輸入低電平,斷開(kāi)則是高電平。如果在端口的電路上有上拉電阻,那么外部電路上就不可以再接其他的上拉電阻了。系統(tǒng)在掃描按鍵功能時(shí),先按順序檢測(cè)單片機(jī)上每一個(gè)端口的按鍵,檢測(cè)到有低電平輸入時(shí),就表明這個(gè)端口上的按鍵已經(jīng)按下,系統(tǒng)就會(huì)執(zhí)行這個(gè)按鍵上的功能。按鍵如圖2-4所示。圖2-4穩(wěn)壓電源2.3.3顯示模塊本系統(tǒng)的顯示屏是采用1602LCD液晶屏,液晶屏上主要顯示當(dāng)前的水溫,水量和時(shí)間信息。1602LCD液晶屏的功率消耗低,體積小便于安裝,成本也相對(duì)較低,所以應(yīng)用非常的廣泛。1602LCD是一種常見(jiàn)顯示屏,它可以顯示兩行文字內(nèi)容,每行可以有16個(gè)文字。當(dāng)液晶通電后,它的內(nèi)部排序就會(huì)變得有規(guī)律,這樣一來(lái)光線就非常容易穿過(guò)它,就是因?yàn)槔昧艘壕н@一個(gè)特性,再加上電壓的控制,液晶顯示屏就可以顯示畫(huà)面了。①1602LCD主要技術(shù)參數(shù)如下:(1)顯示容量:16×2個(gè)字符(2)芯片工作電壓:4.5-5.5V(3)工作電流:2mA(5V)(4)模塊最佳工作電壓:5V(5)字符尺寸:2.95×4.35(W×H)mm②引腳功能說(shuō)明如表2-1所示。表2-1引腳接口說(shuō)明表編號(hào)符號(hào)引腳說(shuō)明編號(hào)符號(hào)引腳說(shuō)明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫(xiě)選擇13D6數(shù)據(jù)6E使能信號(hào)14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極③1602LCD的指令說(shuō)明及時(shí)序如表2-2所示。表2-2指令說(shuō)明序號(hào)指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標(biāo)返回000000001*3置輸入模式00000001I/DS4顯示開(kāi)/關(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寫(xiě)數(shù)到CGRAM或DDRAM)10要寫(xiě)的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容1602LCD讀操作時(shí)序如圖2-5所示。圖2-5讀操作時(shí)序圖1602LCD寫(xiě)操作時(shí)序如圖2-6所示。圖2-6寫(xiě)操作時(shí)序圖主控芯片和1602LCD接口電路設(shè)計(jì)圖如圖2-7所示。圖2-7單片機(jī)與LCD1602接口電路2.3.4聲光報(bào)警模塊本系統(tǒng)的聲光報(bào)警電路由蜂鳴器模塊和三個(gè)指示燈組成。系統(tǒng)工作過(guò)程中,會(huì)有相應(yīng)的指示燈顯示:紅燈亮起表示缺水或者溫度過(guò)高,黃燈亮起表示系統(tǒng)正處于加熱狀態(tài),綠燈亮起表示系統(tǒng)正處于加水狀態(tài)。系統(tǒng)的蜂鳴器主要是報(bào)警提示的作用,當(dāng)系統(tǒng)檢測(cè)水溫超過(guò)設(shè)置的最大值或水量低于設(shè)置的最小值時(shí),蜂鳴器會(huì)報(bào)警,然后相應(yīng)的指示燈亮起。報(bào)警電路設(shè)計(jì)圖如2-8所示。圖2-8報(bào)警電路2.3.5溫度傳感器模塊本系統(tǒng)采用的是DS18B20溫度傳感器,用來(lái)實(shí)時(shí)監(jiān)測(cè)水溫,它連接在單片機(jī)的P2.2口上。溫度傳感器的1腳接地,2腳是信號(hào)的輸入/輸出端,3腳是接電源。當(dāng)溫度傳感器在進(jìn)行測(cè)量工作時(shí),當(dāng)檢測(cè)到水溫超過(guò)設(shè)置的最大值,會(huì)將溫度過(guò)高的信息傳給主控芯片,然后蜂鳴器報(bào)警提示;如果檢測(cè)的水溫低于設(shè)最小值時(shí),加熱棒通電開(kāi)始加熱,同時(shí)加熱指示燈會(huì)亮起。溫度傳感器的原理圖如圖2-9所示。圖2-9溫度檢測(cè)電路2.3.6水位檢測(cè)模塊水位檢測(cè)電路由水位傳感器模塊和電壓比較器共同組成。將兩個(gè)水位傳感器放置在合適的位置,一個(gè)在放在高處(水量最大值),一個(gè)放在低處(水量最小值)。傳感器檢測(cè)到水位的信息后,發(fā)送數(shù)據(jù)給主控芯片。當(dāng)?shù)吞幍乃粋鞲衅鳈z測(cè)到水時(shí),說(shuō)明水量在最小值出,啟動(dòng)開(kāi)始加水;當(dāng)高處的水位傳感器檢測(cè)到水時(shí),說(shuō)明水量已經(jīng)到達(dá)最大值,停止加水。水位檢測(cè)電路如圖2-10所示。圖2-10水位檢測(cè)電路2.3.7繼電器模塊電磁繼電器主要在電路中起到控制的作用,可以把它當(dāng)做一個(gè)開(kāi)關(guān),繼電器通電后,它內(nèi)部的線圈就會(huì)產(chǎn)生磁場(chǎng),銜鐵就會(huì)因?yàn)榇艌?chǎng)效應(yīng)被拉動(dòng),從而形成了一個(gè)導(dǎo)通的電路。它的工作原理是利用電產(chǎn)生磁效應(yīng)使得繼電器的輸出端打開(kāi)或者吸合。繼電器可以外接負(fù)載,通電從而帶動(dòng)外接硬件的工作。系統(tǒng)采用了兩個(gè)繼電器,分別外接了抽水泵和加熱棒。系統(tǒng)檢測(cè)到相關(guān)數(shù)據(jù)來(lái)控制繼電器的吸合和打開(kāi)狀態(tài),實(shí)現(xiàn)加水或者加熱的功能。電磁繼電器原理圖如圖2-11所示。圖2-11電磁繼電器原理圖2.3.8紅外遙控模塊硬件系統(tǒng)內(nèi)包含了一個(gè)紅外接收器,外部遙控器內(nèi)部是紅外發(fā)射器。紅外遙控器采用的是一個(gè)三極管,按下遙控的按鈕,三極管會(huì)發(fā)出紅外信號(hào)。硬件部分的紅外接收頭采用是二極管,在接收到遙控器發(fā)出的信號(hào)后,會(huì)把紅外信號(hào)轉(zhuǎn)換成電信號(hào),然后送至主控芯片,從而就可以通過(guò)遙控機(jī)來(lái)遠(yuǎn)程控制系統(tǒng)。但是紅外遠(yuǎn)程控制的距離有限,一般在10米以?xún)?nèi)是可以的,超過(guò)控制距離紅外遙控也就沒(méi)有存在的意義了。紅外接收電路如圖2-12所示。圖2-12紅外接收電路3軟件系統(tǒng)設(shè)計(jì)系統(tǒng)軟件程序的設(shè)計(jì)是整個(gè)系統(tǒng)最重要的部分,系統(tǒng)能否正常穩(wěn)定的工作是依賴(lài)著軟件程序的設(shè)計(jì),設(shè)計(jì)一個(gè)完整無(wú)誤的系統(tǒng)程序,才能利用好硬件系統(tǒng),從而實(shí)現(xiàn)自己的功能設(shè)計(jì)要求。軟件系統(tǒng)的功能設(shè)計(jì)主要有以下幾條:(1)進(jìn)入系統(tǒng)后,通過(guò)液晶屏可以查詢(xún)到當(dāng)前的水溫,水量和時(shí)間信息。如果當(dāng)前水溫低于設(shè)置溫度時(shí),繼電器啟動(dòng)使得加熱棒通電,然后開(kāi)始加熱;如果水溫加熱到了設(shè)置溫度時(shí),繼電器停止工作使得加熱棒斷電停止加熱,警示燈亮起,并且會(huì)有報(bào)警聲音;當(dāng)水量少于用戶設(shè)置最少水量時(shí),繼電器啟動(dòng),抽水泵通電開(kāi)始加水;當(dāng)水量超過(guò)用戶設(shè)置最多水量時(shí),停止加水,同時(shí)警示燈亮起,也伴隨著報(bào)警提示音。(2)按下主板上的設(shè)置按鍵后,顯示屏?xí)霈F(xiàn)四個(gè)功能的選擇,一是溫度的上下限;二是水量的上下限;三是系統(tǒng)當(dāng)前的時(shí)間;四是定時(shí)加熱的時(shí)間。系統(tǒng)軟件程序設(shè)計(jì)主要介紹了顯示屏的程序設(shè)計(jì)、按鍵檢測(cè)程序設(shè)計(jì)、溫度傳感器程序設(shè)計(jì)、水位傳感器程序設(shè)計(jì)、紅外接收程序設(shè)計(jì)等。3.1主程序流程圖圖3-1系統(tǒng)程序流程圖系統(tǒng)流程主要分成三部分,首先接入220V電源進(jìn)入系統(tǒng);然后是水位高低的判斷;其次是水溫高低的判斷;根據(jù)系統(tǒng)程序的設(shè)計(jì),綜合水溫和水量的關(guān)系,實(shí)現(xiàn)加熱加水等主要功能。3.2顯示模塊程序設(shè)計(jì)顯示模塊流程圖如圖3-2所示。圖3-2顯示模塊流程圖LCD1602的三個(gè)接口分別連接在單片機(jī)的三個(gè)端口上:sbitD1=P1^0;sbitD2=P1^1;sbitD3=P1^2;LCD1602在程序的設(shè)計(jì)上非常的復(fù)雜,首先屏幕要進(jìn)行初始化,內(nèi)部判斷LCD是否處在忙碌的狀態(tài),然后才能使之顯示的位置,最終顯示出字符,也是顯示模塊的基礎(chǔ)。系統(tǒng)的LCD1602主要顯示的是水溫,水量和時(shí)間的信息。例如時(shí)間顯示程序如下:#include<reg52.h>unsignedchardisplay_d[]={0x5b,0x3f,0x06,0x07,0x06,0x5b,0x3f,0x66};unsignedchardisplay_w[]={0x5c,0x4b,0x2f,0xf5,0xfe,0xf1,0x4c,0x4a};voiddelay(){unsignedcharn=200;while(n--);}voidmain(){unsignedchari;while(1){for(i=0;i<8;i++){P0=display_d[i];P2=display_w[i];delay();P0=0x00;}}3.3按鍵設(shè)置程序設(shè)計(jì)按鍵檢測(cè)流程圖如圖3-3所示。圖3-3按鍵檢測(cè)流程圖系統(tǒng)一共有五個(gè)功能按鍵:設(shè)置按鍵,增加鍵,減少鍵,確定鍵和單獨(dú)的復(fù)位按鍵。前面四個(gè)按鍵的四個(gè)接口分別連接在單片機(jī)的四個(gè)端口上:sbitKey1=P1^4; //設(shè)置鍵sbitKey2=P1^5; //增加鍵sbitKey3=P1^6; //減少鍵sbitKey4=P1^7; //確定鍵在按鍵按下的過(guò)程中由于彈性的原因,按鍵不會(huì)立刻起到作用,因此在按下的瞬間屏幕和LED燈會(huì)有抖動(dòng)和閃爍的現(xiàn)象。為了解決按鍵產(chǎn)生屏幕和LED燈抖動(dòng)閃爍的現(xiàn)象,需要先按鍵編程的過(guò)程中添加延時(shí)函數(shù),也可以在按鍵電路上添加電容達(dá)到硬件消抖的方法。一般為了節(jié)約成本常常采用編程來(lái)消抖。按鍵延時(shí)函數(shù)如下:voiddelay7ms(uintn){ucharO,P,Q,R;for(R=n;R>0;R--)for(Q=1;Q>0;Q--)for(P=123;P>0;P--)for(O=13;O>0;O--);}voidmain(){uinti;if(K1==0){delay1ms(8);if(K1==0){for(i=0;i<100;i++){if(K1==0)i=0;}按鍵按下后執(zhí)行的功能}}3.4溫度傳感器模塊程序設(shè)計(jì)溫度檢測(cè)模塊流程圖如圖3-4所示。圖3-4溫度檢測(cè)流程圖溫度傳感器的接口定義在單片機(jī)P2.2端口上:sbitWENDU=P2^2;溫度檢測(cè)的程序設(shè)計(jì)首先也是進(jìn)行初始化,然后檢測(cè)溫度產(chǎn)生數(shù)據(jù)信息。傳感器在檢測(cè)到溫度信息后,會(huì)把數(shù)據(jù)發(fā)送給主控芯片,從而運(yùn)行程序功能。溫度傳感器的程序設(shè)計(jì)主要是對(duì)溫度的檢測(cè),當(dāng)檢測(cè)到水溫超過(guò)設(shè)置的最高溫度時(shí),會(huì)將溫度過(guò)高的信息傳給主控芯片,然后蜂鳴器報(bào)警提示,加熱停止;如果檢測(cè)的水溫低于設(shè)置的最低溫度時(shí),加熱指示燈亮起,通電開(kāi)始加熱。讀取溫度部分程序如下:unsignedintDUWENDU(void){unsignedcharM=0;unsignedcharN=0;unsignedintL=0;floatLL=0;Init_DS18B20();XIEOneNi(0xb3);XIEOneNi(0x51);Init_DS18B20();XIEOneNi(0xb3);XIEOneNi(0xcf);M=DUOneNi();N=DUOneNi();L=N;L<<=8;L=L|M;LL=L*0.074;L=LL*10+0.5;return(L);}voidCE_WENDU(void){c=DUWENDU()-8;//獲取當(dāng)前溫度w=c/10;if(w<0){w=0;}//顯示溫度最大值if(w>99){w=99;}}3.5水位檢測(cè)模塊程序設(shè)計(jì)水量檢測(cè)程序如圖3-5所示。圖3-5水位檢測(cè)流程圖水位檢測(cè)模塊兩個(gè)元器件的接口分別連接在單片機(jī)的P3.6和P3.7端口上:sbitSW=P3^6sbitSW=P3^7根據(jù)水位傳感器和電壓比較器測(cè)量得水位信息,并發(fā)送到主控芯片執(zhí)行程序功能。當(dāng)檢測(cè)到水量低于設(shè)置的水位下限時(shí)停止加熱,抽水泵加水;到達(dá)水位上限時(shí)停止加水,開(kāi)始加熱。水位檢測(cè)部分程序如下;while(1){ CE_wendu();if(Mode==0){ Display_1602(c,ds,sx,xx);if((xiao==1)&&(da==1)){shao=1;shui=0;csb=1;}else{shao=0;}if((shang==0)&&(xiao==0)){shui=1;if(flag_BJ==0)flag_BJ=1;}if((shang==0)&&(xiao==1))//{shui=1;csb=1;FMQ=0;shao=1;}if(flag==0){if((w<duandian)&&(w>bjx)){if(w>=sx){csb=1;if(flag_BJ==0)flag_BJ=1;}elseif((w<xx)&&(shao==0)) {jrb=0;if(flag_BJ==0)flag_BJ=1;}else{flag_BJ=0;flag_guan=1;}duankai=wendu+5;bjx=wendu-5;}}}Key();Alam();}}3.6紅外模塊程序設(shè)計(jì)紅外接收器模塊的接口連接在單片機(jī)的P3.3口:sbitHONGWAI=P3^3。遙控器的按鍵操作和主板上按鍵的相同,都是五個(gè)功能按鍵:設(shè)置、加、減、確定和復(fù)位。在距離系統(tǒng)10米內(nèi)按下紅外遙控器的開(kāi)關(guān)按鈕,遙控器就會(huì)發(fā)出信號(hào),紅外接收頭收到信號(hào)后,就可以通過(guò)遙控器控制系統(tǒng)了。二極管紅外接收頭需要連接在單片機(jī)的中斷端口上。紅外解碼定時(shí)器程序如下://外部中斷解碼程序_外部中斷0voidintersvr1(void)interrupt2using1{TR0=1;Ah=TH0*256+TL0;TH0=0;TL0=0;if((Ah>zuixiao)&&(Ah<zuida)){m=0;f=1;return;}if(f==1){if(Tc>Inum1&&Ah<Inum3){Im[m/8]=Im[m/8]>>1|0x4f;m++;}if(Ah>Inum2&&Ah<Inum1){Im[m/8]=Im[m/8]>>3;m++;//}if(m==57){m=0;f=0;if(Im[3]==~Im[4]){IrOK=1;TR0=0;}elsezhengqeu=0;//}}}4系統(tǒng)調(diào)試調(diào)試檢測(cè)過(guò)程是整個(gè)系統(tǒng)設(shè)計(jì)非常重要,不可缺少的一步。在設(shè)計(jì)過(guò)程中難免會(huì)出現(xiàn)問(wèn)題,不管是硬件電路設(shè)計(jì)的問(wèn)題還是軟件程序編寫(xiě)的問(wèn)題,都需要在后期的調(diào)試中一步一步地去更改。4.1硬件系統(tǒng)調(diào)試(1)單片機(jī)最小系統(tǒng):在調(diào)試最小系統(tǒng)中晶振部分時(shí),需要用到示波器,來(lái)觀察晶振在起振過(guò)程產(chǎn)生的波形,看輸出的波形是否穩(wěn)定,如果有雜波,可能是最小系統(tǒng)中出現(xiàn)問(wèn)題,然后用萬(wàn)用表去排查。(2)顯示模塊:給顯示屏通電,各部分模塊工作的數(shù)據(jù)信息就會(huì)發(fā)送至顯示屏,通過(guò)顯示屏顯示出來(lái),如果沒(méi)有信息變化也可能是其他傳感器模塊的原因,也可能是顯示屏自身的原因,如果顯示屏沒(méi)有在剛開(kāi)始進(jìn)行初始化,就無(wú)法給顯示屏設(shè)置每行字符參數(shù)的設(shè)置,達(dá)不到顯示的效果。(3)溫度傳感器模塊:把溫度傳感器放入高溫水中,然后逐步加入冷水,觀察顯示屏溫度的信息是否發(fā)生變化。(4)水位傳感器模塊:兩個(gè)水位傳感器一高一低放置容器中,然后逐步向容器加水。水位達(dá)到下方的傳感器后,屏幕則會(huì)顯示水量信息,系統(tǒng)會(huì)繼續(xù)加水;水量達(dá)到上方傳感器位置,則水量達(dá)到最大值,系統(tǒng)報(bào)警,屏幕水量信息更新,并停止加水。(5)繼電器驅(qū)動(dòng)模塊:通電觀察繼電器是否可以帶動(dòng)外接的加熱棒和抽水泵正常運(yùn)行。(6)紅外遙控模塊:在系統(tǒng)兩三米處使用遙控器,按下遙控器的按鈕,看系統(tǒng)是否有根據(jù)按鈕的指令正常運(yùn)行,顯示屏的信息是否可以根據(jù)按鈕來(lái)設(shè)置。如果沒(méi)有反應(yīng)則有可能是紅外遙控沒(méi)有發(fā)出紅外信號(hào),也可能是紅外接收頭的二極管故障。4.2軟件編程調(diào)試在軟件編程的過(guò)程中,會(huì)遇到很多錯(cuò)誤的顯示,比如在頭部函數(shù)中沒(méi)有定義一些關(guān)鍵字符,所以在下面的編程會(huì)出現(xiàn)沒(méi)有定義的提示信息;像顯示屏,LED燈等一些模塊,在調(diào)試過(guò)程中會(huì)出現(xiàn)閃爍的情況,這就說(shuō)明在這部分程序編寫(xiě)的過(guò)程中沒(méi)有進(jìn)行按鍵的消抖,必須要在程序中添加延時(shí)函數(shù)進(jìn)行消抖功能;程序確認(rèn)無(wú)誤后把系統(tǒng)程序?qū)雴纹瑱C(jī),系統(tǒng)沒(méi)有正常運(yùn)行,這就要去查看在導(dǎo)入前參數(shù)的選擇和自己的芯片是否一致,引腳的選擇和外接的硬件是否一致等。結(jié)論經(jīng)過(guò)一段時(shí)間的畢業(yè)設(shè)計(jì),基本完成了總體的設(shè)計(jì)。在設(shè)計(jì)過(guò)程中也遇到了一些問(wèn)題,系統(tǒng)的部分功能也存在不足。在剛開(kāi)始構(gòu)想畢業(yè)設(shè)計(jì)課題的時(shí)候,很長(zhǎng)一段時(shí)間沒(méi)有思路,期間經(jīng)常和同學(xué)老師一起交流,查閱了很多的資料,最終才確定了畢業(yè)設(shè)計(jì)課題。確定了課題后,首先設(shè)計(jì)的是系統(tǒng)的大概功能,然后選取合適的元器件。剛開(kāi)始自己設(shè)計(jì)了幾個(gè)功能方案,在向老師匯報(bào)時(shí),覺(jué)得有些單調(diào),又加了其他功能進(jìn)去。硬件設(shè)計(jì)的時(shí)候存在不少問(wèn)題,在剛開(kāi)始元器件布局的時(shí)候,分布不合理,相關(guān)的元器件安放的比較遠(yuǎn),在布線的時(shí)候比較麻煩而且容易出錯(cuò),特別是在設(shè)計(jì)單片機(jī)最小系統(tǒng)電路的過(guò)程中,由于相關(guān)元器件布局的問(wèn)題,出現(xiàn)了焊接錯(cuò)誤,改正起來(lái)特別麻煩。那些小電流電路和大電流電路,一定要盡可能的離單片機(jī)邏輯電路和存儲(chǔ)電路遠(yuǎn)一點(diǎn),這樣電路工作過(guò)程中才不會(huì)出現(xiàn)不穩(wěn)定的狀況。硬件電路基本完成后還要進(jìn)行測(cè)試,會(huì)用到萬(wàn)用表,把萬(wàn)用表兩極放在每個(gè)模塊電路的兩端,觀察是否導(dǎo)通。檢測(cè)過(guò)程中發(fā)現(xiàn)了不少虛焊的焊點(diǎn),經(jīng)過(guò)后期修改得以完成。軟件的設(shè)計(jì)上遇到的問(wèn)題很多,編寫(xiě)每個(gè)模塊的程序,還要把每個(gè)部分的程序串聯(lián)起來(lái)實(shí)現(xiàn)完整的功能。在調(diào)試按鍵程序的過(guò)程中,發(fā)現(xiàn)按下按鍵后顯示屏剛開(kāi)始有會(huì)有閃爍的現(xiàn)象,剛開(kāi)始并不是很懂,經(jīng)過(guò)翻書(shū)查閱資料了解到,在按鍵按下的過(guò)程中由于彈性的原因,按鍵不會(huì)立刻起到作用,因此在按下的瞬間會(huì)有抖動(dòng)的現(xiàn)象。所以在按鍵程序編寫(xiě)的時(shí)候需要添加延時(shí)函數(shù),進(jìn)行按鍵的消抖。這樣就解決了閃爍的問(wèn)題。還發(fā)現(xiàn)了中斷函數(shù)調(diào)用其他函數(shù)出現(xiàn)了不執(zhí)行的問(wèn)題。中斷函數(shù)里有延遲、死循環(huán)、運(yùn)行時(shí)間過(guò)長(zhǎng)是不對(duì)的,正確的做法應(yīng)該是快速處理中斷任務(wù),如果任務(wù)繁重,應(yīng)該僅僅在中斷中做個(gè)標(biāo)記,然后在主循環(huán)中讀取標(biāo)記并處理。參考文獻(xiàn)[1]吳國(guó)經(jīng).單片機(jī)應(yīng)用技術(shù)[M].北京:中國(guó)電力出版社,2015.[2]張振榮.MCS-52單片機(jī)原理及實(shí)用技術(shù)[M].北京:人民郵電出版社,2012.[3]沈紅衛(wèi).基于單片機(jī)的智能系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[M].北京:電子工業(yè)出版社,2015.[4]肖紅兵.跟我學(xué)用單片機(jī)[M].北京:北京航空航天大學(xué)出版社,2016.[5]李光飛.單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,2016.[6]張波.基于STC89C52RC單片機(jī)最小系統(tǒng)的設(shè)計(jì)[J].機(jī)床與液壓,2017.[7]徐惠民,安德寧.單片機(jī)微型計(jì)算機(jī)原理接口與應(yīng)用[M].北京:北京郵電大學(xué)出版社,2018.[8]張友德,陳章龍.MC68HC08系列單片機(jī)原理與應(yīng)用[J].上海:復(fù)旦大學(xué)出版社,2010.[9]楊寧.單片機(jī)與控制技術(shù)[M].北京:北京航空航天大學(xué)出版社,2018.[10]李建事,陳剛.家用電器單片機(jī)控制系統(tǒng)的制作與檢修[M].上海:上海交通大學(xué)出版社,2016.[11]樓然苗.51系列單片機(jī)設(shè)計(jì)實(shí)例[M].北京:北京航空航天大學(xué)出版社,2016.[12]付家才.單片機(jī)控制工程實(shí)踐技術(shù)[M].北京:化學(xué)工業(yè)出版社,2016.

附錄A原理圖

附錄B程序代碼//程序頭函數(shù)#include<reg52.h>//顯示函數(shù)#include<display.h>//宏定義#defineuintunsignedint#defineucharunsignedchar//管腳聲明sbitjdq=P1^0; //加熱繼電器sbitshui=P1^3;//加水繼電器sbitFeng=P2^6;//蜂鳴器//按鍵sbitKey1=P1^4; //設(shè)置sbitKey2=P1^5; //加sbitKey3=P1^6; //減sbitKey4=P1^7; //確定 sbitshang=P3^7;//上限sbitxia=P3^6;//下限sbitDQ=P2^2; //定義DS18B20總線I/Osignedcharw,bj,bjx,bjd; //溫度值全局變量ucharc; //溫度值全局變量bitbdataflag=0,flag_BJ,flag_off=1,que;//時(shí)間計(jì)算#defineImax14000//此處為晶振為11.0592時(shí)的取值,#defineImin8000//如用其它頻率的晶振時(shí),#defineInum1145//要改變相應(yīng)的取值。#defineInum2700#defineInum33000//解碼變量unsignedcharIm[4]={0x00,0x00,0x00,0x00};//全局變量ucharf;unsignedcharm,Tc;unsignedcharIrOK;//設(shè)置變量ucharxx=29;//下限ucharsx=35;//上限intds=0;ucharMode=0;voiddelay(uintz){ uinti,j; for(i=0;i<z;i++) for(j=0;j<121;j++);}*溫度工作程序/*****延時(shí)子程序*****/voidDelay_DS18B20(intnum){while(num--);}/*****初始化DS18B20*****/voidInit_DS18B20(void){unsignedcharx=0;DQ=1;//DQ復(fù)位Delay_DS18B20(8);//稍做延時(shí)DQ=0;//單片機(jī)將DQ拉低Delay_DS18B20(8);//精確延時(shí),大于480usDQ=1;//拉高總線Delay_DS18B20(14);x=DQ;//稍做延時(shí)后,如果x=0則初始化成功,x=1則初始化失敗Delay_DS18B20(20);}/*****讀一個(gè)字節(jié)*****/unsignedcharReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//給脈沖信號(hào)dat>>=1;DQ=1;//給脈沖信號(hào)if(DQ)dat|=0x80;Delay_DS18B20(4);}return(dat);}/*****寫(xiě)一個(gè)字節(jié)*****/voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=1;DQ=dat&0x10;Delay_DS18B20(5);DQ=0;dat>>=1;}}/*****讀取溫度*****/unsignedintReadTemperature(void){unsignedchara=0;unsignedcharb=0;unsignedintt=0;floattt=0;Init_DS18B20();WriteOneChar(0xC1);//跳過(guò)讀序號(hào)列號(hào)的操作WriteOneChar(0x44);//啟動(dòng)溫度轉(zhuǎn)換Init_DS18B20();WriteOneChar(0xC1);//跳過(guò)讀序號(hào)列號(hào)的操作WriteOneChar(0xBE);//讀取溫度寄存器a=ReadOneChar();//讀低8位b=ReadOneChar();//讀高8位t=b;t<<=8;t=t|a;tt=t*0.00625;t=tt*10+0.5;//放大10倍輸出并四舍五入return(t);}/*****讀取溫度*****/voidcheck_wendu(void){ c=ReadTemperature()-5; //獲取溫度值并減去DS18B20的溫漂誤差 w=c/10; //計(jì)算得到整數(shù)位 if(w<0){w=0;} //設(shè)置溫度顯示上限 if(w>99){w=99;} //設(shè)置溫度顯示上限}按鍵工作程序voidKey(){ //模式選擇 if(Key1==0) { while(Key1==0); Feng=0; Mode++; Display_wd(); if(Mode==4) { Mode=1; Feng=1; } write_com(0x38);//屏幕初始化 write_com(0x0d);//打開(kāi)顯示無(wú)光標(biāo)光標(biāo)閃爍 write_com(0x06);//當(dāng)讀或?qū)懸粋€(gè)字符是指針后一一位 switch(Mode) { case1: { write_com(0x80+15);//位置 Feng=1; break; } case2: { write_com(0x80+0x40+5);//位置 Feng=1; break; } case3: { write_com(0x80+0x40+14);//位置 Feng=1; break; } } } if(Key2==0&&Mode!=0) { while(Key2==0); Feng=0; switch(Mode) { case1: { if(ds<999) { ds++; write_com(0x80+13); write_data('0'+ds/100); write_data('0'+ds/10%10); write_data('0'+ds%10); write_com(0x80+15);//位置 } Feng=1; break; } case2: { if(sx<99-1) { sx++; write_com(0x80+0x40+4); write_data('0'+sx/10%10); write_data('0'+sx%10); write_com(0x80+0x40+5);//位置 } Feng=1; break; } case3: { if(xx<sx-1) { xx++; write_com(0x80+0x40+13); write_data('0'+xx/10%10); write_data('0'+xx%10); write_com(0x80+0x40+14);//位置 } Feng=1; break; } } } if(Key3==0&&Mode!=0) { while(Key3==0); Feng=0; switch(Mode) { case1: { if(ds>0) { ds--; write_com(0x80+13); write_data('0'+ds/100); write_data('0'+ds/10%10); write_data('0'+ds%10); write_com(0x80+15);//位置 } Feng=1; break; } case2: { if(sx>xx+1) { sx--; write_com(0x80+0x40+4); write_data('0'+sx/10%10); write_data('0'+sx%10); write_com(0x80+0x40+5);//位置 } Feng=1; break; } case3: { if(xx>0) { xx--; write_com(0x80+0x40+13); write_data('0'+xx/10%10); write_data('0'+xx%10); write_com(0x80+0x40+14);//位置 } Feng=1; break; } } } if(Key4==0) { while(Key4==0); Feng=0; Mode=0; // write_com(0x38);//屏幕初始化 // write_com(0x0c);//打開(kāi)顯示無(wú)光標(biāo)無(wú)光標(biāo)閃爍 Init1602(); if(ds>0) { flag=1; jdq=1; TR1=1; } Feng=1; } if(IrOK==1) { if(Im[2]==0x0d) //遙控設(shè)置鍵 { Feng=0; Mode++; Display_wd(); if(Mode==4) { Mode=1; Feng=1; } write_com(0x38);//屏幕初始化 write_com(0x0d);//打開(kāi)顯示無(wú)光標(biāo)光標(biāo)閃爍 write_com(0x06);//當(dāng)讀或?qū)懸粋€(gè)字符是指針后一一位 switch(Mode) { case1: { write_com(0x80+15);//位置 Feng=1; break; } case2: { write_com(0x80+0x40+5);//位置 Feng=1; break; } case3: { write_com(0x80+0x40+14);//位置 Feng=1; break; } } } //+鍵 elseif(Im[2]==0x40) { if(Mode!=0) { Feng=0; switch(Mode) { case1: { if(ds<999) { ds++; write_com(0x80+13); write_data('0'+ds/100); write_data('0'+ds/10%10); write_data('0'+ds%10); write_com(0x80+15);//位置 } Feng=1; break; } case2: { if(sx<99-1) { sx++; write_com(0x80+0x40+4); write_data('0'+sx/10%10); write_data('0'+sx%10); write_com(0x80+0x40+5);//位置 } Feng=1; break; } case3: { if(xx<sx-1) { xx++; write_com(0x80+0x40+13); write_data('0'+xx/10%10); write_data('0'+xx%10); write_com(0x80+0x40+14);//位置 } Feng=1; break; } } } } //-鍵 elseif(Im[2]==0x19) { if(Mode!=0) { Feng=0; switch(Mode) { case1: { if(ds>0) { ds--; write_com(0x80+13); write_data('0'+ds/100); write_data('0'+ds/10%10); write_data('0'+ds%10); write_com(0x80+15);//位置 } Feng=1; break; } case2: { if(sx>xx+1) { sx--; write_com(0x80+0x40+4); write_data('0'+sx/10%10); write_data('0'+sx%10); write_com(0x80+0x40+5);//位置 } Feng=1; break; } case3: { if(xx>0) { xx--; write_com(0x80+0x40+13); write_data('0'+xx/10%10); write_data('0'+xx%10); write

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論