版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
目錄摘要 2Abstract 31.實(shí)習(xí)任務(wù)及要求 4實(shí)習(xí)目的 4實(shí)習(xí)任務(wù) 4實(shí)習(xí)要求 52.基本原理 6數(shù)字時鐘基本原理 6溫度計工作基本原理 6頻率計工作基本原理 63.方案論證 7鍵盤顯示接口部分 7溫度計部分 74.硬件設(shè)計 9最小系統(tǒng)設(shè)計 9晶振振蕩器電路 9復(fù)位電路 9下載電路 11鍵盤電路 12顯示電路 13數(shù)碼管結(jié)構(gòu) 13顯示器工作原理 14溫度傳感器電路設(shè)計 16的工作原理 16的測溫原理 19總電路 215.軟件設(shè)計 22主程序流程圖 22定時器0中斷處理流程圖 23時鐘子程序 24溫度子程序 25雙機(jī)通信 26頻率計子程序 28程序清單 286.仿真分析 41數(shù)字時鐘仿真分析 41溫度計仿真 43頻率計仿真 457.實(shí)物運(yùn)行照片 488小結(jié) 51參考文獻(xiàn) 52摘要本次單片機(jī)實(shí)習(xí)的主要目的是鞏固單片機(jī)的理論知識及鍛煉實(shí)際動手能力。主要任務(wù)是在最小系統(tǒng)的基礎(chǔ)上設(shè)計鍵盤顯示電路,然后編程實(shí)現(xiàn)數(shù)字時鐘,數(shù)字溫度計和數(shù)字頻率計。其中數(shù)字時鐘要有調(diào)時調(diào)分調(diào)秒的功能;而溫度計能完成串行通信,將溫度顯示在另一個單片機(jī)上.最后要求整個系統(tǒng)能通過按鍵實(shí)現(xiàn)數(shù)字時鐘及溫度計和頻率計之間的相互切換。在實(shí)習(xí)過程要記錄每天的實(shí)習(xí)內(nèi)容包括方案的論證,硬件設(shè)計,軟件設(shè)計,仿真分析及實(shí)物制作等。關(guān)鍵詞:單片機(jī),數(shù)字時鐘,溫度計,頻率計AbstractThemaingoaloftheSingleChipMicrocomputerpracticeistorenforcethespeculativeknowledgeandtraintheabilityofhandwork.ThemaintaskistodesignthekeyboarddisplaycircuitonthebaseofDIY.Thenweshouldprogrammetorealizethedigitalclock,digtalthermometeranddigitalfrequencymeter.what’more,thedigitalclockisrequiredtohavethefunctionofadjustthesecond,muinuteandhour.TheDigtalthermometerisrequiredtoaccomplishthecommunicationoftwoSingleChipMicrocomputers,thetemperaturecanbedisplayedonthesecondSingleChipMicrocomputer.Atlast,thewholesystemisrequiredtorealizethemutualswitchbetweentheclockandthethermometer,theclockandthefrequencymeter.Inthepracticecourse,weshouldwritedownthepracticecontentseveryday,includingthechoiceofscheme,hardwaredesign,softwaredesign,simuationanalysis,makingmaterialobjectandsoon.Keywords:SingleChipMicrocomputer,digitalclock,digtalthermometer,digitalfrequencymeter1.實(shí)習(xí)任務(wù)及要求實(shí)習(xí)目的1、鞏固《單片機(jī)原理及應(yīng)用》理論課的理論知識;2、熟悉單片機(jī)應(yīng)用系統(tǒng)的硬件設(shè)計及軟件設(shè)計的基本方法;3、將《單片機(jī)原理及應(yīng)用》理論課的理論知識應(yīng)用于實(shí)際的應(yīng)用系統(tǒng)中;4、訓(xùn)練單片機(jī)應(yīng)用技術(shù),鍛煉實(shí)際動手能力。實(shí)習(xí)任務(wù)(1)利用上述材料完成單片機(jī)最小系統(tǒng)的設(shè)計、焊接、調(diào)試;(2)完成ISP下載電路的設(shè)計、焊接;(3)完成應(yīng)用系統(tǒng)擴(kuò)展電路部分的設(shè)計、焊接、調(diào)試,應(yīng)用系統(tǒng)擴(kuò)展電路的具體要求如下:1)鍵盤、顯示電路利用單片機(jī)最小系統(tǒng)、6個7段LED數(shù)碼管、12個按鍵,設(shè)計制作一個鍵盤、顯示電路??梢允褂?279鍵盤顯示接口電路,也可以使用單片機(jī)的并行接口作為鍵盤顯示接口。2)數(shù)字時鐘在鍵盤、顯示電路的基礎(chǔ)上完成一個數(shù)字時鐘的設(shè)計,完成以下功能:要求以24小時計時方式顯示時、分、秒;時、分、秒可以通過按鍵分別調(diào)整。3)數(shù)字溫度計在上題的硬基礎(chǔ)上,制作一個數(shù)字溫度計。完成以下功能:利用DS18B20可編程1-Wire數(shù)字溫度傳感器芯片,或利用AD590溫度傳感器芯片和A/D轉(zhuǎn)換器芯片采集溫度溫度信號;當(dāng)按下鍵盤上的溫度顯示按鍵時將實(shí)時溫度信息顯示在LED顯示器上,當(dāng)按下鍵盤上的時鐘顯示按鍵時,恢復(fù)時鐘的正常顯示;通過串行通信的方式,將采集到的實(shí)時溫度信息送至第二個單片機(jī)系統(tǒng),并在二個單片機(jī)系統(tǒng)顯示實(shí)時溫度。4)數(shù)字頻率計在上題的硬基礎(chǔ)上,制作一個數(shù)字頻率計。完成以下功能:利用MCU設(shè)計一個數(shù)字頻率計,用于檢測0~500kHz周期信號的頻率,輸入信號幅度范圍:0.1~10V;當(dāng)按下鍵盤上的頻率顯示按鍵時將測量的頻率信息顯示在LED顯示器上,當(dāng)按下鍵盤上的時鐘顯示按鍵時,恢復(fù)時鐘的正常顯示;(4)利用仿真軟件完成系統(tǒng)仿真工作;(5)完成系統(tǒng)軟件的設(shè)計,包括程序結(jié)構(gòu)設(shè)計、流程圖繪制、程序設(shè)計。實(shí)習(xí)要求1)利用PROTEL等軟件進(jìn)行硬件設(shè)計;2)利用KeiluV2軟件完成應(yīng)用系統(tǒng)軟件設(shè)計;3)利用PROTEUS軟件進(jìn)行仿真設(shè)計;4)完成單片機(jī)最小系統(tǒng)和應(yīng)用系統(tǒng)電路板的焊接;5)對電路進(jìn)行調(diào)試;6)利用stc-isp軟件完成在系統(tǒng)編程、下載,并完成系統(tǒng)軟件調(diào)試;7)題目由指導(dǎo)教師提供;8)要求每個學(xué)生單獨(dú)完成硬件軟件設(shè)計、仿真、焊接、調(diào)試任務(wù);9)寫出實(shí)習(xí)報告,實(shí)習(xí)報告主要包括以下內(nèi)容:目錄、摘要、關(guān)鍵詞、基本原理、方案論證、硬件設(shè)計、軟件設(shè)計(帶流程圖、程序清單)、仿真結(jié)果、實(shí)物運(yùn)行結(jié)果照片、結(jié)論、參考文獻(xiàn)等;10)實(shí)習(xí)完成后通過答辯;11)答辯時交實(shí)習(xí)報告電子文檔,通過答辯后根據(jù)修改意見修改并打印、裝訂成冊。2.基本原理數(shù)字時鐘基本原理數(shù)字時鐘是利用單片機(jī)的內(nèi)部的定時/計數(shù)器工作及定時方式,對機(jī)器周期計數(shù)形成基準(zhǔn)時間(如10ms),然后用另外一個計數(shù)器或軟件計數(shù)的形式對基準(zhǔn)時間里德計數(shù)形成秒(如對10ms計數(shù)100次),“秒”計數(shù)60次形式“分”,“分”計數(shù)60次形成“時”,然后通過軟件程序使它們的內(nèi)容在相應(yīng)的位置顯示出來。在具體設(shè)計時定時器采用中斷方式工作,對時鐘的形成在終中斷程序中實(shí)現(xiàn),在主程序中只是對定時/計數(shù)器的定義初始化,調(diào)用顯示程序。并在設(shè)計中加入了按鍵,可以通過按鍵對時,分,秒進(jìn)行調(diào)整。2.2溫度計工作基本原理在單片機(jī)電路設(shè)計中,大多都是使用傳感器,所以可以采用一個溫度傳感器,它會將溫度轉(zhuǎn)換成數(shù)字量后存貯在自身內(nèi)部,將其連在單片機(jī)的一個IO口,即一種單總線串行接口,然后通過軟件程序在數(shù)碼管或液晶屏上顯示出來就可以直接讀取被測溫度值。2.3頻率計工作基本原理頻率計的基本設(shè)計原理是直接用十進(jìn)制數(shù)字顯示被測信號頻率。所謂頻率,就是周期信號在單位時間(1s)內(nèi)變化的次數(shù)。若在一定時間間隔T內(nèi)測得這個周期信號的重復(fù)變化次數(shù)N,則其頻率可表示為f=N/T。即可利用單片機(jī)內(nèi)部的定時/計數(shù)器來對外部輸入脈沖進(jìn)行計數(shù),從而測得頻率。3.方案論證鍵盤顯示接口部分方案一:使用8279鍵盤顯示接口電路,即鍵盤和顯示器通過8279芯片然后再接到單片機(jī)上,8279可以通過對鍵盤的自動掃描,將鍵盤信號存入FIFORAM里,再通過顯示子程序顯示按鍵的信息。具體來說,掃描輸出線,通過138譯碼后,作為列及回送線交叉成鍵,輸出數(shù)據(jù)分別用三位來體現(xiàn)掃描碼和回送碼,讀鍵時屏蔽高兩位,使鍵值正好等于輸出數(shù)據(jù)的查表值,從而在數(shù)碼管上顯示出來。方案二:使用單片機(jī)的并行接口作為鍵盤顯示接口,即鍵盤引腳直接接到單片機(jī)的IO口上。從以上兩種方案可以看出,方案一占用的單片機(jī)IO口少,精度高,穩(wěn)定性好,但導(dǎo)致整個電路所用芯片增加,成本提高。相比較而言方案二雖然占用單片機(jī)的IO口較多,但這個可以通過設(shè)計矩陣鍵盤來解決,并且也較方案一所用的芯片少,降低了成本。綜合考慮選擇方案二。方案一:采用熱電偶溫差電路測溫,溫度檢測部分可以使用低溫?zé)崤?,熱電偶由兩個焊接在一起的異金屬導(dǎo)線所組成,熱電偶產(chǎn)生的熱電勢由兩種金屬的接觸電勢和單一導(dǎo)體的溫差電勢組成。通過將參考結(jié)點(diǎn)保持在已知溫度并測量該電壓,便可推斷出檢測結(jié)點(diǎn)的溫度。數(shù)據(jù)采集部分則使用帶有A/D通道的單片機(jī),在將隨被測溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來。熱電偶的優(yōu)點(diǎn)是工作溫度范圍非常寬,且體積小,但是它們也存在著輸出電壓小、容易遭受來自導(dǎo)線環(huán)路的噪聲影響以及漂移較高的缺點(diǎn),并且這種設(shè)計需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。系統(tǒng)主要包括對A/D0809的數(shù)據(jù)采集,自動手動工作方式檢測,溫度的顯示等,這幾項(xiàng)功能的信號通過輸入輸出電路經(jīng)單片機(jī)處理。此外還有復(fù)位電路,晶振電路,啟動電路等。故現(xiàn)場輸入硬件有手動復(fù)位鍵、A/D轉(zhuǎn)換芯片,處理芯片為51芯片,執(zhí)行機(jī)構(gòu)有4位數(shù)碼管、報警器等。方案二:采用數(shù)字溫度芯片DS18B20測量溫度,輸出信號全數(shù)字化。便于單片機(jī)處理及控制,省去傳統(tǒng)的測溫方法的很多外圍電路。且該芯片的物理化學(xué)性很穩(wěn)定,它能用做工業(yè)測溫元件,此元件線形較好。在0—100攝氏度時,最大線形偏差小于1攝氏度。DS18B20的最大特點(diǎn)之一采用了單總線的數(shù)據(jù)傳輸,由數(shù)字溫度計DS18B20和微控制器AT89S51構(gòu)成的溫度測量裝置,它直接輸出溫度的數(shù)字信號,可直接及計算機(jī)連接。這樣,測溫系統(tǒng)的結(jié)構(gòu)就比較簡單,體積也不大。采用51單片機(jī)控制,軟件編程的自由度大,可通過編程實(shí)現(xiàn)各種各樣的算術(shù)算法和邏輯控制,而且體積小,硬件實(shí)現(xiàn)簡單,安裝方便。既可以單獨(dú)對多DS18B20控制工作,還可以及PC機(jī)通信上傳數(shù)據(jù),另外AT89S51在工業(yè)控制上也有著廣泛的應(yīng)用,編程技術(shù)及外圍功能電路的配合使用都很成熟?!?】該系統(tǒng)利用AT89S51芯片控制溫度傳感器DS18B20進(jìn)行實(shí)時溫度檢測并顯示,能夠?qū)崿F(xiàn)快速測量環(huán)境溫度,并可以根據(jù)需要設(shè)定上下限報警溫度。該系統(tǒng)擴(kuò)展性非常強(qiáng),它可以在設(shè)計中加入時鐘芯片DS1302以獲取時間數(shù)據(jù),在數(shù)據(jù)處理同時顯示時間,并可以利用AT24C16芯片作為存儲器件,以此來對某些時間點(diǎn)的溫度數(shù)據(jù)進(jìn)行存儲,利用鍵盤來進(jìn)行調(diào)時和溫度查詢,獲得的數(shù)據(jù)可以通過MAX232芯片及計算機(jī)的RS232接口進(jìn)行串口通信,方便的采集和整理時間溫度數(shù)據(jù)。從以上兩種方案,容易看出方案一的測溫裝置可測溫度范圍寬、體積小,但是線性誤差較大。方案二的測溫裝置電路簡單、精確度較高、實(shí)現(xiàn)方便、軟件設(shè)計也比較簡單,故本次設(shè)計采用了方案二。4.硬件設(shè)計晶振振蕩器電路單片機(jī)是一個復(fù)雜的同步時序電路,為了保證同步工作方式的實(shí)現(xiàn),其所有的工作都在唯一的時鐘信號控制下嚴(yán)格的按時序進(jìn)行的。時序就是單片機(jī)內(nèi)部以及內(nèi)部及外部互聯(lián)必須遵守的規(guī)律。單片機(jī)的時序可以通過兩種方式產(chǎn)生:內(nèi)部振蕩方式和外部振蕩方式。外部振蕩方式需要引入外部時鐘信號作為單片機(jī)的時鐘信號,它可以使各單片機(jī)之間的時鐘信號同步,常用于多片單片機(jī)組成的系統(tǒng)中,而本次設(shè)計只需使用一片單片機(jī),所以本次系統(tǒng)設(shè)計采用了內(nèi)部振蕩方式。單片機(jī)內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,引腳X1和X2分別是該放大器的輸入端和輸出端。這個放大器及作為反饋原件的片外石英晶體及電容一起構(gòu)成一個自激振蕩器。電容C1和C2通常取30pF,對振蕩器有微調(diào)的作用。晶振的實(shí)際頻率及標(biāo)稱頻率的關(guān)系為:?x為實(shí)際頻率,?0為標(biāo)稱頻率,?0~12MHz。所以本設(shè)計晶振Y采用12HMz,電容C1和C2取30pF,則?x為12MHZ。圖4-1振蕩電路4.復(fù)位電路單片機(jī)在啟動時都需要復(fù)位,以使CPU及系統(tǒng)各部件處于確定的初始狀態(tài),并從初態(tài)開始工作。除了進(jìn)入系統(tǒng)的正常初始化之外,由于程序運(yùn)行出錯或者操作出錯而使單片機(jī)系統(tǒng)處于死鎖狀態(tài),為了擺脫死鎖狀態(tài),也需要使單片機(jī)重新啟動。單片機(jī)的復(fù)位操作一般有上電自動復(fù)位和按鍵電平復(fù)位兩種方式。本設(shè)計采用上電自動復(fù)位和按鍵電平復(fù)位都有的復(fù)位電路。手動按鍵復(fù)位需要人為在復(fù)位輸入端RESET上通過按鈕加入高電平,其復(fù)位過程是:當(dāng)按下按鍵S時,RESET端直接及VCC相連,從按下按鍵到松開按鍵的時間內(nèi),能使RESET端維持一段時間的高電平,這段時間的高電平使單片機(jī)復(fù)位。當(dāng)按鍵被松開后,RESET端回到低電平,單片機(jī)系統(tǒng)完成復(fù)位,恢復(fù)正常工作狀態(tài)。上電復(fù)位電路是在RESET復(fù)位輸入引腳上接一電容至VCC端,下接一個電阻到地。上電復(fù)位的工作過程是:在系統(tǒng)上電瞬間,電容相當(dāng)于短路,電源電壓通過電容加給RESET引腳以高電平信號,此高電平信號隨著VCC對電容的充電過程而逐漸回落,在其高電平期間,系統(tǒng)復(fù)位;當(dāng)電容兩端電壓達(dá)到電源電壓時,電容充電電流為零,電容相當(dāng)于開路,RESET端為低電平,單片機(jī)復(fù)位完成,恢復(fù)正常工作狀態(tài)。這里要注意的是,要想實(shí)現(xiàn)復(fù)位,必須保證復(fù)位信號高電平持續(xù)時間大于兩個機(jī)器周期,而。本設(shè)計的單片機(jī)機(jī)器周期為:。而,所以滿足要求。圖4-2復(fù)位電路圖4-3最小系統(tǒng)電路4.2下載電路MAX232是電平轉(zhuǎn)換芯片。1970年,美國電氣學(xué)會規(guī)定“RS232”串口通信協(xié)議。規(guī)定邏輯“1”,-5—-15V;邏輯“0”,+5—+15.噪聲容限為2V.要實(shí)現(xiàn)利用串口及單片機(jī)進(jìn)行通信,就要進(jìn)行電平轉(zhuǎn)換,把標(biāo)準(zhǔn)轉(zhuǎn)化成單片機(jī)可以識別的。MAX220—MAX249都是電平轉(zhuǎn)換芯片,在單片機(jī)最小系統(tǒng)中,使用MAX232.圖4-4下載電路4.3鍵盤電路鍵盤分編碼鍵盤和非編碼鍵盤,鍵盤上閉合鍵的識別由專用的硬件編碼器實(shí)現(xiàn),并產(chǎn)生按鍵編碼號或鍵值的稱為編碼鍵盤,如計算機(jī)鍵盤。而靠軟件編程來識別的稱為非編碼鍵盤,在單片機(jī)組成的各種系統(tǒng)中,用的最多的是非編碼鍵盤,也有用到編碼鍵盤的,我們這里用的就是非編碼鍵盤。在這種非編碼鍵盤的單片機(jī)系統(tǒng)中,鍵盤處理程序首先執(zhí)行有無按鍵按下的程序段,當(dāng)確認(rèn)有按鍵按下后,下一步就要識別哪一個按鍵被按下,對鍵的識別常采用逐行(逐列)掃描的方法。單片機(jī)檢測按鍵是否被按下的依據(jù)是檢測及該鍵對應(yīng)的I/O口是否為低電平。判斷鍵盤哪一個鍵被按下。方法是:一次給行線送低電平,然后查所有列線狀態(tài),稱為行掃描,如果全為1,則所按下鍵不在此行,如果不全為1,則所按下鍵必在此行,而且是在及零電平列線相交的交點(diǎn)上的那個鍵。本設(shè)計中有2*4矩陣鍵盤和獨(dú)立鍵盤。矩陣鍵盤可以有效的減少鍵盤及單片機(jī)接口時所占用的I/O接口。圖4-5鍵盤電路如圖所示,2*4矩陣鍵盤的行線和列線者接到了單片機(jī)的P3口。S1,S2,S3,S4為獨(dú)立鍵盤。4.4顯示電路4.4.1數(shù)碼管結(jié)構(gòu)數(shù)碼管內(nèi)部有8個發(fā)光二極管,公共端由8個發(fā)光二極管的陰極并接而成,正常顯示時公共端接低電平(GND),各發(fā)光二極管是否點(diǎn)亮取決于a-dp各引腳上是否是高電平。LED數(shù)碼管的外形結(jié)構(gòu)如圖4-5,外部有10個引腳,其中3,8腳為公共端也稱位選端,其余8個引腳稱為段選端,當(dāng)要使某一位數(shù)碼管顯示某一數(shù)字((0-9中的一個)必須在這個數(shù)碼管的段選端加上及數(shù)字顯示數(shù)字對應(yīng)的8位段選碼(也稱字形碼),在位選端加上低電平即可。LED有共陰極和共陽極兩種。如圖4-5所示。二極管的陰極連接在一起,通常此公共陰極接地,而共陽極則將發(fā)光二極管的陽極連接在一起,接入+5V的電壓。一位顯示器由8個發(fā)光二極管組成,其中7個發(fā)光二極管構(gòu)成字型“8”的各個筆劃(段)a~g,另一個小數(shù)點(diǎn)為dp發(fā)光二極管。當(dāng)在某段發(fā)光二極管施加一定的正向電壓時,該段筆劃即亮;不加電壓則暗。符號和引腳共陰極共陽極圖4-6LED結(jié)構(gòu)圖表4-1LED顯示段碼字型共陽極段共陰極段字型共陽極段共陰極段0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H空白FFH00H880H7FHP8CH73H4.4.2LED顯示器工作原理:(1)LED靜態(tài)顯示方式LED顯示器工作于靜態(tài)顯示方式時,各位的共陰極連接在一起并接地;每位的段碼分別及8位的鎖存器輸出相連。各個LED的顯示字符一經(jīng)確定,相應(yīng)鎖存的段碼輸出將維持不變,直到送入另一個字符為止,故靜態(tài)顯示器的亮度較高。(2)LED動態(tài)顯示方式 在多位LED顯示時,為簡化硬件電路,通常將所有的段碼線相應(yīng)段并聯(lián)在一起,由1個8位I/0口控制,形成段碼線的多路復(fù)用,而各位的共陰極分別由相應(yīng)的I/O線控制,形成各位的分時選通。設(shè)計中采用八個共陰LED管,其中段碼線采用CD4511譯碼占用4位I/O口,而位選信號使用74LS138占用3個I/O口,則只要7個I/O口。由于各位的段碼線并聯(lián),4位I/O口輸出的段碼對各個顯示位來說都是相同的。因此,在同一時刻,如果各位選線都處于選通狀態(tài)的話,8位LED將顯示相同的字符。若要各位LED能夠同時顯示出及本位相應(yīng)的顯示字符,就必須采用動態(tài)顯示方式,即在某一時刻,只讓某一位的位選線處于選通狀態(tài),而其它各位的位選線處于關(guān)閉狀態(tài),同時,段碼線上輸出相應(yīng)位要顯示的字符的段碼。這樣,在同一時刻,8位LED中只有選通的那1位顯示出字符,而其他7位則是熄滅的。同樣,在下一時刻,只讓下一位的位選線處于選通狀態(tài),而其他各位的位選線處于關(guān)閉狀態(tài),在段碼線上輸出將要顯示字符的段碼,則同一時刻,只有選通位顯示出將要顯示的字符,而其他各位則是熄滅的。如此循環(huán)下去,就可以使各位顯示出將要顯示的字符。雖然這些字符是在不同時刻出現(xiàn)的,而在同一時刻,只有一位顯示,其他各位熄滅,但由于LED顯示器的余輝和人眼的視覺暫留作用,只要每位顯示間隔足夠短,則可以造成多位同時亮的假象,達(dá)到同時顯示的效果。發(fā)光二極管從導(dǎo)通到發(fā)光有一定的延時,導(dǎo)通時間太短,則發(fā)光太弱,人眼無法看清;但也不能太長,因?yàn)橐芟抻谂R界閃爍頻率,而且此時間越長,占用CPU時間也越多。另外,顯示位數(shù)增多,也將占用大量的CPU時間,因此動態(tài)顯示的實(shí)質(zhì)是以犧牲CPU時間來換取器件的減少。本次設(shè)計中,6位LED七段數(shù)碼管采用共陰極接法。圖4-7顯示電路如圖所示,單片機(jī)的P0口通過U2鎖存器(74HC573)及數(shù)碼管相連,來實(shí)現(xiàn)位選;通過U3及數(shù)碼管相連來實(shí)現(xiàn)段選。4.5溫度傳感器電路設(shè)計根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:1.每一次讀寫之前都必須要對DS18B20進(jìn)行復(fù)位;2.復(fù)位成功后發(fā)送一條ROM指令;3.最后發(fā)送RAM指令,這樣才能對DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號后等待15~60微秒左右后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號表示復(fù)位成功。其工作時序包括初始化時序、寫時序和讀時序,具體工作方法如圖4-8,4-9,4-10所示。初始化時序圖4-8初始化時序Ω上拉電阻將總線拉高,延時15~60us,并進(jìn)入接受模式,以產(chǎn)生低電平應(yīng)答脈沖,若為低電平,再延時480us。(2)寫時序圖4-9寫時序?qū)憰r序包括寫0時序和寫1時序。所有寫時序至少需要60us,且在2次獨(dú)立的寫時序之間至少需要1us的恢復(fù)時間,都是以總線拉低開始。寫1時序,主機(jī)輸出低電平,延時2us,然后釋放總線,延時60us。寫0時序,主機(jī)輸出低電平,延時60us,然后釋放總線,延時2us。(3)讀時序圖4-10讀時序總線器件僅在主機(jī)發(fā)出讀時序是,才向主機(jī)傳輸數(shù)據(jù),所以,在主機(jī)發(fā)出讀數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時序,以便從機(jī)能夠傳輸數(shù)據(jù)。所有讀時序至少需要60us,且在2次獨(dú)立的讀時序之間至少需要1us的恢復(fù)時間。每個讀時序都由主機(jī)發(fā)起,至少拉低總線1us。主機(jī)在讀時序期間必須釋放總線,并且在時序起始后的15us之內(nèi)采樣總線狀態(tài)。主機(jī)輸出低電平延時2us,然后主機(jī)轉(zhuǎn)入輸入模式延時12us,然后讀取總線當(dāng)前電平,然后延時50us。當(dāng)主機(jī)收到DSl8B20的響應(yīng)信號后,便可以發(fā)出ROM操作命令之一,這些命令如表4-2所示。RAM指令集如表4-3所示。主機(jī)控制DS18B20完成溫度轉(zhuǎn)換過程是:每一次讀寫之前都要對DS18B20進(jìn)行復(fù)位,即將數(shù)據(jù)總線下拉500us,然后釋放,DS18B20收到信號后等待16-60us左右,之后發(fā)出60-240us的存在低脈沖,主CPU收到此此信號表示復(fù)位成功;復(fù)位成功后發(fā)送一條ROM指令,然后發(fā)送RAM指令,這樣才能對DS18B20進(jìn)行預(yù)訂的讀寫操作。表4-2ROM操作命令指令約定代碼功能讀ROM33H讀DS18B20中的編碼符合ROM55H發(fā)出此命令后,接著發(fā)出64位ROM編碼,訪問單線總線上及該編輯相對應(yīng)的DS18B20使之做出響應(yīng),為下一步對該DS18B20的讀寫作準(zhǔn)備搜索ROM0F0H用于確定掛接在同一總線上的DS18B20個數(shù)和識別64位ROM地址,為操作各器件作準(zhǔn)備跳過ROM0CCH忽略64位ROM地址,直接向DS18B20發(fā)送溫度變換指令告警搜索命令0ECH執(zhí)行后,只有溫度跳過設(shè)定值上限或下限的片子才能做出反應(yīng)表4-3RAM指令集指令約定代碼功能溫度轉(zhuǎn)換44H啟動DS18B20進(jìn)行溫度轉(zhuǎn)換讀暫存器0BEH讀暫存器9個字節(jié)內(nèi)容寫暫存器4EH將數(shù)據(jù)寫入暫存器的TH、TL字節(jié)復(fù)制暫存器48H把暫存器的TH、TL字節(jié)寫到E2RAM中重調(diào)E2RAM0B8H把E2RAM中的TH、TL字節(jié)寫到暫存器TH、TL字節(jié)讀供電方式0B4H啟動DS18B20發(fā)送電源供電方式的信號給主CPUDS18B20的測溫原理DS18B20的測溫原理是這這樣的,器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號作為減法計數(shù)器2的脈沖輸入。器件中還有一個計數(shù)門,當(dāng)計數(shù)門打開時,DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時鐘脈沖進(jìn)行計數(shù)進(jìn)而完成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將最低溫所對應(yīng)的一個基數(shù)分別置入減法計數(shù)器1、溫度寄存器中,計數(shù)器1和溫度寄存器被預(yù)置在最低溫所對應(yīng)的一個基數(shù)值。減法計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計數(shù),當(dāng)減法計數(shù)器1的預(yù)置值減到0時,溫度寄存器的值將加1,減法計數(shù)器1的預(yù)置將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計數(shù),如此循環(huán)直到減法計數(shù)器計數(shù)到0時,停止溫度寄存器的累加,此時溫度寄存器中的數(shù)值就是所測溫度值。其輸出用于修正減法計數(shù)器的預(yù)置值,只要計數(shù)器門仍未關(guān)閉就重復(fù)上述過程,直到溫度寄存器值大致被測溫度值。減法計數(shù)器減法計數(shù)器斜坡累加器減到0減法計數(shù)器預(yù)置低溫度系數(shù)振蕩器高溫度系數(shù)振蕩器計數(shù)比較器預(yù)置溫度寄存器減到0圖4-11測溫原理圖初始化初始化DS18B20跳過ROM匹配溫度變換延時1S跳過ROM匹配讀暫存器轉(zhuǎn)換成顯示碼數(shù)碼管顯示圖測溫流程圖圖4-13溫度傳感電路4.6總電路圖4-14總電路圖(1)當(dāng)給單片機(jī)上電后,其為時鐘模式,按一次S1實(shí)現(xiàn)對“秒”的調(diào)整,按兩次S1實(shí)現(xiàn)對“分”的調(diào)整,按三次S1實(shí)現(xiàn)對“時”調(diào)整;按S2實(shí)現(xiàn)增1,按S3實(shí)現(xiàn)減1.(2)按S2實(shí)現(xiàn)時鐘到溫度計的切換,按S4恢復(fù)時鐘。(3)按S3實(shí)現(xiàn)時鐘到頻率計的切換,按S4恢復(fù)時鐘。5.軟件設(shè)計主程序流程圖定時器0中斷處理流程圖重裝初值重裝初值保護(hù)現(xiàn)場保護(hù)現(xiàn)場計數(shù)單元加1計數(shù)單元加1到1秒?N到1秒?N秒加1秒加1N到60秒?N到60秒?秒清0,分加1秒清0,分加1N到60分?N到60分?分清0,時加1分清0,時加1N到24時?N到24時?小時清0小時清0恢復(fù)現(xiàn)場恢復(fù)現(xiàn)場中斷返回中斷返回時鐘子程序5.4溫度子程序雙機(jī)通信(1)發(fā)送(2)接收5.6頻率計子程序開始開始頻率測量計數(shù)器計數(shù)測量數(shù)據(jù)顯示程序清單:#include<reg52.h>#include<stdio.h>#defineuintunsignedint#defineucharunsignedcharsbitdula=P2^6;sbitwela=P2^7;sbitkey1=P3^4;sbitkey2=P1^7;sbitkey3=P3^6;sbitkey4=P3^7;sbitds=P2^2;uinttemp;floatf_temp;ucharbuf[3];uchari,num,hour,min,sec,num1,num2,num3,num4;unsignedlongintfre;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //帶小數(shù)點(diǎn)的0~9編碼0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //不帶小數(shù)點(diǎn)的0~9的編碼voiddelayms(uintxms) uinti,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);voiddisplay(ucharnum1,uchardat) //數(shù)據(jù)顯示程序{ //num是第幾個數(shù)碼管,dat是要顯示的數(shù)字 uchari; i=0xff; i=i&(~((0x01)<<(num1))); //用I來存儲位選數(shù)據(jù),只有一位為0 wela=1; P0=i;wela=0;P0=0xff; dula=1;P0=table[dat]; //編碼賦給P0口 dula=0; delayms(3);voiddis_time(ucharhour,ucharmin,ucharsec) //顯示時間函數(shù) display(0,hour/10);display(1,hour%10+10); display(2,min/10);display(3,min%10+10); display(4,sec/10);display(5,sec%10);voidkeyscan() if(key1==0) delayms(10); if(key1==0) { num=4; TR0=0;num--;while(!key1);delayms(10);while(!key1); while(num) dis_time(hour,min,sec); if(key1==0){delayms(10);if(key1==0)num--;}while(!key1); if(key4==0){delayms(10);if(key4==0)num=0;}while(!key4); switch(num) case3:if(key2==0){delayms(10);if(key2==0){sec++;if(sec==60)sec=0;while(!key2)display(4,sec/10);display(5,sec%10);}} if(key3==0){delayms(10);if(key3==0){sec--;if(sec==255)sec=59;while(!key3)display(4,sec/10);display(5,sec%10);}} break; case2:if(key2==0){delayms(10);if(key2==0){min++;if(min==60)min=0;while(!key2)display(2,min/10);display(3,min%10+10);}} if(key3==0){delayms(10);if(key3==0){min--;if(min==255)min=59;while(!key3)display(2,min/10);display(3,min%10+10);}} break; case1: if(key2==0){delayms(10);if(key2==0){hour++;if(hour==24)hour=0;while(!key2)display(0,hour/10);display(1,hour%10+10);}} if(key3==0){delayms(10);if(key3==0){hour--;if(hour==255)hour=23;while(!key3)display(0,hour/10);display(1,hour%10+10);}} break; TR0=1;voidinit_t() TH0=(65536-4597)/256; TL0=(65536-4597)%256; TMOD=0x51;EA=1;ET0=1;ET1=1;TR0=1;TR1=0;voiddsreset() //DS18B20復(fù)位,初始化函數(shù) uinti;ds=0;i=103; while(i>0)i--; ds=1;i=4;while(i>0)i--;bittempreadbit(void) //讀1位數(shù)據(jù)函數(shù) uinti;bitdat;ds=0;i++; //i++起延時作用 ds=1;i++;i++; dat=ds;i=8;while(i>0)i--; return(dat);uchartempread(void) //讀一個字節(jié)數(shù)據(jù)函數(shù) uchari,j,dat; dat=0; for(i=1;i<=8;i++) j=tempreadbit(); dat=(j<<7)|(dat>>1); //讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在dat里 return(dat);voidtempwritebyte(uchardat) //向DS18B20寫一個字節(jié)數(shù)據(jù)函數(shù) uinti;ucharj; bittestb; for(j=1;j<=8;j++) testb=dat&0x01; dat=dat>>1; if(testb) ds=0;i++;i++;ds=1; i=8;while(i>0)i--; else ds=0; i=8;while(i>0)i--; ds=1;i++,i++;voidtempchange(void) //DS18B20開始獲取溫度并轉(zhuǎn)換 dsreset();delayms(1); tempwritebyte(0xcc); //寫跳過讀ROM指令 tempwritebyte(0x44); //寫溫度轉(zhuǎn)換指令uintget_temp() //讀取寄存器中存儲的溫度數(shù)據(jù) uchara,b; dsreset();delayms(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); //讀低8位 b=tempread(); //讀高8位 temp=b;temp<<=8; //兩個字節(jié)組合為1個字 temp=temp|a; f_temp=temp*0.0625; //溫度在寄存器中為12位,分辨率為度 temp=f_temp*10+0.5; //乘以10表示小數(shù)點(diǎn)后面只取1位,加是四舍五入 f_temp=f_temp+0.05; returntemp; //temp是整型voiddis_temp(uintt) //顯示溫度數(shù)值函數(shù)t傳遞的是整型的溫度值 uchari; i=t/100; //除以100得到商,為溫度的十位 display(0,i); // 在第1個數(shù)碼管上顯示 i=t%100/10; //100取余再除以10得到商,為溫度的個位 display(1,i+10); //在第2個數(shù)碼管上顯示 i=t%100%10; //100取余再用10取余,為溫度的小數(shù)位 display(2,i); //在第3個數(shù)碼管上顯示voiddis_fre(unsignedlongintk) //顯示頻率函數(shù) uchari; i=k/100000;display(0,i); i=k/10000%10;display(1,i); i=k/1000%10;display(2,i+10); i=k/100%10;display(3,i); i=k/10%10;display(4,i); i=k%10;display(5,i);voiddeal() buf[0]=temp/100;buf[1]=temp%100/10;buf[2]=temp%10;voidinit_com(void)SCON=0x50;//串行口工作方式1,允許接收PCON=0x00;//波特率不倍增TMOD=0x21;//定時器1工作于8位自動重載模式,用于產(chǎn)生波特率TH1=0xfd;TL1=0xfd;//T1賦初值,11.0592M晶振,TR1=1;//啟動定時器1EA=1;ET1=0;ES=1;voidmain(){ init_t(); while(1) num2=1; dis_time(hour,min,sec); keyscan(); if(key2==0) delayms(8); if(key2==0) while(num2) init_com(); tempchange(); dula=0;wela=0; // for(i=5;i>0;i--) dis_temp(get_temp()); deal(); delayms(5); SBUF=buf[i]; if(key4==0) delayms(10); if(key4==0) ES=0;num2=0;TR1=0;TMOD=0x51; ET1=1; if(key3==0) delayms(10); if(key3==0) TH1=(65536-1)/256; TL1=(65536-1)%256; fre=0;TR1=1; while(num2) while(TR1); dis_fre(fre); if(key3==0) delayms(10); if(key3==0) fre=0;TR1=1; if(key4==0) delayms(10); if(key4==0) num2=0;voidtimer0()interrupt1 TH0=(65536-4597)/256; TL0=(65536-4597)%256; num++; if(TR1)num3++; if(num3==200) num3=0; TR1=0; if(num==200) num=0; sec++; if(sec==60) sec=0; min++; if(min==60) min=0; hour++; if(hour==24) hour=0;voidtimer1()interrupt3 TH1=(65536-1)/256; TL1=(65536-1)%256; fre++;voidzd()interrupt4//當(dāng)進(jìn)入中斷,要么RI=1,要么TI=1if(RI)i=SBUF;RI=0;elseTI=0;2.雙工接收程序:#include<reg51.h>#include<stdio.h>#defineuintunsignedint#defineucharunsignedcharucharget[3];sbitdula=P2^6;sbitwela=P2^7;sbitkey1=P3^4;sbitkey2=P3^5;sbitkey3=P3^6;sbitkey4=P3^7;sbitds=P2^2;uchari,j;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //帶小數(shù)點(diǎn)的0~9編碼0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //不帶小數(shù)點(diǎn)的0~9的編碼voiddelayms(uintxms) uinti,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);voiddisplay(ucharnum1,uchardat) //數(shù)據(jù)顯示程序{ //num是第幾個數(shù)碼管,dat是要顯示的數(shù)字 uchari; i=0xff; i=i&(~((0x01)<<(num1))); //用I來存儲位選數(shù)據(jù),只有一位為0 wela=1; P0=i;wela=0;P0=0xff; dula=1;P0=table[dat]; //編碼賦給P0口 dula=0; delayms(10);voidinit(void)SCON=0x50;//串行口工作方式1,允許接收PCON=0x00;//波特率不倍增TMOD=0x20;//定時器1工作于8位自動重載模式,用于產(chǎn)生波特率TH1=0xfd;TL1=0xfd;//T1賦初值,11.0592M晶振,TR1=1;//啟動定時器1 EA=1;ET1=0; ES=1;voidmain(void)init();while(1)display(0,get[0]);display(1,get[1]+10);display(2,get[2]);voidzd()interrupt4if(RI)get[j]=SBUF;if(j==3)j=0;j++;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版學(xué)校節(jié)日慶典活動承包運(yùn)營合同3篇
- 2025年度個人商標(biāo)權(quán)抵押擔(dān)保許可協(xié)議書4篇
- 二零二五年度高速公路邊坡草皮修復(fù)合同模板3篇
- 網(wǎng)絡(luò)素養(yǎng)在學(xué)生職業(yè)發(fā)展中的重要性
- 二零二五年度車輛牌照租賃數(shù)據(jù)共享協(xié)議4篇
- 當(dāng)代企業(yè)網(wǎng)絡(luò)安全風(fēng)險評估與防范措施匯報
- 教學(xué)資料數(shù)字化的應(yīng)用場景及案例分析
- 二零二五年度承臺基坑開挖施工勞務(wù)分包合同施工人員資質(zhì)要求4篇
- 數(shù)海導(dǎo)航小學(xué)數(shù)學(xué)知識框架構(gòu)建
- 安全知識教育在兒童成長中的角色
- T-GDASE 0042-2024 固定式液壓升降裝置安全技術(shù)規(guī)范
- 建筑工地春節(jié)留守人員安全技術(shù)交底
- 默納克-NICE1000技術(shù)交流-V1.0
- 蝴蝶蘭的簡介
- 老年人心理健康量表(含評分)
- 《小兒靜脈輸液速度》課件
- 營銷人員薪酬標(biāo)準(zhǔn)及績效考核辦法
- 醫(yī)院每日消防巡查記錄表
- 運(yùn)輸企業(yè)重大危險源辨識及排查制度
- 運(yùn)動技能學(xué)習(xí)與控制課件第五章運(yùn)動中的中樞控制
- 中心血站改造項(xiàng)目謀劃建議書
評論
0/150
提交評論