版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p><b> 數(shù)字溫度計(jì)</b></p><p> 2009年 9月 15日</p><p><b> 摘要</b></p><p> 本設(shè)計(jì)是一款簡(jiǎn)單實(shí)用的小型數(shù)字溫度計(jì),所采用的主要元件有傳感器1
2、8B20,單片機(jī)AT89S52,,四位共陰極數(shù)碼管一個(gè),電容電阻若干。18B20支持“一線總線”接口,測(cè)量溫度范圍-55°C~+125°C。在-10~+85°C范圍內(nèi),精度為±0.5°C。18B20的精度較差為± 2°C ?,F(xiàn)場(chǎng)溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場(chǎng)溫度測(cè)量,如:環(huán)境控制、設(shè)備或過程控制、測(cè)溫類消費(fèi)電子產(chǎn)品
3、等。</p><p> 本次數(shù)字溫度計(jì)的設(shè)計(jì)共分為五部分,主控制器,LED顯示部分,傳感器部分,復(fù)位部分,時(shí)鐘電路。主控制器即單片機(jī)部分,用于存儲(chǔ)程序和控制電路;LED顯示部分是指四位共陰極數(shù)碼管,用來顯示溫度;傳感器部分,即溫度傳感器,用來采集溫度,進(jìn)行溫度轉(zhuǎn)換;復(fù)位部分,即復(fù)位電路。測(cè)量的總過程是,傳感器采集到外部環(huán)境的溫度,并進(jìn)行轉(zhuǎn)換后傳到單片機(jī),經(jīng)過單片機(jī)處理判斷后將溫度傳遞到數(shù)碼管顯示。本設(shè)計(jì)能完成的
4、溫度測(cè)量范圍是-55°C~+128°C,由于能力有限,不能實(shí)現(xiàn)報(bào)警功能。</p><p> 隨著時(shí)代的進(jìn)步和發(fā)展,單片機(jī)技術(shù)已經(jīng)普及到我們生活,工作,科研,各個(gè)領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù),本文將介紹一種基于單片機(jī)控制的數(shù)字溫度計(jì),本溫度計(jì)屬于多功能溫度計(jì),可以設(shè)置上下報(bào)警溫度,當(dāng)溫度不在設(shè)置范圍內(nèi)時(shí),可以報(bào)警。 </p><p> 關(guān)鍵詞:?jiǎn)纹瑱C(jī),數(shù)字控制,溫
5、度計(jì), DS18B20,AT89S52</p><p><b> 目錄</b></p><p> 1概述...................................................................................................................................
6、........ 3</p><p> 1.1 課程設(shè)計(jì)的目的和意義............................................................................ 3</p><p> 1.2 任務(wù)及要求3</p><p> 2 系統(tǒng)總體方案及硬件設(shè)計(jì)4</p><p>
7、 2.1系統(tǒng)總體方案設(shè)計(jì)4</p><p> 2.2系統(tǒng)硬件電路設(shè)計(jì)5</p><p><b> 3 軟件設(shè)計(jì)12</b></p><p> 3.1系統(tǒng)總體方案設(shè)計(jì)12</p><p> 3.2程序設(shè)計(jì)12</p><p><b> 4實(shí)驗(yàn)仿真15</b&g
8、t;</p><p> 5課程設(shè)計(jì)體會(huì)16</p><p><b> 參考文獻(xiàn)17</b></p><p><b> 附1: 源程序代碼</b></p><p><b> 附2 :系統(tǒng)原理圖</b></p><p><b> 1
9、概述</b></p><p> 1.1 課程設(shè)計(jì)的目的和意義</p><p> 通過課程設(shè)計(jì)使我進(jìn)一步熟悉了單片機(jī)的內(nèi)部結(jié)構(gòu)和工作原理,掌握了單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的基本方法和步驟;通過利用MCS-51單片機(jī),理解單片機(jī)在自動(dòng)化裝置中的作用以及掌握單片機(jī)的編程調(diào)試方法;通過設(shè)計(jì)一個(gè)簡(jiǎn)單的實(shí)際應(yīng)用輸入控制及顯示系統(tǒng),掌握protues和keil以及各種仿真軟件的使用。</p
10、><p> 目前溫度計(jì)的發(fā)展很快,從原始的玻璃管溫度計(jì)發(fā)展到了現(xiàn)在的熱電阻溫度計(jì)、熱電偶溫度計(jì)、數(shù)字溫度計(jì)、電子溫度計(jì)等等,溫度計(jì)中傳感器是它的重要組成部分,它的精度、靈敏度基本決定了溫度計(jì)的精度、測(cè)量范圍、控制范圍和用途等。傳感器應(yīng)用極其廣泛,目前已經(jīng)研制出多種新型傳感器。但是,作為應(yīng)用系統(tǒng)設(shè)計(jì)人員需要根據(jù)系統(tǒng)要求選用適宜的傳感器,并與自己設(shè)計(jì)的系統(tǒng)連接起來,從而構(gòu)成性能優(yōu)良的監(jiān)控系統(tǒng)。</p>&
11、lt;p> 1.2 任務(wù)及要求</p><p> 設(shè)計(jì)一個(gè)簡(jiǎn)單數(shù)字溫度計(jì),能夠測(cè)量通常環(huán)境下的溫度,能夠?qū)崿F(xiàn)零下溫度的測(cè)量,能夠測(cè)量小數(shù)。</p><p> 2 系統(tǒng)總體方案及硬件設(shè)計(jì)</p><p> 2.1系統(tǒng)總體方案設(shè)計(jì)</p><p> 2..1.1 方案論證</p><p> 方案一: 由
12、于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測(cè)溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測(cè)溫度顯示出來,這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。</p><p> 方案二:考慮到用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易
13、直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。</p><p> 從以上兩種方案,很容易看出,采用方案二,電路比較簡(jiǎn)單,軟件設(shè)計(jì)也比較簡(jiǎn)單,故采用了方案二。</p><p><b> 2.1.2原理框圖</b></p><p> 溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì)框圖如圖2-1所示,控制器采用單片機(jī)AT89S52,溫度傳感器采用DS18B20,用
14、四位LED數(shù)碼管以并口傳送數(shù)據(jù)實(shí)現(xiàn)溫度顯示。</p><p><b> 圖2-1</b></p><p> 2.1.3功能模塊連接簡(jiǎn)介</p><p> 溫度傳感器的接口2連接單片機(jī)P3.4,用于傳送數(shù)據(jù),接口3連接電源,接口1接地;數(shù)碼管的段碼輸入端連接單片機(jī)的P0端口,公共端接P2.4-P2.7,單片機(jī)的P2.0-P2.3接控制鍵盤,
15、時(shí)鐘電路連接XTAL,復(fù)位電路連接RST。</p><p> 2.2系統(tǒng)硬件電路設(shè)計(jì)</p><p> 2.2.1單片機(jī)的選擇</p><p> 單片機(jī)AT89S52具有低電壓供電和體積小等特點(diǎn),四個(gè)端口只需要三個(gè)口就能滿足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(tǒng)可用二節(jié)電池供電,此處我們采用USB接口供電,省去了大量空間,更適合于便攜式產(chǎn)品的應(yīng)
16、用。</p><p> AT89S52主要特性:</p><p> 與MCS-51單片機(jī)產(chǎn)品兼容 4K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器</p><p> 1000次擦寫周期 全靜態(tài)工作:0Hz—33MHz</p><p> 32個(gè)可編程I/O口線 2個(gè)16位
17、定時(shí)器/計(jì)數(shù)器</p><p> 6個(gè)中斷源 全雙工UART串行通道</p><p> 低功耗空閑和掉電模式 掉電后中斷可喚醒</p><p> 看門狗定時(shí)器 雙數(shù)據(jù)指針</p><p> 靈活的ISP編程
18、 4.0---5.5V電壓工作范圍</p><p> 單片機(jī)AT89S52的內(nèi)部結(jié)構(gòu)總框圖。它可以劃分為CPU、存儲(chǔ)器、并行口、串行口、定時(shí)/計(jì)數(shù)器和中斷邏輯幾個(gè)部分。 </p><p> AT89S52外部引腳功能如圖2-2所示。</p><p><b> 圖2-2 </b></p><p&
19、gt; 本次設(shè)計(jì)需要注意的幾個(gè)端口:</p><p> P0口(39—32):是一組8位漏極開路行雙向I/O口,也既地址/數(shù)據(jù)總線復(fù)用口??勺鳛檩敵隹谑褂脮r(shí),每位可吸收電流的方式驅(qū)動(dòng)8個(gè)TTL邏輯電路,對(duì)端口寫“1”可作為高阻抗輸入輸入端用。在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。在Flash編程時(shí),PO口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校
20、驗(yàn)時(shí),要求接上拉電阻。</p><p> P3口(10—17):是一組帶有內(nèi)部上拉電阻的8位雙向I/O口,,P1的輸入緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)P3口寫入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸出端口。作輸出端口時(shí),被外部拉低的P3口將用上拉電阻輸出電流。P3口除可作為一般的I/O口線外,更重要的用途是它的第二功能,如圖2-3所示:</p><p><
21、b> 圖2-3</b></p><p> 部分控制總線的功能:</p><p> /Vpp(31):內(nèi)部和外部程序存儲(chǔ)器選擇線。=0時(shí)訪問外部ROM 0000H—FFFFH;=1時(shí),地址0000H—0FFFH空間訪問內(nèi)部ROM,地址1000H—FFFFH空間訪問外部ROM。本次設(shè)計(jì)接高電平。</p><p> XTAL1(19)和XTAL2
22、(18):使用內(nèi)部振蕩電路時(shí),用來接石英晶體和電容;使用外部時(shí)鐘時(shí),用來輸入時(shí)鐘脈沖。</p><p> RST/VPD(9):復(fù)位信號(hào)輸入端。AT89S52接能電源后,在時(shí)鐘電路作用下,該腳上出現(xiàn)兩個(gè)機(jī)器周期以上的高電平,使內(nèi)部復(fù)位。第二功能是VPD,即備用電源輸入端。當(dāng)主電源Vcc發(fā)生故障,降低到低電平規(guī)定值時(shí),VPD將為RAM提供備用電源,發(fā)保證存儲(chǔ)在RAM中的信號(hào)不丟失。</p><
23、p> 2.2.2時(shí)鐘電路設(shè)計(jì)</p><p> AT89S52時(shí)鐘有兩種方式產(chǎn)生,即內(nèi)部方式和外部方式。(如圖2-4所示)AT89C51中有一個(gè)構(gòu)成內(nèi)部震蕩器的高增益反向放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外石英或陶瓷震蕩器一起構(gòu)成自激震蕩器震蕩電路如圖。外接石英晶體(或陶瓷部時(shí)鐘,采用外部時(shí)鐘如圖所示。在這種情況下,外部時(shí)鐘脈沖接到XTAL1端
24、,既內(nèi)部時(shí)鐘發(fā)生器的輸入端,XTAL2懸空。由于外部時(shí)鐘信號(hào)是通過一個(gè)2分頻的觸發(fā)器后作為內(nèi)部時(shí)鐘信號(hào)的所以外部時(shí)鐘的占空比沒有特殊要求,但最小高電平持續(xù)的時(shí)間和最大低電平持續(xù)的時(shí)間應(yīng)符合產(chǎn)品技術(shù)條件的要求。本次設(shè)計(jì)采用內(nèi)部震蕩電路,瓷片電容采用30P,晶振采用12MHZ</p><p> 內(nèi)部震蕩電路 外部震蕩電路</p><p><b> 圖2-4&
25、lt;/b></p><p> 2.2.3復(fù)位電路設(shè)計(jì)</p><p> 單片機(jī)系統(tǒng)的復(fù)位電路在這里采用的是上電+按鈕復(fù)位電路形式,其中電阻R采用10KΩ的阻值,電容采用電容值為10μ的電解電容。具體連接電路如圖3-5所示:</p><p><b> 圖2-5</b></p><p> 2.2.4 溫度顯示
26、電路</p><p> 四位共陰極數(shù)碼管,能夠顯示小數(shù)和負(fù)溫度。零下時(shí),1和2分別顯示負(fù)號(hào)。當(dāng)溫度超過99.9時(shí),四個(gè)數(shù)碼管全部亮。</p><p> 2.2.5溫度傳感器</p><p> DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過簡(jiǎn)單的
27、編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點(diǎn)如下:</p><p> ● 獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信;</p><p> ● 多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;</p><p> ● 可通過數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;</p><p> ● 溫度以9或
28、12位數(shù)字;</p><p> ● 用戶可定義報(bào)警設(shè)置;</p><p> ● 報(bào)警搜索命令識(shí)別并標(biāo)志超過程序限定溫度(溫度報(bào)警條件)的器件;</p><p> ● 負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作; </p><p> DS18B20采用3腳PR-35封裝或8腳SOIC封裝,其內(nèi)部結(jié)構(gòu)框
29、圖如圖2-6所示。</p><p><b> 圖2-6</b></p><p> 64位ROM的結(jié)構(gòu)開始8位是產(chǎn)品類型的編號(hào),接著是每個(gè)器件的惟一的序號(hào),共有48位,最后8位是前面56位的CRC檢驗(yàn)碼,這也是多個(gè)DS18B20可以采用一線進(jìn)行通信的原因。溫度報(bào)警觸發(fā)器TH和TL,可通過軟件寫入戶報(bào)警上下限。</p><p> DS18B2
30、0溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如圖2.3所示。頭2個(gè)字節(jié)包含測(cè)得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。該字節(jié)各位的定義如圖2-7所示。低5位一直為1,TM是工作模式位,用于設(shè)置
31、DS18B20在工作模式還是在測(cè)試模式,DS18B20出廠時(shí)該位被設(shè)置為0,用戶要去改動(dòng),R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率。</p><p><b> 圖2-7</b></p><p> DS18B20溫度轉(zhuǎn)換的時(shí)間比較長(zhǎng),而且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間越長(zhǎng)。因此,在實(shí)際應(yīng)用中要將分辨率和轉(zhuǎn)換時(shí)間權(quán)衡考慮。溫度傳感器18B20匯編程序,采用
32、器件默認(rèn)的12位轉(zhuǎn)化,最大轉(zhuǎn)化時(shí)間750微秒 ,可以將檢測(cè)到的溫度直接顯示到AT89C52的兩個(gè)數(shù)碼管上。 </p><p> 表1 DS18B20溫度轉(zhuǎn)換時(shí)間表</p><p> 高速暫存RAM的第6、7、8字節(jié)保留未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出前面所有8字節(jié)的CRC碼,可用來檢驗(yàn)數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。</p><p> 當(dāng)DS18B20接收
33、到溫度轉(zhuǎn)換命令后,開始啟動(dòng)轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲(chǔ)在高速暫存存儲(chǔ)器的第1、2字節(jié)。單片機(jī)可以通過單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時(shí)低位在先,高位在后,數(shù)據(jù)格式以0.0625℃/LSB式表示。</p><p> 當(dāng)符號(hào)位S=0時(shí),表示測(cè)得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)符號(hào)位S=1時(shí),表示測(cè)得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計(jì)算十進(jìn)制數(shù)值。</p&g
34、t;<p> DS18B20完成溫度轉(zhuǎn)換后,就把測(cè)得的溫度值與RAM中的TH、TL字節(jié)內(nèi)容作比較。若T>TH或T<TL,則將該器件內(nèi)的報(bào)警標(biāo)志位置位,并對(duì)主機(jī)發(fā)出的報(bào)警搜索命令做出響應(yīng)。因此,可用多只DS18B20同時(shí)測(cè)量溫度并進(jìn)行報(bào)警搜索。</p><p> 在64位ROM的最高有效字節(jié)中存儲(chǔ)有循環(huán)冗余檢驗(yàn)碼(CRC)。主機(jī)ROM的前56位來計(jì)算CRC值,并和存入DS18B20的CRC值作比較
35、,以判斷主機(jī)收到的ROM數(shù)據(jù)是否正確。</p><p> 另外,由于DS18B20單線通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)序很重要。系統(tǒng)對(duì)DS18B20的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初使化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲(chǔ)器操作命令→處理數(shù)據(jù)。</p><p><b> 分別說明如下:</b></p><
36、p> 1、初始化 單總線的所有處理均從初始化開始。初始化過程是主機(jī)通過向作為從機(jī)的DS18B20芯片發(fā)一個(gè)有時(shí)間寬度要求的初始化脈沖實(shí)現(xiàn)的。初始化后,才可進(jìn)行讀寫操作。</p><p> 2 、ROM操作命令 總線主機(jī)檢測(cè)到DS18B20的存在 便可以發(fā)出ROM操作命令之一 這些命令表.2:</p><p> 表2 ROM操作命令</p><p>
37、; 3、存儲(chǔ)器操作 命令如表.3: </p><p> 表.3 存儲(chǔ)器操作命令</p><p><b> 3 軟件設(shè)計(jì)</b></p><p> 3.1系統(tǒng)總體方案設(shè)計(jì)</p><p> 本次課程設(shè)計(jì)采用的是protues軟件仿真,用Keil軟件進(jìn)行編譯。Protues軟件是英國Labcenter elec
38、tronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。</p><p> 軟件部分由主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計(jì)算溫度子程序,顯示數(shù)據(jù)刷新子程序,判斷程序,按鍵檢測(cè)等。</p><p> 圖3-1 主程序流程</p><p><b> 3.
39、2程序設(shè)計(jì)</b></p><p><b> 3.2.1 主程序</b></p><p> 主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測(cè)量的當(dāng)前溫度值,溫度測(cè)量每1s進(jìn)行一次。這樣可以在一秒之內(nèi)測(cè)量一次被測(cè)溫度,其程序流程見圖3-1所示。</p><p> 3.2.2 讀出溫度子程序</p>
40、<p> 讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如圖3-2所示</p><p> 圖3-2 讀出溫度子程序流程</p><p> 3.2.3二進(jìn)制轉(zhuǎn)換BCD碼命令子程序 </p><p> 二進(jìn)制轉(zhuǎn)換BCD碼命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,當(dāng)采用12位分辨率時(shí)轉(zhuǎn)
41、換時(shí)間約為750ms,在本程序設(shè)計(jì)中采用1s顯示程序延時(shí)法等待轉(zhuǎn)換的完成。二進(jìn)制轉(zhuǎn)換BCD碼命令子程序流程圖,如圖3-3</p><p> 圖3-3二進(jìn)制轉(zhuǎn)換BCD碼流程圖</p><p> 3.2.4 計(jì)算溫度子程序</p><p> 將RAM中讀取進(jìn)行BCD碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,其程序流程圖如圖4-4所示。</p><p
42、> 圖3-4 測(cè)量溫度流程圖 </p><p> 3.2.5溫度數(shù)據(jù)顯示子程序</p><p> 顯示數(shù)據(jù)子程序主要是對(duì)顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,查表送段碼至LED,開位碼顯示,采用動(dòng)態(tài)掃描方式</p><p><b> 4 實(shí)驗(yàn)仿真</b></p><p><b> 圖4-1<
43、;/b></p><p> 系統(tǒng)仿真圖如圖4-1所示,加上復(fù)位電路和時(shí)鐘電路,在protues構(gòu)成了完整的仿真圖,輸入程序后就能夠進(jìn)行仿真。</p><p><b> 調(diào)試結(jié)果分析:</b></p><p> 本次數(shù)字溫度計(jì)能夠比較精確的測(cè)量一般溫度,測(cè)量范圍是-55~128,并且能夠測(cè)出小數(shù)。</p><p&g
44、t;<b> 5 課程設(shè)計(jì)體會(huì)</b></p><p> 本次的課程設(shè)計(jì)使我們進(jìn)一步鞏固了書本上的知識(shí),做到了學(xué)以致用。這是我們第二次自己動(dòng)手設(shè)計(jì)的電路,通過系統(tǒng)仿真軟件protues和編譯軟件keil,使我們進(jìn)一步了解了單片機(jī)的設(shè)計(jì)制作過程,其中最為困難的是軟件部分,即編程部分,我們上網(wǎng)找了好多資料,雖然經(jīng)過自己的修改,但還是有很多功能不能實(shí)現(xiàn),如報(bào)警和溫度上下限設(shè)置。由于protu
45、es并不是很熟練,在使用的過程中有很多原件的名稱不知道,從而花費(fèi)了大量的時(shí)間在網(wǎng)上查找,今后應(yīng)該在這方面多多努力。最后一步的焊接硬件也遇到了不少麻煩,數(shù)碼管引線太多容易弄混,三級(jí)管放大電路中,三極管容易接反??偨Y(jié)經(jīng)驗(yàn)的時(shí)候我們得出這樣的結(jié)論,學(xué)習(xí)應(yīng)該學(xué)以致用,有目的的去學(xué)習(xí),如果學(xué)了不用等于沒學(xué)。其次,要學(xué)以致用,就要理論聯(lián)系實(shí)際,這樣才會(huì)取得事半功倍的效果。</p><p><b> 參考文獻(xiàn)<
46、;/b></p><p> [1] 康華光,陳大欽,張林.電子技術(shù)基礎(chǔ) 模擬部分(第五版).高等教育出版社.2006.103-108</p><p> [2]余發(fā)山.單片機(jī)原理及應(yīng)用技術(shù).中國礦業(yè)大學(xué)出版社,2003.31-32</p><p> [3] 51單片機(jī)學(xué)習(xí)網(wǎng) http://www.8951.com/TEST/XL1000/xl100062
47、3.htm</p><p><b> 附1 源程序代碼</b></p><p> #include<reg51.h></p><p> #include<18b20.h></p><p> #define H 125 </p><p> #define L -
48、55</p><p> unsigned int zhengshu=0;//溫度值 </p><p> int dingyih=H,dingyil=L,n;//溫度上下限</p><p> uint m=0,i;//按鍵標(biāo)志位</p><p> uchar temp;</p><p> bit biaozh
49、i_1=0,biaozhi_2=0,biaozhi_3=0;</p><p> sbit gw=P2^4;</p><p> sbit sw=P2^5;</p><p> sbit bw=P2^6;</p><p> sbit qw=P2^7;</p><p> sbit k1=P2^0;</p>
50、<p> sbit k2=P2^1;</p><p> sbit k3=P2^3;</p><p> sbit k4=P2^2;</p><p> sbit bj=P3^2;</p><p> sbit led=P3^1;</p><p> uchar ge,shi,bai,qian;//顯示
51、位定義</p><p> uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x76,0x38,0x00};</p><p> ////////////////0/////1////2////3////4////5////6////7////8////9// - / H / l</p&g
52、t;<p> void delay(z)</p><p><b> {</b></p><p><b> uint i,j;</b></p><p> for(i=0;i<115;i++)</p><p> for(j=z;j>0;j--);</p>
53、<p><b> }</b></p><p> void xianshi1(uchar ge, shi, bai, qian)</p><p><b> { </b></p><p><b> gw=0;</b></p><p><b> s
54、w=1;</b></p><p><b> bw=1;</b></p><p><b> qw=1;</b></p><p> P0=table[ge];</p><p><b> delay(1);</b></p><p><
55、b> gw=1;</b></p><p><b> sw=0;</b></p><p><b> bw=1;</b></p><p><b> qw=1;</b></p><p> P0=table[shi];</p><p>
56、;<b> delay(1);</b></p><p><b> gw=1;</b></p><p><b> sw=0;</b></p><p><b> bw=1;</b></p><p><b> qw=1;</b>&
57、lt;/p><p><b> P0=0x80;</b></p><p><b> delay(1);</b></p><p><b> gw=1;</b></p><p><b> sw=1;</b></p><p><b
58、> bw=0;</b></p><p><b> qw=1;</b></p><p> P0=table[bai];</p><p><b> delay(1);</b></p><p><b> gw=1;</b></p><p
59、><b> sw=1;</b></p><p><b> bw=1;</b></p><p><b> qw=0;</b></p><p> P0=table[qian];</p><p><b> delay(1);</b></p&
60、gt;<p><b> }</b></p><p> void xianshi2(uchar ge, shi, bai, qian)</p><p><b> { </b></p><p> if(bai==0)</p><p><b> {</b>
61、</p><p><b> bai=13;</b></p><p> if(shi==0)</p><p><b> shi=13;</b></p><p><b> }</b></p><p><b> gw=0;</b>
62、;</p><p><b> sw=1;</b></p><p><b> bw=1;</b></p><p><b> qw=1;</b></p><p> P0=table[ge];</p><p><b> delay(1);&
63、lt;/b></p><p><b> gw=1;</b></p><p><b> sw=0;</b></p><p><b> bw=1;</b></p><p><b> qw=1;</b></p><p>
64、P0=table[shi];</p><p><b> delay(1);</b></p><p><b> gw=1;</b></p><p><b> sw=1;</b></p><p><b> bw=0;</b></p>&l
65、t;p><b> qw=1;</b></p><p> P0=table[bai];</p><p><b> delay(1);</b></p><p><b> gw=1;</b></p><p><b> sw=1;</b></
66、p><p><b> bw=1;</b></p><p><b> qw=0;</b></p><p> P0=table[qian];</p><p><b> delay(1);</b></p><p><b> }</b>
67、;</p><p> void init() //初始化函數(shù)</p><p><b> {</b></p><p> TMOD=0x01;</p><p> TH0=(65536-20000)/256;</p><p> TL0=(65536-20000)%256;<
68、/p><p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p><b> TR0=1;</b></p><p><b> }</b></p><p> void main()<
69、/p><p><b> { </b></p><p><b> gw=0;</b></p><p><b> sw=0;</b></p><p><b> bw=0;</b></p><p><b> qw=0;&
70、lt;/b></p><p><b> bj=0;</b></p><p><b> led=1;</b></p><p><b> P0=0xff;</b></p><p> delay(2000);</p><p><b>
71、 P0=0x00;</b></p><p><b> P2=0Xff;</b></p><p> ge=shi=bai=qian=10;</p><p><b> init();</b></p><p><b> while(1)</b></p>
72、<p><b> {</b></p><p> //////////////////////////////////////////////////////////正負(fù)顯示</p><p><b> if(m==0)</b></p><p><b> {</b></p>
73、;<p> zhengshu=gettemp();</p><p> n=zhengshu;</p><p> if(neg_flag==0)</p><p><b> {</b></p><p> qian=zhengshu/1000;</p><p> bai=zhe
74、ngshu%1000/100;</p><p> shi=zhengshu%100/10;</p><p> ge=zhengshu%10;</p><p> if(qian==0)</p><p><b> {</b></p><p><b> qian=13;</b&
75、gt;</p><p> if(bai==0)</p><p><b> bai=13;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(neg_flag==1)</p>
76、<p><b> {</b></p><p><b> qian=10;</b></p><p> bai=zhengshu%1000/100;</p><p> shi=zhengshu%100/10;</p><p> ge=zhengshu%10;</p>
77、<p> if(bai==0)</p><p><b> {</b></p><p><b> qian=13;</b></p><p><b> bai=10;</b></p><p><b> }</b></p>&l
78、t;p><b> }</b></p><p><b> }</b></p><p> ///////////////////////////////////////////////////////上下限比較</p><p> if((n>=dingyih*10)||(n<=dingyil*10))
79、</p><p><b> {</b></p><p><b> bj=1;</b></p><p><b> led=0;</b></p><p> delay(25);</p><p><b> bj=~bj;</b>
80、;</p><p><b> led=~led;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> bj=0
81、;</b></p><p><b> led=1;</b></p><p><b> }</b></p><p> ///////////////////////////////////////////////////////////按鍵</p><p> if(m==1)
82、//功能鍵按下</p><p><b> {</b></p><p> biaozhi_1=1;</p><p> while(biaozhi_1) //啟動(dòng)上限設(shè)置</p><p><b> {</b></p><p><b> qian=11;<
83、;/b></p><p> if(dingyih<0)</p><p><b> { </b></p><p> ge= (-dingyih)%10;</p><p> if((-dingyih)%100>=10)</p><p><b> {</b&
84、gt;</p><p><b> bai=10;</b></p><p> shi=(-dingyih)%100/10; </p><p><b> }</b></p><p><b> else</b></p>
85、<p><b> {</b></p><p><b> bai=13;</b></p><p><b> shi=10;</b></p><p> } </p><p><b> }</b></p>
86、;<p><b> else </b></p><p><b> {</b></p><p> bai=dingyih%1000/100;</p><p> shi=dingyih%100/10;</p><p> ge=dingyih%10;</p>&l
87、t;p><b> }</b></p><p> if(k2==0) //加</p><p><b> {</b></p><p> delay(20);</p><p><b> if(k2==0)</b></p><p><b&
88、gt; {</b></p><p> dingyih++;</p><p> if(dingyih>=H)</p><p> dingyih=H;</p><p><b> }</b></p><p><b> }</b></p>
89、<p> if(k4==0) //減</p><p><b> {</b></p><p> delay(20);</p><p><b> if(k4==0)</b></p><p><b> {</b></p><p> d
90、ingyih--;</p><p> if(dingyih<L)</p><p> dingyih=L;</p><p><b> }</b></p><p><b> }</b></p><p> if(k3==0) //取消檢測(cè)及運(yùn)行</p>
91、<p><b> {</b></p><p> delay(20);</p><p><b> if(k3==0)</b></p><p><b> {</b></p><p> biaozhi_1=0;</p><p> bi
92、aozhi_2=0;</p><p><b> m=0;</b></p><p> dingyih=H;</p><p> dingyil=L;</p><p><b> EA=0;</b></p><p><b> ge=10;</b><
93、;/p><p><b> shi=10;</b></p><p><b> bai=10;</b></p><p><b> qian=10; </b></p><p><b> gw=0;</b></p><p><b&
94、gt; sw=0;</b></p><p><b> bw=0;</b></p><p><b> qw=0; </b></p><p><b> P0=0x40;</b></p><p> delay(50);</p><p>
95、;<b> EA=1;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(m==2) //再次按下了功能鍵,切換到下限設(shè)置</p><p><b> {</b></p>&
96、lt;p> biaozhi_1=0;</p><p> biaozhi_2=1;</p><p><b> }</b></p><p><b> }</b></p><p> while(biaozhi_2) //啟動(dòng)下限設(shè)置</p><p><b&g
97、t; {</b></p><p><b> qian=12;</b></p><p> if(dingyil<0)</p><p><b> {</b></p><p> ge= (-dingyil)%10;</p><p> if((-ding
98、yil)%100>=10)</p><p><b> {</b></p><p><b> bai=10;</b></p><p> shi=(-dingyil)%100/10; </p><p><b> }</b>&
99、lt;/p><p><b> else</b></p><p><b> {</b></p><p><b> bai=13;</b></p><p><b> shi=10;</b></p><p><b> }
100、</b></p><p><b> }</b></p><p> else //max than zero</p><p><b> {</b></p><p> bai=dingyil%1000/100;</p><p> shi=ding
101、yil%100/10;</p><p> ge=dingyil%10; </p><p><b> }</b></p><p> if(k2==0) //加</p><p><b> {</b></p><p> delay(20);</p&
102、gt;<p><b> if(k2==0)</b></p><p><b> {</b></p><p> dingyil++;</p><p> if(dingyil>=H)</p><p> dingyil=H;</p><p><b&
103、gt; }</b></p><p><b> }</b></p><p> if(k4==0) //減</p><p><b> {</b></p><p> delay(20);</p><p><b> if(k4==0)</b&
104、gt;</p><p><b> {</b></p><p> dingyil--;</p><p> if(dingyil<L)</p><p> dingyil=L;</p><p><b> }</b></p><p>&l
105、t;b> }</b></p><p> if(k3==0) //取消檢測(cè)及運(yùn)行</p><p><b> {</b></p><p> delay(20);</p><p><b> if(k3==0)</b></p><p><b>
106、 { </b></p><p> biaozhi_1=0;</p><p> biaozhi_2=0;</p><p><b> m=0;</b></p><p> dingyih=H;</p><p> dingyil=L;</p><p>&l
107、t;b> EA=0;</b></p><p><b> ge=10;</b></p><p><b> shi=10;</b></p><p><b> bai=10;</b></p><p><b> qian=10; </b>
108、;</p><p><b> gw=0;</b></p><p><b> sw=0;</b></p><p><b> bw=0;</b></p><p><b> qw=0; </b></p><p><b&g
109、t; P0=0x40;</b></p><p> delay(50);</p><p> EA=1; </p><p><b> }</b></p><p><b> }</b></p><p> if(m==0) //再次按下功能
110、鍵,確定以上設(shè)置</p><p> { EA=0;</p><p> biaozhi_1=0;</p><p> biaozhi_2=0;</p><p><b> ge=10;</b></p><p><b> shi=10;</b></p>
111、;<p><b> bai=10;</b></p><p><b> qian=10; </b></p><p><b> gw=0;</b></p><p><b> sw=0;</b></p><p><b> bw=
112、0;</b></p><p><b> qw=0; </b></p><p><b> P0=0x40;</b></p><p> delay(500);</p><p> EA=1;</p><p><b> } &l
113、t;/b></p><p> } </p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void timer0() interrup
114、t 1 //定時(shí)器0</p><p><b> {</b></p><p> TH0=(65536-20000)/256;</p><p> TL0=(65536-20000)%256;</p><p><b> if(m==0)</b></p><p> xi
115、anshi1(ge,shi,bai,qian);</p><p><b> if(m!=0)</b></p><p> xianshi2(ge,shi,bai,qian);</p><p><b> if(k1==0)</b></p><p><b> {</b><
116、;/p><p> delay(20);</p><p><b> if(k1==0)</b></p><p><b> {</b></p><p> while(!k1);</p><p><b> m++;</b></p><
117、p><b> if(m>2)</b></p><p><b> m=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)報(bào)告數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告--數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告---數(shù)字溫度計(jì)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)—數(shù)字溫度計(jì)
- 單片機(jī)數(shù)字溫度計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)—數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)——數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)—數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字溫度計(jì)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 數(shù)字溫度計(jì)--單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告--數(shù)字溫度計(jì)論文
- 溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論