![溫度上下限可調(diào)報(bào)警器_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/89efcd1f-568a-4559-b9f9-ce87ba827e0b/89efcd1f-568a-4559-b9f9-ce87ba827e0b1.gif)
![溫度上下限可調(diào)報(bào)警器_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/89efcd1f-568a-4559-b9f9-ce87ba827e0b/89efcd1f-568a-4559-b9f9-ce87ba827e0b2.gif)
![溫度上下限可調(diào)報(bào)警器_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/89efcd1f-568a-4559-b9f9-ce87ba827e0b/89efcd1f-568a-4559-b9f9-ce87ba827e0b3.gif)
![溫度上下限可調(diào)報(bào)警器_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/89efcd1f-568a-4559-b9f9-ce87ba827e0b/89efcd1f-568a-4559-b9f9-ce87ba827e0b4.gif)
![溫度上下限可調(diào)報(bào)警器_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/89efcd1f-568a-4559-b9f9-ce87ba827e0b/89efcd1f-568a-4559-b9f9-ce87ba827e0b5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、大連理工大學(xué) 單片機(jī)課程設(shè)計(jì) 題 目: 溫度上下限可調(diào)報(bào)警器 專 業(yè): 測(cè)控技術(shù)與儀器 姓 名: 謝飛 學(xué) 號(hào): 201161192 指導(dǎo)教師: 張?jiān)?老師 2015 年 1 月 6日 【內(nèi)容摘要】 隨著時(shí)代的進(jìn)步和發(fā)展,單片機(jī)技術(shù)已經(jīng)普及到我們生活,工作,科研,各個(gè)領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù),單片機(jī)具有體積小、功耗低、控制功能強(qiáng)、擴(kuò)展靈活、微型化和使用方便等優(yōu)點(diǎn),廣泛應(yīng)用于儀器儀表中,結(jié)合不同種類的傳感器,可實(shí)現(xiàn)諸如電壓、濕度、溫度、速度、硬度、壓力等的物理量的測(cè)量。本文將介紹一種基于單片機(jī)控制理論及其應(yīng)用系統(tǒng)設(shè)計(jì)的數(shù)字溫度計(jì)。 本文主要介紹了一個(gè)基于AT89C51單片機(jī)的測(cè)溫系統(tǒng),
2、詳細(xì)描述了利用數(shù)字溫度傳感器DS18B20開發(fā)測(cè)溫系統(tǒng)的過(guò)程,重點(diǎn)對(duì)傳感器在單片機(jī)喜愛(ài)的硬件連接,軟件編程以及各模塊系統(tǒng)流程進(jìn)行了詳盡分析,對(duì)各部分的電路也進(jìn)行一一介紹,該系統(tǒng)可以方便的是實(shí)現(xiàn)溫度采集和顯示,并可以根據(jù)需要任意設(shè)定上下限報(bào)警溫度,它使用起來(lái)方便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點(diǎn),適合我們?nèi)粘I詈凸まr(nóng)業(yè)生產(chǎn)中的溫度測(cè)量,也可以當(dāng)做溫度處理模塊嵌入其他系統(tǒng)中,作為其他主系統(tǒng)的輔助擴(kuò)展。DS18B20和AT89C51結(jié)合實(shí)現(xiàn)最簡(jiǎn)溫度檢測(cè)系統(tǒng),該系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,抗干擾能力強(qiáng),適合與惡劣環(huán)境下進(jìn)行現(xiàn)場(chǎng)溫度測(cè)量,有廣泛的應(yīng)用前景。 本設(shè)計(jì)首先是確定目標(biāo),氣候是各個(gè)功能模塊
3、的設(shè)計(jì),再在Proteus軟件上進(jìn)行仿真,修改,仿真。本溫度計(jì)屬于多功能溫度計(jì),可以設(shè)置上下報(bào)警溫度,當(dāng)溫度不在設(shè)置范圍內(nèi)時(shí),可以報(bào)警。 【引 言】 單片機(jī)技術(shù)作為計(jì)算機(jī)技術(shù)的一個(gè)分支,廣泛地應(yīng)用于工業(yè)控制,智能儀器儀表,機(jī)電一體化產(chǎn)品,家用電器等各個(gè)領(lǐng)域。學(xué)生在課程設(shè)計(jì),畢業(yè)設(shè)計(jì),科研項(xiàng)目中會(huì)廣泛應(yīng)用到單片機(jī)知識(shí),而且,進(jìn)入社會(huì)后也會(huì)廣泛接觸到單片機(jī)的工程項(xiàng)目。鑒于此,提高“單片機(jī)原理及應(yīng)用”課的教學(xué)效果,讓學(xué)生參與課程設(shè)計(jì)實(shí)習(xí)甚為重要。單片機(jī)應(yīng)用技術(shù)涉及的內(nèi)容十分廣泛,如何使學(xué)生在有限的時(shí)間內(nèi)掌握單片機(jī)應(yīng)用的基本原理及方法,是一個(gè)很有價(jià)值的教學(xué)項(xiàng)目。為此,我們進(jìn)行了“單片機(jī)的學(xué)習(xí)與應(yīng)用”方
4、面的課程設(shè)計(jì),鍛煉學(xué)生的動(dòng)腦動(dòng)手以及協(xié)作能力。 單片機(jī)課程設(shè)計(jì)是針對(duì)模擬電子技術(shù),數(shù)字邏輯電路,電路,單片機(jī)的原理及應(yīng)用課程的要求,對(duì)我們進(jìn)行綜合性實(shí)踐訓(xùn)練的實(shí)踐學(xué)習(xí)環(huán)節(jié),它包括選擇課設(shè)任務(wù)、軟件設(shè)計(jì),硬件設(shè)計(jì),調(diào)試和編寫課設(shè)報(bào)告等實(shí)踐內(nèi)容。通過(guò)此次課程設(shè)計(jì)實(shí)現(xiàn)以下三個(gè)目標(biāo):第一,讓學(xué)生初步掌握單片機(jī)課程的試驗(yàn)、設(shè)計(jì)方法,即學(xué)生根據(jù)設(shè)計(jì)要求和性能約束,查閱文獻(xiàn)資料,收集、分析類似的相關(guān)題目,并通過(guò)元器件的組裝調(diào)試等實(shí)踐環(huán)節(jié),使最終硬件電路達(dá)到題目要求的性能指標(biāo);第二,課程設(shè)計(jì)為后續(xù)的畢業(yè)設(shè)計(jì)打好基礎(chǔ),畢業(yè)設(shè)計(jì)是系統(tǒng)的工程設(shè)計(jì)實(shí)踐,而課程設(shè)計(jì)的著眼點(diǎn)是讓學(xué)生開始從理論學(xué)習(xí)的軌道上逐漸引向?qū)嶋H運(yùn)用
5、,從已學(xué)過(guò)的定性分析、定量計(jì)算的方法,逐步掌握工程設(shè)計(jì)的步驟和方法,了解科學(xué)實(shí)驗(yàn)的程序和實(shí)施方法。第三,培養(yǎng)學(xué)生勤于思考樂(lè)于動(dòng)手的習(xí)慣,同時(shí)通過(guò)設(shè)計(jì)并制作單片機(jī)類產(chǎn)品,使學(xué)生能夠自己不斷地學(xué)習(xí)接受新知識(shí),通過(guò)多人的合作解決現(xiàn)實(shí)中存在的問(wèn)題,從而不斷地增強(qiáng)學(xué)生在該方面的自信心及興趣,也提高了學(xué)生的動(dòng)手能力,對(duì)學(xué)生以后步入社會(huì)參加工作打下一定良好的實(shí)踐基礎(chǔ)。一、設(shè)計(jì)方案1.設(shè)計(jì)務(wù)任和要求1、基本范圍1502、精度誤差小于0.53、LCD 數(shù)碼直讀顯示4、可以任意設(shè)定溫度的上下限報(bào)警功能.2.方案辯證1溫度計(jì)軟件設(shè)計(jì)流程圖: 設(shè)置堆棧指針將溫度轉(zhuǎn)換為BCD碼發(fā)讀存儲(chǔ)器命令讀溫度數(shù)據(jù)復(fù)位DS18B20
6、發(fā)跳過(guò)ROM命令顯示緩沖區(qū)初始化更新數(shù)據(jù)緩沖區(qū)延時(shí)發(fā)溫度轉(zhuǎn)換命令復(fù)位DS18B20發(fā)跳過(guò)ROM命令開始 3.元器件的選取a.單片機(jī)芯片的選取:方案一:采用89C51芯片作為硬件核心,利用Flash ROM,內(nèi)部具有4KB ROM 存儲(chǔ)空間,能于3V的超低壓工作,而且與MCS-51系列單片機(jī)完全兼容,但是運(yùn)用于電路設(shè)計(jì)中時(shí)由于不具備ISP在線編程技術(shù), 當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),對(duì)芯片的多次拔插會(huì)對(duì)芯片造成一定的損壞。方案二:采用AT89C52單片機(jī)作為硬件核心,該單片機(jī)指令代碼完全兼容傳統(tǒng)的8051單片機(jī)。AT89C52的工作電壓為5.5-3.4
7、V,工作頻率范圍0-80MHz,程序存儲(chǔ)器flash容量為8KB,隨機(jī)存儲(chǔ)器RAM空間為512字節(jié),完全滿足設(shè)計(jì)溫度控制系統(tǒng)的要求。綜上所述:本課設(shè)中單片機(jī)芯片采用AT89C52。 溫度傳感器的選?。?方案一:采用熱敏電阻傳感器。利用熱敏電阻隨溫度變化而顯著變化,能直接將溫度的變化轉(zhuǎn)換為能量的變化,進(jìn)而制成溫度計(jì)。但是其測(cè)溫傳感器比較復(fù)雜,而且不易通過(guò)編制程序來(lái)控制測(cè)溫精度,增大系統(tǒng)設(shè)計(jì)的難度。 方案二: 采用DS18B20溫度傳感器。DS18B20的內(nèi)部3腳(或8腳)封裝;使用特有的溫度測(cè)量技術(shù),將被測(cè)溫度轉(zhuǎn)換成數(shù)值信號(hào);3.05.5V的電源供電方式和寄生電源供電方式;ROM由64位二進(jìn)制數(shù)
8、字組成,共分為8個(gè)字節(jié);RAM由9個(gè)字節(jié)的高速暫存器和非易失性電擦寫ROM組成。綜上所述:溫度傳感器選取智能測(cè)溫器件DS18B20。本設(shè)計(jì)顯示電路采用1602液晶顯示模塊芯片(protues中用LM016l代替)。3系統(tǒng)最終設(shè)計(jì)方案:綜上各方案所述,對(duì)此次課設(shè)的方案選定: 采用AT89C52作為主控制系統(tǒng); LM016l液晶顯示模塊芯片作為溫度數(shù)據(jù)顯示裝置;而智能溫度傳感器DS18B20器件作為測(cè)溫電路主要組成部分。至此,系統(tǒng)最終方案確定。二、設(shè)計(jì)方案的總體設(shè)計(jì)框圖溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì)方框圖如圖所示,控制器采用單片機(jī)AT89C52,溫度傳感器采用DS18B20,用1602液晶顯示屏以串口傳送
9、數(shù)據(jù)實(shí)現(xiàn)溫度顯示。2.1硬件電路框圖: 單片機(jī)芯片STC89C52RC復(fù)位電路晶振控制1602 顯示器溫度檢測(cè)電路DS18B20報(bào)警溫度調(diào)整鍵蜂鳴器圖總體設(shè)計(jì)方框圖2.2硬件電路概述:系統(tǒng)由單片機(jī)最小系統(tǒng)、顯示電路、按鍵、溫度傳感器等組成。本電路是由STC89C52RC單片機(jī)為控制核心,具有與8051系列單片機(jī)完全兼容,程序加密等功能,8KB字節(jié)可編程閃存,工作電壓范圍為2.76V,全靜態(tài)工作頻率為024MHZ;顯示電路由1602液晶顯示模塊芯片,可以進(jìn)行多行顯示;溫度報(bào)警按鍵設(shè)為五個(gè),可以顯示華氏溫度,調(diào)節(jié)高低報(bào)警溫度;溫度傳感器電路主要由DS18B20測(cè)溫器件構(gòu)成,該器件主要功能有:采用單
10、總線技術(shù);每只DS18B20具有一個(gè)獨(dú)立的不可修改的64位序列號(hào);低壓供電,電源范圍為35V;測(cè)溫范圍為-55+125,誤差為±0.5;復(fù)位電路是10K電阻構(gòu)成的上電自動(dòng)復(fù)位。2.3主控電路單片機(jī)STC89C52RC 具有低電壓供電和體積小等特點(diǎn),四個(gè)端口只需要兩個(gè)口就能滿足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(tǒng)可用二節(jié)電池供電。晶振采用12MHZ。主控芯片8051 晶振電路2.4顯示電路 本設(shè)計(jì)顯示電路采用1602液晶顯示模塊芯片,該芯片可現(xiàn)實(shí)16x2個(gè)字符,比以前的七段數(shù)碼管LED顯示器在顯示字符的數(shù)量上要多得多。另外,由于1602芯片編程比較簡(jiǎn)單,界面直觀,因此
11、更加易于使用者的操作和觀測(cè)。顯示器各個(gè)引腳說(shuō)明1602A芯片的接口信號(hào)說(shuō)明圖 液晶顯示電路2.5報(bào)警溫度調(diào)節(jié)電路本系統(tǒng)一共設(shè)置了四個(gè)按鍵,K1鍵只是按一下上限報(bào)警溫度加1,松開后恢復(fù)顯示正常溫度,K2鍵按一下上限報(bào)警溫度減1,松開后恢復(fù)顯示正常溫度,當(dāng)調(diào)節(jié)的上限報(bào)警溫度與環(huán)境實(shí)際的溫度相比,環(huán)境實(shí)際溫度高于上限報(bào)警溫度時(shí)系統(tǒng)會(huì)出現(xiàn)聲音報(bào)警及燈光警示,同理,K3,K4的調(diào)節(jié)方法一樣,當(dāng)環(huán)境實(shí)際溫度低于下限報(bào)警溫度時(shí),系統(tǒng)出現(xiàn)報(bào)警。圖 報(bào)警點(diǎn)調(diào)節(jié)電路2.6溫度傳感器測(cè)溫原理及測(cè)溫電路DS18B20測(cè)溫原理預(yù)置斜率累加器比較低溫度系數(shù)振蕩器計(jì)數(shù)器1溫度寄存器Tx預(yù)置=0高溫度系數(shù)振蕩器-0計(jì)數(shù)器2T
12、1加1停止T2 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,可通過(guò)軟件寫入戶報(bào)警上下限。 DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如圖4所示。頭2個(gè)字節(jié)包含測(cè)得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相
13、應(yīng)精度的溫度數(shù)值。該字節(jié)各位的定義如圖5所示。低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式,DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動(dòng),R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來(lái)設(shè)置分辨率。DS18B20的測(cè)溫原理是這這樣的,器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給減法計(jì)數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號(hào)作為減法計(jì)數(shù)器2的脈沖輸入。器件中還有一個(gè)計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DS18B20就對(duì)低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù)進(jìn)而完成溫度測(cè)量。計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器來(lái)決定,每次測(cè)
14、量前,首先將最低溫所對(duì)應(yīng)的一個(gè)基數(shù)分別置入減法計(jì)數(shù)器1、溫度寄存器中,計(jì)數(shù)器1和溫度寄存器被預(yù)置在最低溫所對(duì)應(yīng)的一個(gè)基數(shù)值。減法計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器計(jì)數(shù)到0時(shí),停止溫度寄存器的累加,此時(shí)溫度寄存器中的數(shù)值就是所測(cè)溫度值。其輸出用于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)器門仍未關(guān)閉就重復(fù)上述過(guò)程,直到溫度寄存器值大致被測(cè)溫度值。測(cè)溫電路三、系統(tǒng)軟件算法設(shè)計(jì)整個(gè)系統(tǒng)是由硬件配合軟件來(lái)實(shí)現(xiàn)的,在硬件確定后,編
15、寫的軟件的功能也就基本定型了。所以軟件的功能大致可分為兩個(gè)部分:一是監(jiān)控,這也是系統(tǒng)的核心部分,二是執(zhí)行部分,完成各個(gè)具體的功能。系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計(jì)算溫度子程序,顯示數(shù)據(jù)刷新子程序等。3.1主程序主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測(cè)量的當(dāng)前溫度值,溫度測(cè)量每1s進(jìn)行一次。這樣可以在一秒之內(nèi)測(cè)量一次被測(cè)溫度,其程序流程見(jiàn)圖所示。 Y發(fā)DS18B20復(fù)位命令發(fā)跳過(guò)ROM命令發(fā)讀取溫度命令讀取操作,CRC校驗(yàn)9字節(jié)完?CRC校驗(yàn)正?確?移入溫度暫存器結(jié)束NNY初始化調(diào)用顯示子程序1S到?初次上電讀出溫度值溫度計(jì)算處理顯示數(shù)據(jù)刷
16、新發(fā)溫度轉(zhuǎn)換開始命令NYNY 圖 主程序流程圖 圖 讀溫度流程圖 3.2讀出溫度子程序讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如圖示發(fā)DS18B20復(fù)位命令發(fā)跳過(guò)ROM命令發(fā)溫度轉(zhuǎn)換開始命令 結(jié)束 圖 溫度轉(zhuǎn)換流程圖3.3溫度轉(zhuǎn)換命令子程序溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,當(dāng)采用12位分辨率時(shí)轉(zhuǎn)換時(shí)間約為750ms,在本程序設(shè)計(jì)中采用1s顯示程序延時(shí)法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程圖如上圖。3.4 計(jì)算溫度子程序計(jì)算溫度子程序?qū)AM中讀取值進(jìn)行BCD碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,其程序流程
17、圖如圖所示。 開始溫度零下?溫度值取補(bǔ)碼置“”標(biāo)志計(jì)算小數(shù)位溫度BCD值 計(jì)算整數(shù)位溫度BCD值 結(jié)束置“+”標(biāo)志NY 圖計(jì)算溫度流程圖3.5 顯示數(shù)據(jù)刷新子程序溫度數(shù)據(jù)移入顯示寄存器十位數(shù)0?百位數(shù)0?十位數(shù)顯示符號(hào)百位數(shù)不顯示百位數(shù)顯示數(shù)據(jù)(不顯示符號(hào)) 結(jié)束NNYY顯示數(shù)據(jù)刷新子程序主要是對(duì)顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高顯示位為0時(shí)將符號(hào)顯示位移入下一位。程序流程圖如圖。圖顯示數(shù)據(jù)刷新流程圖3.6 1602的液晶顯示1602液晶顯示流程圖四、軟件仿真4.1系統(tǒng)仿真設(shè)計(jì)本設(shè)計(jì)是在Proteus環(huán)境下進(jìn)行仿真的,仿真所用到的器件有:?jiǎn)纹瑱C(jī)AT89C51,DS1820溫度傳感器,蜂
18、鳴器,液晶顯示器,一些電阻,電容等。仿真結(jié)果如下:正常溫度下超過(guò)高溫報(bào)警 低于低溫下限報(bào)警 4.2系統(tǒng)原理圖 五、總結(jié)與體會(huì)這次的課程設(shè)計(jì)做的比較簡(jiǎn)單。主要是用到1602,ds18d20按鍵,和揚(yáng)聲器。1602在接電阻排的時(shí)候少了一個(gè)電源電路導(dǎo)致無(wú)法顯示。在15腳上加高電壓就可以解決這點(diǎn)以后要注意。在蜂鳴器的按裝的時(shí)候沒(méi)有安裝三極管導(dǎo)致蜂鳴器無(wú)開關(guān)狀態(tài)不能報(bào)警。在開發(fā)板上可以實(shí)現(xiàn),導(dǎo)致在PCB版上無(wú)法實(shí)現(xiàn)。開發(fā)板上用的是LM2003要在PCB版上實(shí)現(xiàn)最簡(jiǎn)單的是加一個(gè)達(dá)林頓晶體管。在寫程序的過(guò)程中很多都用的是模塊函數(shù)在用到C語(yǔ)言的時(shí)候比較低級(jí)的錯(cuò)誤還是會(huì)有的。例如在if語(yǔ)句中倆句的時(shí)候沒(méi)有加導(dǎo)致
19、程序無(wú)法編譯。C語(yǔ)言還需要加強(qiáng)學(xué)習(xí)。在寫長(zhǎng)程序的時(shí)候在后面加上必要的標(biāo)注是很重要的。如果不加等寫完后就很難讀懂自己寫的程序。再本設(shè)計(jì)中單片機(jī)用到了P0,P12,P2口。P1口只用到一個(gè)口還可以擴(kuò)展幾個(gè)報(bào)警燈。高溫紅燈報(bào)警低溫綠燈報(bào)警這個(gè)是完成后想到的。以后又機(jī)會(huì)會(huì)實(shí)現(xiàn)的。在1602顯示電路的時(shí)候要加一個(gè)10K的上拉電阻。 在電路設(shè)計(jì)的時(shí)候總要先用仿真仿真成功之后才實(shí)際接線的。但是最后的成品卻不一定與仿真時(shí)完全一樣,因?yàn)?,再?shí)際接線中有著各種各樣的條件制約著。而且,在仿真中無(wú)法成功的電路接法,在實(shí)際中因?yàn)樾酒旧淼奶匦远軌虺晒?。所以,在設(shè)計(jì)時(shí)應(yīng)考慮兩者的差異,從中找出最適合的設(shè)計(jì)方法。在電腦上
20、仿真在開發(fā)板上成功但在PCB版上不一定能成功。要熟悉原理以后才能少走些彎路成功的完成作品從這次的課程設(shè)計(jì)中,我真真正正的意識(shí)到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的寫與讀的過(guò)程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。通過(guò)這次對(duì)溫度可調(diào)上下限檢測(cè)報(bào)警設(shè)計(jì)與制作,讓我了解了設(shè)計(jì)電路的程序,也讓我了解了關(guān)于溫度可調(diào)上下限檢測(cè)報(bào)警的原理與設(shè)計(jì)理念。附錄:/*include<reg52.h> #include<stdio.h>#include "18b20.h"#include &qu
21、ot;1602.h"#include "delay.h"#define KeyPort P3 /定義按鍵端口sbit SPK=P14; /定義喇叭端口bit ReadTempFlag;/定義讀時(shí)間標(biāo)志void Init_Timer0(void);/定時(shí)器初始化unsigned char KeyScan(void);/鍵盤掃描 /*- 串口通訊初始化-*/void UART_Init(void) SCON = 0x50; / SCON: 模式 1, 8-bit UART, 使能接收 TMOD |= 0x20; / TMOD: timer 1, mode 2, 8-b
22、it 重裝 TH1 = 0xFD; / TH1: 重裝值 9600 波特率 晶振 11.0592MHz TR1 = 1; / TR1: timer 1 打開 /EA = 1; /打開總中斷 /ES = 1; /打開串口中斷TI=1;/*- 主函數(shù)-*/void delay(unsigned int cnt) while(-cnt); void aaa() unsigned int i; for(i=0;i<200;i+)/喇叭發(fā)聲的時(shí)間循環(huán),改變大小可以改變發(fā)聲時(shí)間長(zhǎng)短 SPK=1; delay(TH); /參數(shù)決定發(fā)聲的頻率,估算值,可以自行更改參數(shù)并 SPK=0; delay(TL)
23、; SPK=1; /喇叭停止工作,間歇的時(shí)間,可更改 delay(20000); void main (void) int temp,tempH=50,tempL=1;float temperature;char displaytemp16,num;/定義顯示區(qū)域臨時(shí)存儲(chǔ)數(shù)組LCD_Init(); /初始化液晶DelayMs(20); /延時(shí)有助于穩(wěn)定LCD_Clear(); /清屏Init_Timer0();UART_Init();Lcd_User_Chr(); /寫入自定義字符while (1) /主循環(huán) num=KeyScan(); switch(num) case 1:if(tempH
24、<127)tempH+;break;case 2:if(tempH>-55)tempH-;break;case 3:if(tempL<127)tempL+;break;case 4:if(tempL>-55)tempL-;break;default:break; sprintf(displaytemp,"H.%3d L.%3d ",tempH,tempL);/輸出溫度上限下限 LCD_Write_String(0,1,displaytemp);/顯示第二行if(ReadTempFlag=1) ReadTempFlag=0; temp=ReadTemp
25、erature(); if(temp&0x8000) temp=0-temp;/變?yōu)樨?fù)數(shù) temperature=temp*0.0625; temp>>=4; if(temp>tempH) LCD_Write_String(0,1,"over tempH "); aaa(); else if(temp<tempL) LCD_Write_String(0,1,"under tempL ");aaa(); sprintf(displaytemp,"Temp %6.2f",temperature);/打印溫度
26、值 LCD_Write_String(0,0,displaytemp);/顯示第一行 LCD_Write_Char(13,0,0x01);/寫入溫度右上角點(diǎn) LCD_Write_Char(14,0,'C'); /寫入字符C /*- 定時(shí)器初始化子程序-*/void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響 /TH0=0x00; /給定初值 /TL0=0x00; EA=1; /總中斷打開 ET0=1; /定時(shí)器中斷打開 TR0=1; /定時(shí)器開關(guān)打開/*- 定時(shí)器中
27、斷子程序-*/void Timer0_isr(void) interrupt 1 static unsigned int num; TH0=(65536-2000)/256; /重新賦值 2ms TL0=(65536-2000)%256; num+; if(num=400) / num=0; ReadTempFlag=1; /讀標(biāo)志位置1/*-按鍵掃描函數(shù),返回掃描鍵值-*/unsigned char KeyScan(void) unsigned char keyvalue; if(KeyPort!=0xff) DelayMs(10); if(KeyPort!=0xff) keyvalue=K
28、eyPort; while(KeyPort!=0xff);switch(keyvalue) case 0xfe:return 1;break; case 0xfd:return 2;break; case 0xfb:return 3;break; case 0xf7:return 4;break; case 0xef:return 5;break; case 0xdf:return 6;break; case 0xbf:return 7;break; case 0x7f:return 8;break; default:return 0;break; return 0;一18B20溫度傳感器子程
29、序的編寫-*/#include"delay.h"#include"18b20.h"/*- 18b20初始化-*/bit Init_DS18B20(void) bit dat=0; DQ = 1; /DQ復(fù)位 DelayUs2x(5); /稍做延時(shí) DQ = 0; /單片機(jī)將DQ拉低 DelayUs2x(200); /精確延時(shí) 大于 480us 小于960us DelayUs2x(200); DQ = 1; /拉高總線 DelayUs2x(50); /1560us 后 接收60-240us的存在脈沖 dat=DQ; /如果x=0則初始化成功, x=1則初始
30、化失敗 DelayUs2x(25); /稍作延時(shí)返回 return dat;/*- 讀取一個(gè)字節(jié)-*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; / 給脈沖信號(hào) dat>>=1; DQ = 1; / 給脈沖信號(hào) if(DQ) dat|=0x80; DelayUs2x(25); return(dat);/*- 寫入一個(gè)字節(jié)-*/void WriteOneChar(unsigned char dat) unsigned char i=
31、0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0x01; DelayUs2x(25); DQ = 1; dat>>=1; DelayUs2x(25);/*- 讀取溫度-*/unsigned int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳過(guò)讀序號(hào)列號(hào)的操作WriteOneChar(0x44); / 啟動(dòng)溫度轉(zhuǎn)換DelayMs(10);Init_DS18B20
32、();WriteOneChar(0xCC); /跳過(guò)讀序號(hào)列號(hào)的操作 WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度a=ReadOneChar(); /低位b=ReadOneChar(); /高位b<<=8;t=a+b;return(t);2. LCD1602液晶顯示器的子程序編寫#include "1602.h"#include "delay.h"#define CHECK_BUSYsbit RS = P24; /定義端口 sbit RW = P25;sbit EN = P26;#define
33、 RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0/*- 判忙函數(shù)-*/ bit LCD_Check_Busy(void) #ifdef CHECK_BUSY DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80);#else return 0;#endif /*-
34、 寫入命令函數(shù)- -*/ void LCD_Write_Com(unsigned char com) while(LCD_Check_Busy(); /忙則等待 RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; /*- 寫入數(shù)據(jù)函數(shù)-*/ void LCD_Write_Data(unsigned char Data) while(LCD_Check_Busy(); /忙則等待 RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; /*- 清屏函數(shù)-*/ void LCD_C
35、lear(void) LCD_Write_Com(0x01); DelayMs(5); /*- 寫入字符串函數(shù)-*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) if (y = 0) LCD_Write_Com(0x80 + x); /表示第一行 else LCD_Write_Com(0xC0 + x); /表示第二行 while (*s) LCD_Write_Data( *s); s +; /*- 寫入字符函數(shù)-*/ void LCD_Write_Char(unsigned char x,un
36、signed char y,unsigned char Data) if (y = 0) LCD_Write_Com(0x80 + x); else LCD_Write_Com(0xC0 + x); LCD_Write_Data( Data); /*- 初始化函數(shù)-*/ void LCD_Init(void) LCD_Write_Com(0x38); /*顯示模式設(shè)置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com
37、(0x08); /*顯示關(guān)閉*/ LCD_Write_Com(0x01); /*顯示清屏*/ LCD_Write_Com(0x06); /*顯示光標(biāo)移動(dòng)設(shè)置*/ DelayMs(5); LCD_Write_Com(0x0C); /*顯示開及光標(biāo)設(shè)置*/ void Lcd_User_Chr(void) LCD_Write_Com(0x41); /"01 000 001" 第2行地址 LCD_Write_Data(0x04); /"XXX 10001" 第2行數(shù)據(jù) LCD_Write_Com(0x42); /"01 000 010" 第3行地址 LCD_Write_Data(0x0e); /"XXX 10101" 第3行數(shù)據(jù) LCD_Write_Com(0x43); /"01 000 011" 第4行地址 LCD_Write_Data(0x0e); /"XXX 10001" 第4行數(shù)據(jù) LCD_Write_Com(0x44); /"01 000 100" 第5行地址 LCD_Write_Data(0x0e); /"XXX 11111" 第5行數(shù)據(jù) LCD_Write_
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇教版二年級(jí)下冊(cè)數(shù)學(xué)口算練習(xí)題
- 視頻會(huì)議系統(tǒng)合同范本
- 網(wǎng)絡(luò)布線及設(shè)備采購(gòu)合同范本
- 安全協(xié)議書范本及員工責(zé)任書
- 滬科版數(shù)學(xué)九年級(jí)上冊(cè)22.3《相似三角形的性質(zhì)》聽(tīng)評(píng)課記錄1
- 二零二五年度校園消毒防疫應(yīng)急預(yù)案合同
- 北師大版歷史七年級(jí)上冊(cè)第19課《北方的民族匯聚》聽(tīng)課評(píng)課記錄
- 2025年子女撫養(yǎng)權(quán)變更法律援助與協(xié)議書模板
- 2025年度醫(yī)療事故快速調(diào)解專項(xiàng)協(xié)議
- 二零二五年度倉(cāng)儲(chǔ)物流租賃合同電子版模板即點(diǎn)即用
- T∕CMATB 9002-2021 兒童肉類制品通用要求
- 工序勞務(wù)分包管理課件
- 暖通空調(diào)(陸亞俊編)課件
- 工藝評(píng)審報(bào)告
- 中國(guó)滑雪運(yùn)動(dòng)安全規(guī)范
- 畢業(yè)論文-基于51單片機(jī)的智能LED照明燈的設(shè)計(jì)
- 酒廠食品召回制度
- DG-TJ 08-2343-2020 大型物流建筑消防設(shè)計(jì)標(biāo)準(zhǔn)
- 中職數(shù)學(xué)基礎(chǔ)模塊上冊(cè)第一章《集合》單元檢測(cè)試習(xí)題及參考答案
- 化學(xué)魯科版必修一期末復(fù)習(xí)98頁(yè)P(yáng)PT課件
- 《農(nóng)產(chǎn)品質(zhì)量安全檢測(cè)》PPT課件
評(píng)論
0/150
提交評(píng)論