基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
摘要
隨著現(xiàn)代信息技術(shù)的飛速發(fā)展和傳統(tǒng)工業(yè)改造的逐步實(shí)現(xiàn).能夠獨(dú)立工作的溫度檢測(cè)和顯示系統(tǒng)應(yīng)用于諸多領(lǐng)域。傳統(tǒng)的溫度檢測(cè)以熱敏電阻為溫度敏感元件。熱敏電阻的成本低,但需后續(xù)信號(hào)處理電路,而且可靠性相對(duì)較差,測(cè)溫準(zhǔn)確度低,檢測(cè)系統(tǒng)也有一定的誤差。與傳統(tǒng)的溫度計(jì)相比,這里設(shè)計(jì)的數(shù)字溫度計(jì)具有讀數(shù)方便,測(cè)溫范圍廣,測(cè)溫精確,數(shù)字顯示,適用范圍寬等特點(diǎn)。選用AT89S52型單片機(jī)作為主控制器件,DSl8B20作為測(cè)溫傳感器通過4位共陽極LED數(shù)碼管串口傳送數(shù)據(jù),實(shí)現(xiàn)溫度顯示。通過DSl8B20直接讀取被測(cè)溫度值,進(jìn)行數(shù)據(jù)轉(zhuǎn)換,該器件的物理化學(xué)性能穩(wěn)定,線性度較好,在0℃~100℃最大線性偏差小于0.1℃。該器件可直接向單片機(jī)傳輸數(shù)字信號(hào),便于單片機(jī)處理及控制。另外,該溫度計(jì)還能直接采用測(cè)溫器件測(cè)量溫度,從而簡(jiǎn)化數(shù)據(jù)傳輸與處理過程。
目錄
1 概述 4
1.1課題名稱 4
1.2課題要求4
1.3設(shè)計(jì)的目的意義4
2 系統(tǒng)總體方案及硬件設(shè)計(jì) 5
2.1單片機(jī)的選擇5
2.2溫度傳感器的介紹6
2.3溫度傳感器與單片機(jī)的連接8
2.4復(fù)位信號(hào)及外部復(fù)位電路8
2.5單片機(jī)與報(bào)警電路9
2.6顯示電路9
3 軟件設(shè)計(jì) 10
4 Proteus軟件仿真 12
4.1 仿真圖 12
4.2仿真結(jié)果分析13
5 總結(jié)體會(huì) 14
參考文獻(xiàn) 15
附錄 1 程序源代碼 15
附錄 2 系統(tǒng)原理圖23
1概述 1.1課題名稱 基于單片機(jī)的數(shù)字溫度計(jì)的設(shè)計(jì) 1.2課題要求 1)基本范圍-50℃~110℃ 2)精度誤差小于0.5℃ 3)LED數(shù)碼直讀顯示 4)可以設(shè)定溫度的上下限報(bào)警功能 1.3設(shè)計(jì)目的和意義 溫度數(shù)我們?nèi)粘Ia(chǎn)和生活中實(shí)時(shí)在接觸到的物理量,但是它是看不到的,僅憑感覺只能感覺到大概的溫度值,傳統(tǒng)的指針式的溫度計(jì)雖然能指示溫度,但是精度低,使用不夠方便,顯示不夠直觀,數(shù)字溫度計(jì)的出現(xiàn)可以讓人們直觀的了解自己想知道的溫度到底是多少度。 數(shù)字溫度計(jì)采用溫度敏感元件也就是溫度傳感器(如鉑電阻,熱電偶,半導(dǎo)體,熱敏電阻等),將溫度的變化轉(zhuǎn)換成電信號(hào)的變化,如電壓和電流的變化,溫度變化和電信號(hào)的變化有一定的關(guān)系,如線性關(guān)系,一定的曲線關(guān)系等,這個(gè)電信號(hào)可以使用模數(shù)轉(zhuǎn)換的電路即AD轉(zhuǎn)換電路將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),數(shù)字信號(hào)再送給處理單元,如單片機(jī)或者PC機(jī)等,處理單元經(jīng)過內(nèi)部的軟件計(jì)算將這個(gè)數(shù)字信號(hào)和溫度聯(lián)系起來,成為可以顯示出來的溫度數(shù)值,如25.0攝氏度,然后通過顯示單元,如LED,LCD或者電腦屏幕等顯示出來給人觀察。這樣就完成了數(shù)字溫度計(jì)的基本測(cè)溫功能。 數(shù)字溫度計(jì)根據(jù)使用的傳感器的不同,AD轉(zhuǎn)換電路,及處理單元的不同,它的精度,穩(wěn)定性,測(cè)溫范圍等都有區(qū)別,這就要根據(jù)實(shí)際情況選擇符合規(guī)格的數(shù)字溫度計(jì)。數(shù)字溫度計(jì)有手持式,盤裝式,及醫(yī)用的小體積的等等。 另外作為電氣工程及其自動(dòng)化的學(xué)生,通過基于單片機(jī)數(shù)字溫度計(jì)的設(shè)計(jì)可以提高自己理論聯(lián)系實(shí)際的能力,可以更好的掌握所學(xué)的專業(yè)理論只是,也培養(yǎng)了自己的動(dòng)手能力,同時(shí),也培養(yǎng)了信息搜集能力和分析問題解決問題的能力 2系統(tǒng)總體設(shè)計(jì)方案及硬件設(shè)計(jì) 作為對(duì)專業(yè)理論知識(shí)學(xué)習(xí)后的實(shí)踐環(huán)節(jié),我選擇了自行設(shè)計(jì)基于AT89S52單片機(jī)的數(shù)字溫度計(jì)。設(shè)計(jì)原理框圖如,圖 1。  圖 1 數(shù)字溫度計(jì)原理框圖 2.1 單片機(jī)的選擇 AT89S52是一種低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU和在系統(tǒng)可編程Flash,使得AT89S52在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。Protues仿真軟件中用AT89C51代替AT89S52,單片機(jī)小系統(tǒng)的電路圖如圖2所示。 圖2 單片機(jī)小系統(tǒng)電路 AT89S52主要性能 1、與MCS-51單片機(jī)產(chǎn)品兼容; 2、8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器; 3、1000次擦寫周期; 4、全靜態(tài)操作:0Hz-33MHz; 5、三級(jí)加密程序存儲(chǔ)器; 6、32個(gè)可編程I/O口線; 7、三個(gè)16位定時(shí)器/計(jì)數(shù)器; 8、六個(gè)中斷源; 9、全雙工UART串行通道; 10、低功耗空閑和掉電模式; 11、掉電后中斷可喚醒; 12、看門狗定時(shí)器; 13、雙數(shù)據(jù)指針; 14、掉電標(biāo)識(shí)符 。 2.2 溫度傳感器介紹DS18B20可以程序設(shè)定9~12位的分辨率,精度為±0.5°C。可選更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報(bào)警溫度存儲(chǔ)在EPROM中,掉電后依然保存。 圖3 溫度傳感器 引腳功能說明: NC :空引腳,懸空不使用; VDD :可選電源腳,電源電壓范圍3~5.5V。當(dāng)工作于寄生電源時(shí),此引腳必須接地。 DQ :數(shù)據(jù)輸入/輸出腳。漏極開路,常態(tài)下高電平。 GND :為電源地 DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。 光刻ROM中的64位序列號(hào)是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標(biāo)號(hào),接著的48位是該DS18B20自身的序列號(hào),最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。 DS18B20中的溫度傳感器可完成對(duì)溫度的測(cè)量,以12位轉(zhuǎn)化為例:用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號(hào)位。 這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0,這5位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。 DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的E2RAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。 暫存存儲(chǔ)器包含了8個(gè)連續(xù)字節(jié),前兩個(gè)字節(jié)是測(cè)得的溫度信息,第一個(gè)字節(jié)的內(nèi)容是溫度的低八位,第二個(gè)字節(jié)是溫度的高八位。第三個(gè)和第四個(gè)字節(jié)是TH、TL的易失性拷貝,第五個(gè)字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個(gè)字節(jié)的內(nèi)容在每一次上電復(fù)位時(shí)被刷新。第六、七、八個(gè)字節(jié)用于內(nèi)部計(jì)算。第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。 該字節(jié)各位的意義如下: TM R1 R0 1 1 1 1 1 低五位一直都是1 ,TM是測(cè)試模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動(dòng)。R1和R0用來設(shè)置分辨率,如表1所示:(DS18B20出廠時(shí)被設(shè)置為12位) 表1 DS18B20溫度轉(zhuǎn)換時(shí)間表
根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個(gè)步驟:每一次讀寫之前都要對(duì)DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號(hào)后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。 2.3 溫度傳感器與單片機(jī)的連接DS18B20采用外部電源供電方式,在外部電源供電方式下,DS18B20工作電源由VCC引腳接入,此時(shí)I/O線不需要強(qiáng)上拉,不存在電源電流不足的問題,可以保證轉(zhuǎn)換精度,同時(shí)在總線上理論可以掛接任意多個(gè)DS18B20傳感器,組成多點(diǎn)測(cè)溫系統(tǒng)。注意:在外部供電的方式下,DS18B20的GND引腳不能懸空 ,否則不能轉(zhuǎn)換溫度,讀取的溫度總是85℃。 圖4 DS18B20接線 2.4 復(fù)位信號(hào)及外部復(fù)位電路 該復(fù)位信號(hào)高電平有效,其有效時(shí)間應(yīng)持續(xù)24個(gè)振蕩脈沖周期即兩個(gè)機(jī)器周期以上。若使用頻率為12 MHz的晶體振蕩器,則復(fù)位信號(hào)持續(xù)時(shí)間應(yīng)超過2μs才完成復(fù)位操作。 圖 5 復(fù)位電路 2.5 單片機(jī)與報(bào)警電路報(bào)警電路分為兩部分,一部分是蜂鳴器聲音報(bào)警,另一部分是發(fā)光二極管放光報(bào)警。具體情況如下: 接通電源,兩個(gè)(紅色,黃色)發(fā)光二極管都不亮,當(dāng)溫度超過上線設(shè)定值(如38攝氏度)時(shí),紅色二極管亮,同時(shí)蜂鳴器也報(bào)警;當(dāng)溫度低于下限設(shè)定值時(shí)(如5攝氏度)時(shí),黃色二極管亮,同時(shí)蜂鳴器也開始報(bào)警。
圖6 蜂鳴器報(bào)警 圖7 發(fā)光二極管報(bào)警 2.6 顯示電路采用技術(shù)成熟的5461AS共陰4位數(shù)碼管 0.56英寸紅色。LED顯示分為靜態(tài)顯示和動(dòng)態(tài)顯示。這里采用靜態(tài)顯示,系統(tǒng)通過單片機(jī)的串行口來實(shí)現(xiàn)靜態(tài)顯示。串行口為方式零狀態(tài),即工作在移位寄存器方式,波特率為振蕩頻率的1/12。當(dāng)器件執(zhí)行任何一條將SBUF作為目的寄存器的命令時(shí),數(shù)據(jù)便開始從RXD端發(fā)送。在寫信號(hào)有效時(shí),相隔一個(gè)機(jī)器周期后發(fā)送控制端SEND有效,即允許RXD發(fā)送數(shù)據(jù),同時(shí)允許從TXD端輸出移位脈沖。圖8為顯示電路的連接圖。 圖 8 數(shù)碼顯示連接圖 3 軟件設(shè)計(jì) DSl8820的主要數(shù)據(jù)元件有:64位激光Lasered ROM,溫度靈敏元件和非易失性溫度告警觸發(fā)器TH和TL。DSBl820可以從單總線獲取電源,當(dāng)信號(hào)線為高電平時(shí),將能量貯存在內(nèi)部電容器中;當(dāng)單信號(hào)線為低電平時(shí),將該電源斷開,直到信號(hào)線變?yōu)楦唠娖街匦陆由霞纳?電容)電源為止。此外,還可外接5 V電源,給DSl8820供電。DSl8820的供電方式靈活,利用外接電源還可增加系統(tǒng)的穩(wěn)定性和可靠性。圖9為讀取數(shù)據(jù)流程圖。 圖9 讀取數(shù)據(jù)的流程圖 讀出溫度數(shù)據(jù)后,LOW的低四位為溫度的小數(shù)部分,可以精確到0.0625℃,LOW的高四位和HIGH的低四位為溫度的整數(shù)部分,HIGH的高四位全部為1表示負(fù)數(shù),全為0表示正數(shù)。所以先將數(shù)據(jù)提取出來,分為三個(gè)部分:小數(shù)部分、整數(shù)部分和符號(hào)部分。小數(shù)部分進(jìn)行四舍五入處理:大于0.5℃的話,向個(gè)位進(jìn)1;小于0.5℃的時(shí)候,舍去不要。當(dāng)數(shù)據(jù)是個(gè)負(fù)數(shù)的時(shí)候,顯示之前要進(jìn)行數(shù)據(jù)轉(zhuǎn)換,將其整數(shù)部分取反加一。還因?yàn)镈S18B20最低溫度只能為-55℃,所以可以將整數(shù)部分的最高位換成一個(gè)“-”,表示為負(fù)數(shù)。圖10為溫度數(shù)據(jù)處理程序的流程圖。 圖10 溫度數(shù)據(jù)處理流程圖
4Proteus軟件仿真 仿真過程相當(dāng)順利,需要注意原件的選取,尤其是數(shù)碼管顯示塊的共陰、共陽,還有就是電阻的選取,太大太小都會(huì)影響實(shí)驗(yàn)效果。在仿真中不存在焊接的問題,所以接線只要引腳接口正確就是沒問題的。另外就是程序的調(diào)試,相當(dāng)重要。 4.1 仿真圖
圖 11 當(dāng)溫度為上下限之間時(shí)的仿真情況  圖 12 溫度在溫度下限設(shè)定值以下的仿真圖  圖 13 溫度在溫度上限設(shè)定值以上的仿真圖
4.2仿真結(jié)果分析 溫度在上下限設(shè)定值范圍內(nèi)是,放光二極管都是不亮的,當(dāng)實(shí)際溫度值,低于設(shè)定下限時(shí),黃色放光二極管亮;當(dāng)實(shí)際溫度高于上限設(shè)定值時(shí),紅色發(fā)光二極管亮。 原因,通過程序控制P1.0(紅色放光二極管) P1.1(黃色發(fā)光二極管),度在上下限設(shè)定值范圍內(nèi)是,P1.0,P1.1都是低電平,故發(fā)光二極管不會(huì)亮,當(dāng)實(shí)際溫度值,低于設(shè)定下限時(shí),P1.0 為低電平P1.1為高電平,故黃色放光二極管亮;當(dāng)實(shí)際溫度高于上限設(shè)定值時(shí),P1.0為高電平P1.1為低電平,故紅色發(fā)光二極管亮。
5 總結(jié)與體會(huì)作為一名電氣工程及其自動(dòng)化大三學(xué)生,我覺得做單片機(jī)課程設(shè)計(jì)是很有意義的,而且也是必要的。在做這次課程設(shè)計(jì)的過程中,我感觸最深的當(dāng)屬查閱大量的設(shè)計(jì)資料了。為了讓自己的設(shè)計(jì)更加完善,查閱這方面的實(shí)際資料是十分必要的,也是必不可少的。 其次,在這次課程設(shè)計(jì)中,我們運(yùn)用了以前學(xué)過的專業(yè)課知識(shí),如:proteus仿真、C語言、模擬和數(shù)字電路知識(shí)等。雖然過去我從未獨(dú)立應(yīng)用過他們,但在學(xué)習(xí)的過程中帶著問題去學(xué)我發(fā)現(xiàn)效率很高,這是我做這次課程設(shè)計(jì)的又一收獲。 最后,要做好一個(gè)課程設(shè)計(jì),就必須做到:在設(shè)計(jì)程序之前,對(duì)所用單片機(jī)的內(nèi)部結(jié)構(gòu)有一個(gè)系統(tǒng)的了解,知道該單片機(jī)有哪些資源;要有一個(gè)清晰的思路和一個(gè)完整的軟件流程圖;在設(shè)計(jì)程序時(shí),不能妄想一次將整個(gè)程序設(shè)計(jì)好,反復(fù)修改、不斷改進(jìn)是程序設(shè)計(jì)的必經(jīng)之路;要養(yǎng)成注釋程序的好習(xí)慣,這樣為資料的保留和交流提供了方便;在設(shè)計(jì)中遇到的問題要記錄,以免下次遇到同樣的問題。 在這次的課程設(shè)計(jì)中,我真正的意識(shí)到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)單片機(jī)更是如此,程序只有在經(jīng)常寫與讀的過程中才能提高,這就是這次課程設(shè)計(jì)的最大收獲。 - /******************************************************************
- 程序名稱:DS18B20溫度測(cè)量、報(bào)警系統(tǒng)
- 簡(jiǎn)要說明:DS18B20溫度計(jì),溫度測(cè)量范圍0~99.9攝氏度
- 可設(shè)置上限報(bào)警溫度、下限報(bào)警溫度
- 即高于上限值或者低于下限值時(shí)蜂鳴器報(bào)警
- 默認(rèn)上限報(bào)警溫度為38℃、默認(rèn)下限報(bào)警溫度為5℃
- 報(bào)警值可設(shè)置范圍:最低上限報(bào)警值等于當(dāng)前下限報(bào)警值
- 最高下限報(bào)警值等于當(dāng)前上限報(bào)警值
- 將下限報(bào)警值調(diào)為0時(shí)為關(guān)閉下限報(bào)警功能
- ******************************************************************/
- #include <AT89X52.h>
- #include "DS18B20.h"
- #define uint unsigned int
- #define uchar unsigned char //宏定義
- #define SET P3_1 //定義調(diào)整鍵
- #define DEC P3_2 //定義減少鍵
- #define ADD P3_3 //定義增加鍵
- #define BEEP P3_7 //定義蜂鳴器
- bit shanshuo_st; //閃爍間隔標(biāo)志
- bit beep_st; //蜂鳴器間隔標(biāo)志
- sbit DIAN = P0^7; //小數(shù)點(diǎn)
- uchar x=0; //計(jì)數(shù)器
- signed char m; //溫度值全局變量
- uchar n; //溫度值全局變量
- uchar set_st=0; //狀態(tài)標(biāo)志
- signed char shangxian=38; //上限報(bào)警溫度,默認(rèn)值為38
- signed char xiaxian=5; //下限報(bào)警溫度,默認(rèn)值為5
- uchar code LEDData[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
- unsigned int ReadTemperature(void);
-
- /*****延時(shí)子程序*****/
- void Delay(uint num)
- {
- while( --num );
- }
-
- /*****初始化定時(shí)器0*****/
- void InitTimer(void)
- {
- TMOD=0x1;
- TH0=0x3c;
- TL0=0xb0; //50ms(晶振12M)
- }
-
- /*****定時(shí)器0中斷服務(wù)程序*****/
- void timer0(void) interrupt 1 using 0
- {
- TH0=0x3c;
- TL0=0xb0;
- x++;
- }
-
- /*****外部中斷0服務(wù)程序*****/
- void int0(void) interrupt 0 using 1
- {
-
- EX0=0; //關(guān)外部中斷0
- if(DEC==0&&set_st==1)
- {
- shangxian--;
- if(shangxian<xiaxian)shangxian=xiaxian;
- }
- else if(DEC==0&&set_st==2)
- {
- xiaxian--;
- if(xiaxian<0)xiaxian=0;
- }
- }
-
- /*****外部中斷1服務(wù)程序*****/
- void int1(void) interrupt 2 using 2
- {
- EX1=0; //關(guān)外部中斷1
- if(ADD==0&&set_st==1)
- {
- shangxian++;
- if(shangxian>99)shangxian=99;
- }
- else if(ADD==0&&set_st==2)
- {
- xiaxian++;
- if(xiaxian>shangxian)xiaxian=shangxian;
- }
- }
-
- /*****讀取溫度*****/
- void check_wendu(void)
- {
- uint a,b,c;
- c=ReadTemperature()-5; //獲取溫度值并減去DS18B20的溫漂誤差
- a=c/100; //計(jì)算得到十位數(shù)字
- b=c/10-a*10; //計(jì)算得到個(gè)位數(shù)字
- m=c/10; //計(jì)算得到整數(shù)位
- n=c-a*100-b*10; //計(jì)算得到小數(shù)位
- if(m<0){m=0;n=0;} //設(shè)置溫度顯示上限
- if(m>99){m=99;n=9;} //設(shè)置溫度顯示上限
- }
-
- /*****顯示開機(jī)初始化等待畫面*****/
- Disp_init()
- {
- P0 = 0x40; //顯示-
- P2 = 0xf7;
- Delay(200);
- P2 = 0xfb;
- Delay(200);
- P2 = 0xfd;
- Delay(200);
- P2 = 0xfe;
- Delay(200);
-
- P2 = 0xff; //關(guān)閉顯示
- }
-
- /*****顯示溫度子程序*****/
- Disp_Temperature() //顯示溫度
- { P2 = 0xf7;
- P0 =0x39; //顯示C
-
- Delay(300);
- P2 = 0xfb;
- P0 =LEDData[n]; //顯示個(gè)位
-
- Delay(300);
- P2 = 0xfd;
- P0 =LEDData[m%10]; //顯示十位
- DIAN = 1; //顯示小數(shù)點(diǎn)
-
- Delay(300);
- P2 = 0xfe;
- P0 =LEDData[m/10]; //顯示百位
-
- Delay(300);
-
- P2 = 0xff; //關(guān)閉顯示
- }
-
- /*****顯示報(bào)警溫度子程序*****/
- Disp_alarm(uchar baojing)
- {P2 = 0xf7;
- P0 =0x39; //顯示C
-
- Delay(200);
- P2 = 0xfb;
- P0 =LEDData[baojing%10]; //顯示十位
-
- Delay(200);
- P2 = 0xfd;
- P0 =LEDData[baojing/10]; //顯示百位
-
- Delay(200);
- P2 = 0xfe;
- if(set_st==1)P0 =0x76;
- else if(set_st==2)P0 =0x38; //上限H、下限L標(biāo)示
-
- Delay(200);
-
- P2 = 0xff; //關(guān)閉顯示
- }
-
- /*****報(bào)警子程序*****/
- void Alarm()
- { unsigned int i;
- {
- for(i=0;i<200;i++)//喇叭發(fā)聲的時(shí)間循環(huán),改變大小可以改變發(fā)聲時(shí)間長(zhǎng)短
- {
- Delay(80);//參數(shù)決定發(fā)聲的頻率,估算值
- BEEP=!BEEP;
- }
- BEEP=1; //喇叭停止工作,間歇的時(shí)間,可更改
- Delay(20000);
-
- }
- }
-
- /*****主函數(shù)*****/
- void main(void)
- {
- uint z;
- InitTimer(); //初始化定時(shí)器
- EA=1; //全局中斷開關(guān)
- TR0=1;
- ET0=1; //開啟定時(shí)器0
- IT0=1;
- IT1=1;
- check_wendu();
- check_wendu();
- for(z=0;z<300;z++)
- {
- Disp_init();
- }
- while(1)
- {
- if(SET==0)
- {
- Delay(2000);
- do{}while(SET==0);
- set_st++;x=0;shanshuo_st=1;
- if(set_st>2)set_st=0;
- }
- if(set_st==0)
- {
- EX0=0; //關(guān)閉外部中斷0
- EX1=0; //關(guān)閉外部中斷1
- check_wendu();
-
- Disp_Temperature();
-
- if(m>=shangxian)
- P1_0=0;
- else
- P1_0=1;
- if(m<xiaxian)
- P1_1=0;
- else
- P1_1=1;
- if((m>=shangxian)||(m<xiaxian))
- {
- Alarm(); //報(bào)警檢測(cè)
- }
- }
- else if(set_st==1)
- {
- BEEP=1; //關(guān)閉蜂鳴器
- EX0=1; //開啟外部中斷0
- EX1=1; //開啟外部中斷1
- if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
- if(shanshuo_st) {Disp_alarm(shangxian);}
- }
- else if(set_st==2)
- {
- BEEP=1; //關(guān)閉蜂鳴器
- EX0=1; //開啟外部中斷0
- EX1=1; //開啟外部中斷1
- if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
- if(shanshuo_st) {Disp_alarm(xiaxian);}
- }
- }
- }
- /*****END**
復(fù)制代碼
附錄 2 系統(tǒng)原理圖
完整的Word格式文檔51黑下載地址:
基于單片機(jī)的數(shù)字溫度計(jì)課程設(shè)計(jì).doc
(575 KB, 下載次數(shù): 30)
2018-10-30 14:56 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|