久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2876|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于單片機(jī)的數(shù)字溫度計(jì)《單片機(jī)應(yīng)用與仿真訓(xùn)練》設(shè)計(jì)報(bào)告

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:417927 發(fā)表于 2018-10-30 14:57 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
基于單片機(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)粘Ia(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í)間表
R1
R0
分辨率/位
溫度最大轉(zhuǎn)向時(shí)間
0
0
9
93.75
0
1
10
187.5
1
0
11
375
1
1
12
750

根據(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ì)的最大收獲。
  1. /******************************************************************
  2. 程序名稱:DS18B20溫度測(cè)量、報(bào)警系統(tǒng)
  3. 簡(jiǎn)要說明:DS18B20溫度計(jì),溫度測(cè)量范圍0~99.9攝氏度
  4.     可設(shè)置上限報(bào)警溫度、下限報(bào)警溫度
  5.     即高于上限值或者低于下限值時(shí)蜂鳴器報(bào)警
  6.     默認(rèn)上限報(bào)警溫度為38℃、默認(rèn)下限報(bào)警溫度為5℃
  7.     報(bào)警值可設(shè)置范圍:最低上限報(bào)警值等于當(dāng)前下限報(bào)警值
  8.     最高下限報(bào)警值等于當(dāng)前上限報(bào)警值
  9.     將下限報(bào)警值調(diào)為0時(shí)為關(guān)閉下限報(bào)警功能   
  10. ******************************************************************/
  11. #include <AT89X52.h>
  12. #include "DS18B20.h"  
  13. #define uint unsigned int
  14. #define uchar unsigned char   //宏定義
  15. #define SET  P3_1    //定義調(diào)整鍵
  16. #define DEC  P3_2    //定義減少鍵
  17. #define ADD  P3_3    //定義增加鍵
  18. #define BEEP P3_7    //定義蜂鳴器
  19. bit shanshuo_st;    //閃爍間隔標(biāo)志
  20. bit beep_st;     //蜂鳴器間隔標(biāo)志
  21. sbit DIAN = P0^7;        //小數(shù)點(diǎn)
  22. uchar x=0;      //計(jì)數(shù)器
  23. signed char m;     //溫度值全局變量
  24. uchar n;      //溫度值全局變量
  25. uchar set_st=0;     //狀態(tài)標(biāo)志
  26. signed char shangxian=38;  //上限報(bào)警溫度,默認(rèn)值為38
  27. signed char xiaxian=5;   //下限報(bào)警溫度,默認(rèn)值為5
  28. uchar code  LEDData[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
  29. unsigned int ReadTemperature(void);

  30. /*****延時(shí)子程序*****/
  31. void Delay(uint num)
  32. {
  33. while( --num );
  34. }

  35. /*****初始化定時(shí)器0*****/
  36. void InitTimer(void)
  37. {
  38.   TMOD=0x1;
  39.   TH0=0x3c;
  40.   TL0=0xb0;     //50ms(晶振12M)
  41. }

  42. /*****定時(shí)器0中斷服務(wù)程序*****/
  43. void timer0(void) interrupt 1 using 0
  44. {
  45. TH0=0x3c;
  46. TL0=0xb0;
  47. x++;
  48. }

  49. /*****外部中斷0服務(wù)程序*****/
  50. void int0(void) interrupt 0              using 1
  51. {

  52. EX0=0;      //關(guān)外部中斷0
  53. if(DEC==0&&set_st==1)
  54. {
  55.   shangxian--;
  56.   if(shangxian<xiaxian)shangxian=xiaxian;
  57. }
  58. else if(DEC==0&&set_st==2)
  59. {
  60.   xiaxian--;
  61.   if(xiaxian<0)xiaxian=0;
  62. }
  63. }

  64. /*****外部中斷1服務(wù)程序*****/
  65. void int1(void) interrupt 2 using 2
  66. {
  67. EX1=0;      //關(guān)外部中斷1
  68. if(ADD==0&&set_st==1)
  69. {
  70.   shangxian++;
  71.   if(shangxian>99)shangxian=99;
  72. }
  73. else if(ADD==0&&set_st==2)
  74. {
  75.   xiaxian++;
  76.   if(xiaxian>shangxian)xiaxian=shangxian;
  77. }
  78. }

  79. /*****讀取溫度*****/
  80. void check_wendu(void)
  81. {
  82. uint a,b,c;
  83. c=ReadTemperature()-5;  //獲取溫度值并減去DS18B20的溫漂誤差
  84. a=c/100;     //計(jì)算得到十位數(shù)字
  85. b=c/10-a*10;    //計(jì)算得到個(gè)位數(shù)字
  86. m=c/10;      //計(jì)算得到整數(shù)位
  87. n=c-a*100-b*10;    //計(jì)算得到小數(shù)位
  88. if(m<0){m=0;n=0;}   //設(shè)置溫度顯示上限
  89. if(m>99){m=99;n=9;}   //設(shè)置溫度顯示上限   
  90. }

  91. /*****顯示開機(jī)初始化等待畫面*****/
  92. Disp_init()   
  93. {
  94. P0 = 0x40;      //顯示-
  95. P2 = 0xf7;
  96. Delay(200);
  97. P2 = 0xfb;
  98. Delay(200);  
  99. P2 = 0xfd;
  100. Delay(200);
  101. P2 = 0xfe;
  102. Delay(200);

  103. P2 = 0xff;         //關(guān)閉顯示
  104. }

  105. /*****顯示溫度子程序*****/
  106. Disp_Temperature()     //顯示溫度
  107. {  P2 = 0xf7;
  108. P0 =0x39;      //顯示C

  109. Delay(300);
  110.   P2 = 0xfb;
  111. P0 =LEDData[n];    //顯示個(gè)位

  112. Delay(300);
  113.   P2 = 0xfd;
  114. P0 =LEDData[m%10];    //顯示十位
  115. DIAN = 1;         //顯示小數(shù)點(diǎn)

  116. Delay(300);
  117.   P2 = 0xfe;
  118. P0 =LEDData[m/10];    //顯示百位

  119. Delay(300);

  120. P2 = 0xff;         //關(guān)閉顯示
  121. }

  122. /*****顯示報(bào)警溫度子程序*****/
  123. Disp_alarm(uchar baojing)
  124. {P2 = 0xf7;
  125. P0 =0x39;      //顯示C

  126. Delay(200);
  127.   P2 = 0xfb;
  128. P0 =LEDData[baojing%10]; //顯示十位

  129. Delay(200);
  130. P2 = 0xfd;
  131. P0 =LEDData[baojing/10]; //顯示百位

  132. Delay(200);
  133.   P2 = 0xfe;
  134. if(set_st==1)P0 =0x76;
  135. else if(set_st==2)P0 =0x38; //上限H、下限L標(biāo)示

  136. Delay(200);

  137. P2 = 0xff;         //關(guān)閉顯示
  138. }

  139. /*****報(bào)警子程序*****/
  140. void Alarm()
  141. {                  unsigned int i;
  142.        {            
  143.                  for(i=0;i<200;i++)//喇叭發(fā)聲的時(shí)間循環(huán),改變大小可以改變發(fā)聲時(shí)間長(zhǎng)短
  144.           {
  145.           Delay(80);//參數(shù)決定發(fā)聲的頻率,估算值
  146.           BEEP=!BEEP;
  147.           }
  148.        BEEP=1;        //喇叭停止工作,間歇的時(shí)間,可更改
  149.        Delay(20000);

  150.                 }
  151. }

  152. /*****主函數(shù)*****/
  153. void main(void)
  154. {
  155.     uint z;
  156. InitTimer();    //初始化定時(shí)器
  157. EA=1;      //全局中斷開關(guān)
  158. TR0=1;
  159. ET0=1;      //開啟定時(shí)器0
  160. IT0=1;      
  161. IT1=1;
  162. check_wendu();
  163. check_wendu();
  164. for(z=0;z<300;z++)
  165. {
  166.   Disp_init();      
  167.   }
  168. while(1)
  169.   {
  170.   if(SET==0)
  171.   {
  172.    Delay(2000);
  173.    do{}while(SET==0);
  174.    set_st++;x=0;shanshuo_st=1;
  175.    if(set_st>2)set_st=0;
  176.   }
  177.   if(set_st==0)
  178.   {
  179.    EX0=0;    //關(guān)閉外部中斷0
  180.    EX1=0;    //關(guān)閉外部中斷1
  181.    check_wendu();

  182.    Disp_Temperature();

  183.   if(m>=shangxian)
  184.   P1_0=0;
  185.   else
  186.   P1_0=1;
  187.   if(m<xiaxian)
  188.   P1_1=0;
  189.   else
  190.   P1_1=1;
  191.   if((m>=shangxian)||(m<xiaxian))
  192.     {
  193.    Alarm();   //報(bào)警檢測(cè)
  194.    }
  195.   }
  196.   else if(set_st==1)
  197.   {
  198.    BEEP=1;    //關(guān)閉蜂鳴器
  199.    EX0=1;    //開啟外部中斷0
  200.    EX1=1;    //開啟外部中斷1
  201.    if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
  202.    if(shanshuo_st) {Disp_alarm(shangxian);}
  203.   }
  204.   else if(set_st==2)
  205.   {
  206.    BEEP=1;    //關(guān)閉蜂鳴器
  207.    EX0=1;    //開啟外部中斷0
  208.    EX1=1;    //開啟外部中斷1
  209.    if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
  210.    if(shanshuo_st) {Disp_alarm(xiaxian);}
  211.   }
  212.     }
  213. }
  214. /*****END**
復(fù)制代碼

附錄 2  系統(tǒng)原理圖

完整的Word格式文檔51黑下載地址:
基于單片機(jī)的數(shù)字溫度計(jì)課程設(shè)計(jì).doc (575 KB, 下載次數(shù): 30)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 美女久久| 国产伦精品一区二区三区高清 | 青草视频在线 | 精品久久久久香蕉网 | 日韩无| 国产精品影视在线观看 | 亚洲精品一区中文字幕乱码 | 日韩乱码av | 狠狠草视频 | 色婷婷久久久亚洲一区二区三区 | 精品国产乱码久久久久久丨区2区 | 日韩精品一区在线 | 亚洲免费婷婷 | 91久久夜色精品国产网站 | 超碰成人免费 | 亚洲欧美综合 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 国产毛片毛片 | 亚洲精品自拍 | 成人欧美一区二区三区在线观看 | 久久精品视频12 | 波多野吉衣在线播放 | 亚洲欧美在线一区 | 亚洲国产精品久久久久 | 中文字字幕一区二区三区四区五区 | 成人午夜免费视频 | 欧美性生活一区二区三区 | 欧美日韩在线一区 | 久久精品国产久精国产 | 国产美女h视频 | 亚洲三区视频 | 成人免费淫片aa视频免费 | 国产亚洲一区二区三区在线 | 精品国产91| 热re99久久精品国99热观看 | 亚洲乱码国产乱码精品精的特点 | 亚洲电影免费 | 九九热精品视频在线观看 | 成人视屏在线观看 | 伊人久久综合 | 韩日av在线|