單片機課程設計報告---數(shù)字溫度計設計_第1頁
已閱讀1頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  單片機課程設計報告</b></p><p><b>  數(shù)字溫度計</b></p><p>  2009年 9月 15日</p><p><b>  摘要</b></p><p>  本設計是一款簡單實用的小型數(shù)字溫度計,所采用的主要元件有傳感器1

2、8B20,單片機AT89S52,,四位共陰極數(shù)碼管一個,電容電阻若干。18B20支持“一線總線”接口,測量溫度范圍-55°C~+125°C。在-10~+85°C范圍內(nèi),精度為±0.5°C。18B20的精度較差為± 2°C ?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設備或過程控制、測溫類消費電子產(chǎn)品

3、等。</p><p>  本次數(shù)字溫度計的設計共分為五部分,主控制器,LED顯示部分,傳感器部分,復位部分,時鐘電路。主控制器即單片機部分,用于存儲程序和控制電路;LED顯示部分是指四位共陰極數(shù)碼管,用來顯示溫度;傳感器部分,即溫度傳感器,用來采集溫度,進行溫度轉(zhuǎn)換;復位部分,即復位電路。測量的總過程是,傳感器采集到外部環(huán)境的溫度,并進行轉(zhuǎn)換后傳到單片機,經(jīng)過單片機處理判斷后將溫度傳遞到數(shù)碼管顯示。本設計能完成的

4、溫度測量范圍是-55°C~+128°C,由于能力有限,不能實現(xiàn)報警功能。</p><p>  隨著時代的進步和發(fā)展,單片機技術已經(jīng)普及到我們生活,工作,科研,各個領域,已經(jīng)成為一種比較成熟的技術,本文將介紹一種基于單片機控制的數(shù)字溫度計,本溫度計屬于多功能溫度計,可以設置上下報警溫度,當溫度不在設置范圍內(nèi)時,可以報警。 </p><p>  關鍵詞:單片機,數(shù)字控制,溫

5、度計, DS18B20,AT89S52</p><p><b>  目錄</b></p><p>  1概述...................................................................................................................................

6、........ 3</p><p>  1.1 課程設計的目的和意義............................................................................ 3</p><p>  1.2 任務及要求3</p><p>  2 系統(tǒng)總體方案及硬件設計4</p><p>

7、  2.1系統(tǒng)總體方案設計4</p><p>  2.2系統(tǒng)硬件電路設計5</p><p><b>  3 軟件設計12</b></p><p>  3.1系統(tǒng)總體方案設計12</p><p>  3.2程序設計12</p><p><b>  4實驗仿真15</b&g

8、t;</p><p>  5課程設計體會16</p><p><b>  參考文獻17</b></p><p><b>  附1: 源程序代碼</b></p><p><b>  附2 :系統(tǒng)原理圖</b></p><p><b>  1

9、概述</b></p><p>  1.1 課程設計的目的和意義</p><p>  通過課程設計使我進一步熟悉了單片機的內(nèi)部結構和工作原理,掌握了單片機應用系統(tǒng)設計的基本方法和步驟;通過利用MCS-51單片機,理解單片機在自動化裝置中的作用以及掌握單片機的編程調(diào)試方法;通過設計一個簡單的實際應用輸入控制及顯示系統(tǒng),掌握protues和keil以及各種仿真軟件的使用。</p

10、><p>  目前溫度計的發(fā)展很快,從原始的玻璃管溫度計發(fā)展到了現(xiàn)在的熱電阻溫度計、熱電偶溫度計、數(shù)字溫度計、電子溫度計等等,溫度計中傳感器是它的重要組成部分,它的精度、靈敏度基本決定了溫度計的精度、測量范圍、控制范圍和用途等。傳感器應用極其廣泛,目前已經(jīng)研制出多種新型傳感器。但是,作為應用系統(tǒng)設計人員需要根據(jù)系統(tǒng)要求選用適宜的傳感器,并與自己設計的系統(tǒng)連接起來,從而構成性能優(yōu)良的監(jiān)控系統(tǒng)。</p>&

11、lt;p>  1.2 任務及要求</p><p>  設計一個簡單數(shù)字溫度計,能夠測量通常環(huán)境下的溫度,能夠?qū)崿F(xiàn)零下溫度的測量,能夠測量小數(shù)。</p><p>  2 系統(tǒng)總體方案及硬件設計</p><p>  2.1系統(tǒng)總體方案設計</p><p>  2..1.1 方案論證</p><p>  方案一: 由

12、于本設計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應,在將隨被測溫度變化的電壓或電流采集過來,進行A/D轉(zhuǎn)換后,就可以用單片機進行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設計需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。</p><p>  方案二:考慮到用溫度傳感器,在單片機電路設計中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易

13、直接讀取被測溫度值,進行轉(zhuǎn)換,就可以滿足設計要求。</p><p>  從以上兩種方案,很容易看出,采用方案二,電路比較簡單,軟件設計也比較簡單,故采用了方案二。</p><p><b>  2.1.2原理框圖</b></p><p>  溫度計電路設計總體設計框圖如圖2-1所示,控制器采用單片機AT89S52,溫度傳感器采用DS18B20,用

14、四位LED數(shù)碼管以并口傳送數(shù)據(jù)實現(xiàn)溫度顯示。</p><p><b>  圖2-1</b></p><p>  2.1.3功能模塊連接簡介</p><p>  溫度傳感器的接口2連接單片機P3.4,用于傳送數(shù)據(jù),接口3連接電源,接口1接地;數(shù)碼管的段碼輸入端連接單片機的P0端口,公共端接P2.4-P2.7,單片機的P2.0-P2.3接控制鍵盤,

15、時鐘電路連接XTAL,復位電路連接RST。</p><p>  2.2系統(tǒng)硬件電路設計</p><p>  2.2.1單片機的選擇</p><p>  單片機AT89S52具有低電壓供電和體積小等特點,四個端口只需要三個口就能滿足電路系統(tǒng)的設計需要,很適合便攜手持式產(chǎn)品的設計使用系統(tǒng)可用二節(jié)電池供電,此處我們采用USB接口供電,省去了大量空間,更適合于便攜式產(chǎn)品的應

16、用。</p><p>  AT89S52主要特性:</p><p>  與MCS-51單片機產(chǎn)品兼容 4K字節(jié)在系統(tǒng)可編程Flash存儲器</p><p>  1000次擦寫周期 全靜態(tài)工作:0Hz—33MHz</p><p>  32個可編程I/O口線 2個16位

17、定時器/計數(shù)器</p><p>  6個中斷源 全雙工UART串行通道</p><p>  低功耗空閑和掉電模式 掉電后中斷可喚醒</p><p>  看門狗定時器 雙數(shù)據(jù)指針</p><p>  靈活的ISP編程

18、 4.0---5.5V電壓工作范圍</p><p>  單片機AT89S52的內(nèi)部結構總框圖。它可以劃分為CPU、存儲器、并行口、串行口、定時/計數(shù)器和中斷邏輯幾個部分。 </p><p>  AT89S52外部引腳功能如圖2-2所示。</p><p><b>  圖2-2 </b></p><p&

19、gt;  本次設計需要注意的幾個端口:</p><p>  P0口(39—32):是一組8位漏極開路行雙向I/O口,也既地址/數(shù)據(jù)總線復用口??勺鳛檩敵隹谑褂脮r,每位可吸收電流的方式驅(qū)動8個TTL邏輯電路,對端口寫“1”可作為高阻抗輸入輸入端用。在訪問外部數(shù)據(jù)存儲器時,這組口線分時轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復用,在訪問期間激活內(nèi)部上拉電阻。在Flash編程時,PO口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校

20、驗時,要求接上拉電阻。</p><p>  P3口(10—17):是一組帶有內(nèi)部上拉電阻的8位雙向I/O口,,P1的輸入緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,它們被內(nèi)部上拉電阻拉高并可作為輸出端口。作輸出端口時,被外部拉低的P3口將用上拉電阻輸出電流。P3口除可作為一般的I/O口線外,更重要的用途是它的第二功能,如圖2-3所示:</p><p><

21、b>  圖2-3</b></p><p>  部分控制總線的功能:</p><p>  /Vpp(31):內(nèi)部和外部程序存儲器選擇線。=0時訪問外部ROM 0000H—FFFFH;=1時,地址0000H—0FFFH空間訪問內(nèi)部ROM,地址1000H—FFFFH空間訪問外部ROM。本次設計接高電平。</p><p>  XTAL1(19)和XTAL2

22、(18):使用內(nèi)部振蕩電路時,用來接石英晶體和電容;使用外部時鐘時,用來輸入時鐘脈沖。</p><p>  RST/VPD(9):復位信號輸入端。AT89S52接能電源后,在時鐘電路作用下,該腳上出現(xiàn)兩個機器周期以上的高電平,使內(nèi)部復位。第二功能是VPD,即備用電源輸入端。當主電源Vcc發(fā)生故障,降低到低電平規(guī)定值時,VPD將為RAM提供備用電源,發(fā)保證存儲在RAM中的信號不丟失。</p><

23、p>  2.2.2時鐘電路設計</p><p>  AT89S52時鐘有兩種方式產(chǎn)生,即內(nèi)部方式和外部方式。(如圖2-4所示)AT89C51中有一個構成內(nèi)部震蕩器的高增益反向放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外石英或陶瓷震蕩器一起構成自激震蕩器震蕩電路如圖。外接石英晶體(或陶瓷部時鐘,采用外部時鐘如圖所示。在這種情況下,外部時鐘脈沖接到XTAL1端

24、,既內(nèi)部時鐘發(fā)生器的輸入端,XTAL2懸空。由于外部時鐘信號是通過一個2分頻的觸發(fā)器后作為內(nèi)部時鐘信號的所以外部時鐘的占空比沒有特殊要求,但最小高電平持續(xù)的時間和最大低電平持續(xù)的時間應符合產(chǎn)品技術條件的要求。本次設計采用內(nèi)部震蕩電路,瓷片電容采用30P,晶振采用12MHZ</p><p>  內(nèi)部震蕩電路 外部震蕩電路</p><p><b>  圖2-4&

25、lt;/b></p><p>  2.2.3復位電路設計</p><p>  單片機系統(tǒng)的復位電路在這里采用的是上電+按鈕復位電路形式,其中電阻R采用10KΩ的阻值,電容采用電容值為10μ的電解電容。具體連接電路如圖3-5所示:</p><p><b>  圖2-5</b></p><p>  2.2.4 溫度顯示

26、電路</p><p>  四位共陰極數(shù)碼管,能夠顯示小數(shù)和負溫度。零下時,1和2分別顯示負號。當溫度超過99.9時,四個數(shù)碼管全部亮。</p><p>  2.2.5溫度傳感器</p><p>  DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的

27、編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點如下:</p><p>  ● 獨特的單線接口僅需要一個端口引腳進行通信;</p><p>  ● 多個DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)功能;</p><p>  ● 可通過數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;</p><p>  ● 溫度以9或

28、12位數(shù)字;</p><p>  ● 用戶可定義報警設置;</p><p>  ● 報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件;</p><p>  ● 負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作; </p><p>  DS18B20采用3腳PR-35封裝或8腳SOIC封裝,其內(nèi)部結構框

29、圖如圖2-6所示。</p><p><b>  圖2-6</b></p><p>  64位ROM的結構開始8位是產(chǎn)品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前面56位的CRC檢驗碼,這也是多個DS18B20可以采用一線進行通信的原因。溫度報警觸發(fā)器TH和TL,可通過軟件寫入戶報警上下限。</p><p>  DS18B2

30、0溫度傳感器的內(nèi)部存儲器還包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結構為8字節(jié)的存儲器,結構如圖2.3所示。頭2個字節(jié)包含測得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復位時被刷新。第5個字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時寄存器中的分辨率轉(zhuǎn)換為相應精度的溫度數(shù)值。該字節(jié)各位的定義如圖2-7所示。低5位一直為1,TM是工作模式位,用于設置

31、DS18B20在工作模式還是在測試模式,DS18B20出廠時該位被設置為0,用戶要去改動,R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設置分辨率。</p><p><b>  圖2-7</b></p><p>  DS18B20溫度轉(zhuǎn)換的時間比較長,而且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時間越長。因此,在實際應用中要將分辨率和轉(zhuǎn)換時間權衡考慮。溫度傳感器18B20匯編程序,采用

32、器件默認的12位轉(zhuǎn)化,最大轉(zhuǎn)化時間750微秒 ,可以將檢測到的溫度直接顯示到AT89C52的兩個數(shù)碼管上。 </p><p>  表1 DS18B20溫度轉(zhuǎn)換時間表</p><p>  高速暫存RAM的第6、7、8字節(jié)保留未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出前面所有8字節(jié)的CRC碼,可用來檢驗數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。</p><p>  當DS18B20接收

33、到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高速暫存存儲器的第1、2字節(jié)。單片機可以通過單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時低位在先,高位在后,數(shù)據(jù)格式以0.0625℃/LSB式表示。</p><p>  當符號位S=0時,表示測得的溫度值為正值,可以直接將二進制位轉(zhuǎn)換為十進制;當符號位S=1時,表示測得的溫度值為負值,要先將補碼變成原碼,再計算十進制數(shù)值。</p&g

34、t;<p>  DS18B20完成溫度轉(zhuǎn)換后,就把測得的溫度值與RAM中的TH、TL字節(jié)內(nèi)容作比較。若T>TH或T<TL,則將該器件內(nèi)的報警標志位置位,并對主機發(fā)出的報警搜索命令做出響應。因此,可用多只DS18B20同時測量溫度并進行報警搜索。</p><p>  在64位ROM的最高有效字節(jié)中存儲有循環(huán)冗余檢驗碼(CRC)。主機ROM的前56位來計算CRC值,并和存入DS18B20的CRC值作比較

35、,以判斷主機收到的ROM數(shù)據(jù)是否正確。</p><p>  另外,由于DS18B20單線通信功能是分時完成的,它有嚴格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作按協(xié)議進行。操作協(xié)議為:初使化DS18B20(發(fā)復位脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)。</p><p><b>  分別說明如下:</b></p><

36、p>  1、初始化 單總線的所有處理均從初始化開始。初始化過程是主機通過向作為從機的DS18B20芯片發(fā)一個有時間寬度要求的初始化脈沖實現(xiàn)的。初始化后,才可進行讀寫操作。</p><p>  2 、ROM操作命令 總線主機檢測到DS18B20的存在 便可以發(fā)出ROM操作命令之一 這些命令表.2:</p><p>  表2 ROM操作命令</p><p>

37、;  3、存儲器操作 命令如表.3: </p><p>  表.3 存儲器操作命令</p><p><b>  3 軟件設計</b></p><p>  3.1系統(tǒng)總體方案設計</p><p>  本次課程設計采用的是protues軟件仿真,用Keil軟件進行編譯。Protues軟件是英國Labcenter elec

38、tronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。</p><p>  軟件部分由主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計算溫度子程序,顯示數(shù)據(jù)刷新子程序,判斷程序,按鍵檢測等。</p><p>  圖3-1 主程序流程</p><p><b>  3.

39、2程序設計</b></p><p><b>  3.2.1 主程序</b></p><p>  主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量的當前溫度值,溫度測量每1s進行一次。這樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程見圖3-1所示。</p><p>  3.2.2 讀出溫度子程序</p>

40、<p>  讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進行CRC校驗,校驗有錯時不進行溫度數(shù)據(jù)的改寫。其程序流程圖如圖3-2所示</p><p>  圖3-2 讀出溫度子程序流程</p><p>  3.2.3二進制轉(zhuǎn)換BCD碼命令子程序 </p><p>  二進制轉(zhuǎn)換BCD碼命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,當采用12位分辨率時轉(zhuǎn)

41、換時間約為750ms,在本程序設計中采用1s顯示程序延時法等待轉(zhuǎn)換的完成。二進制轉(zhuǎn)換BCD碼命令子程序流程圖,如圖3-3</p><p>  圖3-3二進制轉(zhuǎn)換BCD碼流程圖</p><p>  3.2.4 計算溫度子程序</p><p>  將RAM中讀取進行BCD碼的轉(zhuǎn)換運算,并進行溫度值正負的判定,其程序流程圖如圖4-4所示。</p><p

42、>  圖3-4  測量溫度流程圖 </p><p>  3.2.5溫度數(shù)據(jù)顯示子程序</p><p>  顯示數(shù)據(jù)子程序主要是對顯示緩沖器中的顯示數(shù)據(jù)進行刷新操作,查表送段碼至LED,開位碼顯示,采用動態(tài)掃描方式</p><p><b>  4 實驗仿真</b></p><p><b>  圖4-1<

43、;/b></p><p>  系統(tǒng)仿真圖如圖4-1所示,加上復位電路和時鐘電路,在protues構成了完整的仿真圖,輸入程序后就能夠進行仿真。</p><p><b>  調(diào)試結果分析:</b></p><p>  本次數(shù)字溫度計能夠比較精確的測量一般溫度,測量范圍是-55~128,并且能夠測出小數(shù)。</p><p&g

44、t;<b>  5 課程設計體會</b></p><p>  本次的課程設計使我們進一步鞏固了書本上的知識,做到了學以致用。這是我們第二次自己動手設計的電路,通過系統(tǒng)仿真軟件protues和編譯軟件keil,使我們進一步了解了單片機的設計制作過程,其中最為困難的是軟件部分,即編程部分,我們上網(wǎng)找了好多資料,雖然經(jīng)過自己的修改,但還是有很多功能不能實現(xiàn),如報警和溫度上下限設置。由于protu

45、es并不是很熟練,在使用的過程中有很多原件的名稱不知道,從而花費了大量的時間在網(wǎng)上查找,今后應該在這方面多多努力。最后一步的焊接硬件也遇到了不少麻煩,數(shù)碼管引線太多容易弄混,三級管放大電路中,三極管容易接反??偨Y經(jīng)驗的時候我們得出這樣的結論,學習應該學以致用,有目的的去學習,如果學了不用等于沒學。其次,要學以致用,就要理論聯(lián)系實際,這樣才會取得事半功倍的效果。</p><p><b>  參考文獻<

46、;/b></p><p>  [1] 康華光,陳大欽,張林.電子技術基礎 模擬部分(第五版).高等教育出版社.2006.103-108</p><p>  [2]余發(fā)山.單片機原理及應用技術.中國礦業(yè)大學出版社,2003.31-32</p><p>  [3] 51單片機學習網(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;//按鍵標志位</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>  //////////////////////////////////////////////////////////正負顯示</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) //啟動上限設置</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) //取消檢測及運行</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) //再次按下了功能鍵,切換到下限設置</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) //啟動下限設置</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) //取消檢測及運行</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、鍵,確定以上設置</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 //定時器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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論