基于51單片機(jī)的數(shù)字溫度計(jì)_第1頁
基于51單片機(jī)的數(shù)字溫度計(jì)_第2頁
基于51單片機(jī)的數(shù)字溫度計(jì)_第3頁
基于51單片機(jī)的數(shù)字溫度計(jì)_第4頁
基于51單片機(jī)的數(shù)字溫度計(jì)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、. 硬件 課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告課 題: 數(shù)字溫度計(jì)班 級(jí): 作 者: 學(xué) 號(hào):指導(dǎo)老師: 課設(shè)評(píng)價(jià):課設(shè)成績:.目錄一需求分析1二概要設(shè)計(jì)1三硬件電路設(shè)計(jì)3四系統(tǒng)軟件設(shè)計(jì)5五軟件仿真8六實(shí)際連接與調(diào)試9七本次課設(shè)的收獲與感受11附錄(程序源代碼)12一 需求分析功能要求: 測(cè)量環(huán)境溫度,采用接觸式溫度傳感器測(cè)量,用數(shù)碼管顯示溫度值。 設(shè)計(jì)要求:(一)功能要求 (1) 由4位數(shù)碼管顯示當(dāng)前溫度。 (2) 具備報(bào)警,報(bào)警門限通過鍵盤設(shè)置。 (3) 精度為0.5。(二)畫出參考的電路原理圖(三)畫出主程序及子程序流程圖、畫出MCS51內(nèi)部RAM分配圖,并進(jìn)行適當(dāng)?shù)亟忉?。(四)寫出?shí)現(xiàn)的程序及實(shí)現(xiàn)過程。并

2、進(jìn)行適當(dāng)?shù)亟忉屨f明。二 概要設(shè)計(jì)(一)方案選擇 由于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測(cè)溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測(cè)溫度顯示出來,這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。進(jìn)而考慮到用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。(二)系統(tǒng)框圖 該系統(tǒng)可分為以下七個(gè)模塊:(1) 控制器:采用單片機(jī)STC89C52對(duì)采集的溫度數(shù)據(jù)進(jìn)行處理;

3、(2) 溫度采集:采用DS18B20直接向控制器傳輸12位二進(jìn)制數(shù)據(jù);(3) 溫度顯示:采用了4個(gè)LED共陰極七段數(shù)碼管顯示實(shí)際溫度值;(4) 門限設(shè)置:主要實(shí)現(xiàn)模式切換及上下門限溫度的調(diào)節(jié);(5) 報(bào)警裝置:采用發(fā)光二極管進(jìn)行報(bào)警,低于低門限或高于高門限均使其發(fā)光;(6) 復(fù)位電路:對(duì)整個(gè)系統(tǒng)進(jìn)行復(fù)位;(7) 時(shí)鐘振蕩模塊:為整個(gè)系統(tǒng)提供統(tǒng)一的時(shí)鐘周期。(三)重要器件及其相關(guān)參數(shù)(1)單片機(jī)STC89C52P0.0P0.7:通用I/O引腳或數(shù)據(jù)低8位地址總線復(fù)用地址;P1.0P1.7:通用I/O引腳;P2.0P2.7:通用I/O引腳或高8位地址總線復(fù)用地址;P3.0P3.7:通用I/O引腳或

4、第二功能引腳(RxD、TxD、INT0、INT1、T0、T1、WR、RD);XTAL1、XTAL2:外接晶振輸入端;RST/Vpd:復(fù)位信號(hào)輸入引腳/備用電源輸入引腳;Vcc:接+5V電源;Vss:地端。(2)DS18B20(a)通過單線總線端口訪問 DS1820 的協(xié)議如下: 初始化 ROM 操作命令 存儲(chǔ)器操作命令 執(zhí)行/數(shù)據(jù)DS1820 需要嚴(yán)格的協(xié)議以確保數(shù)據(jù)的完整性。協(xié)議包括幾種單線信號(hào)類型:復(fù)位脈沖、存在脈沖、寫0、寫1、讀0 和讀1。所有這些信號(hào),除存在脈沖外,都是由總線控制器發(fā)出的。和 DS1820 間的任何通訊都需要以初始化序列開始,初始化序列見圖11。一個(gè)復(fù)位脈沖跟著一個(gè)存

5、在脈沖表明DS1820 已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)(適當(dāng)?shù)腞OM 命令和存儲(chǔ)器操作命令)(b)當(dāng)總線上只有一個(gè)器件時(shí),DS18B20讀溫度的流程為:復(fù)位 發(fā)0CCH SKIP ROM命令 發(fā)44H開始轉(zhuǎn)換命令 延時(shí) 復(fù)位 發(fā)0CCHSKIP ROM命令 發(fā)0BEH讀存儲(chǔ)器命令 連續(xù)讀出兩個(gè)字節(jié)數(shù)據(jù)(即溫度) 結(jié)束。 Convert T 44h這條命令啟動(dòng)一次溫度轉(zhuǎn)換而無需其他數(shù)據(jù)。溫度轉(zhuǎn)換命令被執(zhí)行,而后DS1820 保持等待狀態(tài)。如果總線控制器在這條命令之后跟著發(fā)出讀時(shí)間隙,而DS1820 又忙于做時(shí)間轉(zhuǎn)換的話,DS1820 將在總線上輸出“0”,若溫度轉(zhuǎn)換完成,則輸出“1”。如果使用寄生電源

6、,總線控制器必須在發(fā)出這條命令后立即起動(dòng)強(qiáng)上拉,并保持500ms。 Read Scratchpad BEh這個(gè)命令讀取暫存器的內(nèi)容。讀取將從字節(jié)0 開始,一直進(jìn)行下去,直到第9(字節(jié)8,CRC)字節(jié)讀完。如果不想讀完所有字節(jié),控制器可以在任何時(shí)間發(fā)出復(fù)位命令來中止讀取。(c)DS18b20 用12 位存貯溫值度最高位為符號(hào)位,下圖為18b20 的溫度存儲(chǔ)方式,負(fù)溫度S=1 正溫度S=0LSB:D7 D6 D5 D4 D3 D2 D1 D0232221202-12-22-32-4MSB:D7 D6 D5 D4 D3 D2 D1 D0SSSSS272625三硬件電路設(shè)計(jì)本次實(shí)驗(yàn)采用了老師提供的單片

7、機(jī)系統(tǒng),所以整體的硬件電路設(shè)計(jì)需要在已知的硬件條件下進(jìn)行設(shè)計(jì)。(一)下圖為已有的單片機(jī)系統(tǒng)部分電路圖分析:(1)由上圖可知,時(shí)鐘振蕩電路,復(fù)位電路均以在原系統(tǒng)中正確連接。(2)數(shù)字溫度計(jì)所需的顯示電路電路中,原系統(tǒng)將段碼輸出連在P2接口中,但由圖可知,該圖中的六個(gè)數(shù)碼管中的小數(shù)點(diǎn)均無法點(diǎn)亮,原因在于圖中并未對(duì)其進(jìn)行連接,也無引腳供外界連接。而六個(gè)數(shù)碼管的位選端口連在P1接口上。本次課程設(shè)計(jì)中,我們選擇使用P1.0P1.3上所連接的四個(gè)數(shù)碼管。(3)通過軟件測(cè)試驗(yàn)證,原系統(tǒng)中的數(shù)碼管為共陰極,且原系統(tǒng)中位選信號(hào)是通過一個(gè)反向器之后才輸入數(shù)碼管。(4)原系統(tǒng)中P0端口未使用,所以可以用排線引出,連

8、接我們所需要補(bǔ)充的電路,包括DS18B20總線輸入電路、門限設(shè)置電路以及報(bào)警電路。(二) 溫度采集電路、門限設(shè)置電路及報(bào)警電路(其余電路省略)圖中:(1)門限中的三個(gè)按鍵,分別為模式切換按鍵、加按鍵、減按鍵;(2)報(bào)警電路中,超過高門限或者低于低門限時(shí)發(fā)光二極管被點(diǎn)亮,其余時(shí)刻均熄滅;(3)DS18B20溫度采集電路中,需要注意的是DQ上需要一個(gè)上拉電阻,一般為4.7K左右。四系統(tǒng)軟件設(shè)計(jì)(一)讀取數(shù)據(jù)的流程圖DSl8820的主要數(shù)據(jù)元件有:64位激光Lasered ROM,溫度靈敏元件和非易失性溫度告警觸發(fā)器TH和TL。DSBl820可以從單總線獲取電源,當(dāng)信號(hào)線為高電平時(shí),將能量貯存在內(nèi)部

9、電容器中;當(dāng)單信號(hào)線為低電平時(shí),將該電源斷開,直到信號(hào)線變?yōu)楦唠娖街匦陆由霞纳?電容)電源為止。此外,還可外接5 V電源,給DSl8820供電。DSl8820的供電方式靈活,利用外接電源還可增加系統(tǒng)的穩(wěn)定性和可靠性。下圖讀取數(shù)據(jù)流程圖。開始DS18B20的初始化啟動(dòng)溫度轉(zhuǎn)換讀取溫度寄存器跳過讀序列號(hào)的操作跳過讀序列號(hào)的操作DS18B20的初始化RET將LSB與MSB值合并為temptemp(二)溫度數(shù)據(jù)處理程序的流程圖讀出溫度數(shù)據(jù)后,temp的低四位為溫度的小數(shù)部分,可以精確到0.0625,temp的中間8位為溫度的整數(shù)部分,temp的高四位全部為1表示負(fù)數(shù),全為0表示正數(shù)。所以先將數(shù)據(jù)提取出

10、來,分為三個(gè)部分:小數(shù)部分、整數(shù)部分和符號(hào)部分。小數(shù)部分進(jìn)行顯示時(shí)要使用另外的查詢表,與整數(shù)顯示查詢表有所不同。因?yàn)楸敬握n程設(shè)計(jì)只要求測(cè)試的溫度范圍為070,所以符號(hào)位S必為0,軟件設(shè)計(jì)中則默認(rèn)所測(cè)數(shù)據(jù)為正,從而不設(shè)符號(hào)位判定。開始取小數(shù)部分,并暫存其顯示值取整數(shù)部分,并計(jì)算百位、十位、個(gè)位,并暫存顯示值判斷百位是否為0為0百位賦值0x0a,即該數(shù)碼管熄滅判斷十位是否為0 為0十位數(shù)碼管熄滅RET(三)模式切換流程圖使用模式值st來標(biāo)記不同模式,st=1時(shí),表示在正常溫度模式,st=2,表示在高門限模式,st=3表示在低門限模式,每次按下一次模式切換鍵,st+1,待其加至4時(shí),將該值返回至1。

11、從而形成了模式鍵不斷按下,三種模式循環(huán)切換的情況。防抖在這里是十分關(guān)鍵的。因?yàn)榇颂幍陌存I是按下然后又返回為按了一次。所以按下時(shí),則進(jìn)入程序,為了防止機(jī)械抖動(dòng)等不確定情況,延時(shí)恰當(dāng)?shù)囊欢螘r(shí)間后再次檢測(cè)是否確實(shí)按下。若確實(shí)按下,則對(duì)模式進(jìn)行切換。切換后,延時(shí)等待按鍵返回高位,返回高位后,再次延時(shí)消除抖動(dòng),再次檢驗(yàn),確定按鍵返回高位后,退出程序。開始模式鍵是否按下延時(shí)消抖模式值st在13間切換延時(shí)等待按鍵返回延時(shí)消抖RET五軟件仿真 電路圖連接:嚴(yán)格按照硬件設(shè)計(jì)中已有的單片機(jī)系統(tǒng)的連接方式和自己補(bǔ)充的電路的連接方式進(jìn)行仿真,要最貼近實(shí)際電路,才能更準(zhǔn)確的得到仿真結(jié)果。系統(tǒng)電路圖 高門限下數(shù)碼管顯示

12、低門限下數(shù)碼管顯示 正常模式下數(shù)碼管顯六實(shí)際連接與調(diào)試(一)仿真成功后,在實(shí)際操作中,電路圖的連接應(yīng)該嚴(yán)格按照仿真電路進(jìn)行。 問題:在最開始實(shí)驗(yàn)中,我將DS18B20的DQ連接在P1.4,且仿真成功。但是在實(shí)際連接中,我將DQ連接在了P0.4端口,但實(shí)際電路中無任何數(shù)據(jù)顯示。再次仿真,將DQ接至P0.4,仿真不成功。后查閱P0、P1、P2以及P3口的內(nèi)部結(jié)構(gòu)后發(fā)現(xiàn),除P0外另外三口均接有上拉電阻,而P0則無。所以P0在作為通用I/O接口使用時(shí),必須外接上拉電阻,其余端口則不需要。所以,為方便起見,實(shí)際中,將DQ按照最初仿真設(shè)計(jì),接至P1.4。(二)原系統(tǒng)所擁有資料太少,數(shù)碼管類型未知。 因只查

13、閱到原系統(tǒng)的部分電路圖,且無詳細(xì)說明,所以為證明在網(wǎng)上搜索到的電路圖的正確性以及確定數(shù)碼管的類型。先編寫一個(gè)簡單的數(shù)字顯示程序。最開始,我并沒有意識(shí)到原系統(tǒng)中的片選信號(hào)接有反向器,在測(cè)試程序中,無論使用共陰還是共陽數(shù)字查詢表,數(shù)碼管均顯示8888,后發(fā)現(xiàn)問題將所有片選數(shù)值取反,再次進(jìn)行測(cè)試,確定數(shù)碼管為共陰極。同時(shí),在測(cè)試過程中,發(fā)現(xiàn)原系統(tǒng)的小數(shù)點(diǎn)是無法點(diǎn)亮的。(三)關(guān)于位選在最開始的測(cè)試數(shù)碼管類型中,我只測(cè)試了一位數(shù)碼管,使其顯示數(shù)值1,但測(cè)試成功后,6位數(shù)碼管均顯示為1。在測(cè)試過程中,我并未注意這個(gè)問題。測(cè)試結(jié)束后,進(jìn)行整體聯(lián)調(diào)。但數(shù)碼管始終無正確顯示。當(dāng)時(shí),我首先著手于尋找軟件程序中是否

14、有錯(cuò)誤。所以人為將temp設(shè)定為一個(gè)固定值,先確定數(shù)據(jù)處理程序和數(shù)據(jù)顯示程序無誤。然而數(shù)碼管無法正常顯示我預(yù)先設(shè)定的值,后經(jīng)過反復(fù)改動(dòng),發(fā)現(xiàn),在位選過程中,必須在選中一位數(shù)碼管的過程中同時(shí)將其余所有的數(shù)碼管關(guān)閉,否則將產(chǎn)生混亂。若逐一設(shè)定S1=1;S2=0;S3=0;S4=0未免太過麻煩,所以設(shè)定一個(gè)數(shù)組,分別賦值0x08,0x04,0x02,0x01。片選時(shí)按照規(guī)則將上值賦給,則一舉多得。(四)DQ數(shù)據(jù)采集 上述問題均解決后,再次進(jìn)行調(diào)試,數(shù)碼管顯示25592。這個(gè)值非常特殊,且第5個(gè)數(shù)碼管,在程序中所有地方均是將其熄滅的,為何此處會(huì)亮呢?顯然采集的數(shù)據(jù)是有很大問題的,因?yàn)楹苊黠@2559中,

15、9為小數(shù)部分,將2559換為二進(jìn)制則為1111 1111 1111。這就說明電路并沒有采集到溫度數(shù)據(jù),原因一:DQ上接有上拉電阻,在輸出正常溫度數(shù)據(jù)外始終為高電平,所以此處很可能并沒有采集到正常輸出溫度數(shù)據(jù);原因二:室溫不可能為25592。 但是當(dāng)時(shí),我并沒有對(duì)器件是否損壞產(chǎn)生懷疑。原因在于,大部分時(shí)候數(shù)碼管顯示的是12791,且兩邊的1很亮且基本無閃爍,279則在不斷閃爍,頻率很快,造成了27.9為數(shù)碼管要顯示的溫度的錯(cuò)覺,且27.9是與當(dāng)時(shí)實(shí)驗(yàn)室的溫度非常接近的。同時(shí),在我不斷的對(duì)程序中DS18B20的初始化時(shí)等部分的時(shí)序進(jìn)行調(diào)整時(shí),279的閃爍頻率發(fā)生變化,兩個(gè)1并無變化。在經(jīng)歷了無法顯

16、示正常溫度的挫敗后,我仔細(xì)查閱了DS18B20的數(shù)據(jù)手冊(cè),確定了在其初始化過程中,DQ電平應(yīng)該如何變化且應(yīng)當(dāng)延時(shí)多少。同時(shí)也確定了DS8B20的在12位分辨率情況下數(shù)據(jù)A/D轉(zhuǎn)換所需時(shí)間為500ms750ms,所以在發(fā)出轉(zhuǎn)換命令后需要給其充分的時(shí)間來進(jìn)行A/D轉(zhuǎn)換。在經(jīng)歷了上述種種之后,我基本確定了程序中時(shí)序的正確性。再次進(jìn)行實(shí)驗(yàn)室,數(shù)碼管始終顯示的為850,第5位數(shù)碼管無故亮起的情況消失了(到現(xiàn)在我都不清楚它當(dāng)時(shí)為什么會(huì)亮)。上網(wǎng)搜索資料,總結(jié)原因有二。一是程序時(shí)序存在問題;二是DS18B20損壞了。為排除第二個(gè)狀況,我與同學(xué)更換了器件,數(shù)碼管上顯示出了令人欣喜的289!但是,仍然存在的問題

17、和解決過程是(1)為保證充分的延時(shí),導(dǎo)致數(shù)碼管中數(shù)字不斷閃爍,看起來非常不舒服。后通過改進(jìn)程序,使程序采集一次數(shù)據(jù),卻多次掃描顯示溫度數(shù)值。以此法使其不再閃爍。但是實(shí)際上,這種方法是不完美的,完美的狀況應(yīng)當(dāng)是多次采集數(shù)據(jù),掃描顯示多次采集值的平均值。但限于時(shí)間緊迫和后者的復(fù)雜度,只能采用前者的方法了。 程序如下:case 1: work_temp(read_temp();/采集處理溫度數(shù)值for(i=0;i0;t-); _nop_();/*顯示掃描函數(shù)*/void scan() char k;for(k=0;k4;k+) /4位LED掃描控制discan=scan_conk; /位選disda

18、ta=dis_7displayk; /數(shù)據(jù)顯示if (k=1)dian=1; /小數(shù)點(diǎn)顯示delay(200);/*DS18B20復(fù)位函數(shù)*/ow_reset(void)duqu=0;delay(60);/拉低480960usduqu =1;delay(10); /等待1560usif(duqu=0)delay(30);duqu=1;/*DS18B20寫命令函數(shù)*/向1-WIRE 總線上寫1個(gè)字節(jié)void write_byte(uchar val) uchar i; for(i=0;i=1;duqu=1; /*DS18B20讀1字節(jié)函數(shù)*/從總線上取1個(gè)字節(jié)uchar read_byte(vo

19、id)uchar i;uchar value=0;for(i=8;i0;i-)duqu=0; value=1;duqu=1;delay(1);if(duqu=1)value|=0x80;delay(5);duqu=1; return value;/*讀出溫度函數(shù)*/uint read_temp()ow_reset(); /總線復(fù)位write_byte(0xcc); /發(fā)命令write_byte(0x44); /發(fā)轉(zhuǎn)換命令 delay(200);delay(200);ow_reset(); write_byte(0xcc); /發(fā)命令write_byte(0xbe); delay(200); d

20、elay(200);temp_data0=read_byte(); /讀溫度值的第字節(jié)temp_data1=read_byte(); /讀溫度值的高字節(jié)temp=temp_data1;temp4; / 取中間八位,即整數(shù)部分的值display3=display4/100; / 取百位數(shù)據(jù)暫存display1=display4%100; / 取后兩位數(shù)據(jù)暫存display2=display1/10; / 取十位數(shù)據(jù)暫存display1=display1%10;r=display1+display2*10+display3*100;if(!display3) /符號(hào)位顯示判斷 display3=0

21、x0a; /百位為0時(shí)數(shù)碼管熄滅 if(!display2) display2=0x0a; /十位為0時(shí)數(shù)碼管熄滅 /*二極管報(bào)警函數(shù)*/void BEEP()if(r=high|rhigh)pp=low;low=high;high=pp; while(!key02);delay(400);while(!key02); /*門限值減1*/void key3() while(key03=0)delay(400);if(key03=0) if(st=3)low=low-1;if(st=2)high=high-1;if(lowhigh)pp=low;low=high;high=pp; while(!key03);delay(400);while(!key03); /*上限溫度顯示*/void high1() uchar k; display0=high%10;d

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論