




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、單片機實習報告PAGE PAGE 99目錄 TOC o 1-3 h z u HYPERLINK l _Toc327824282 摘要 PAGEREF _Toc327824282 h 2 HYPERLINK l _Toc327824283 Abstract PAGEREF _Toc327824283 h 3 HYPERLINK l _Toc327824284 1.實習任務與要求 PAGEREF _Toc327824284 h 4 HYPERLINK l _Toc327824285 1.1實習目的 PAGEREF _Toc327824285 h 4 HYPERLINK l _Toc32782428
2、6 1.2實習任務 PAGEREF _Toc327824286 h 4 HYPERLINK l _Toc327824287 1.3實習要求 PAGEREF _Toc327824287 h 5 HYPERLINK l _Toc327824288 2基本原理 PAGEREF _Toc327824288 h 6 HYPERLINK l _Toc327824289 2.1數(shù)字時鐘基本原理 PAGEREF _Toc327824289 h 6 HYPERLINK l _Toc327824290 2.2溫度計工作基本原理 PAGEREF _Toc327824290 h 6 HYPERLINK l _Toc3
3、27824291 2.3頻率計工作基本原理 PAGEREF _Toc327824291 h 6 HYPERLINK l _Toc327824292 3方案論證 PAGEREF _Toc327824292 h 7 HYPERLINK l _Toc327824293 3.1鍵盤顯示接口部分 PAGEREF _Toc327824293 h 7 HYPERLINK l _Toc327824294 3.2溫度計部分 PAGEREF _Toc327824294 h 7 HYPERLINK l _Toc327824295 4硬件設計 PAGEREF _Toc327824295 h 9 HYPERLINK l
4、 _Toc327824296 4.1最小系統(tǒng)設計 PAGEREF _Toc327824296 h 9 HYPERLINK l _Toc327824297 4.1.1晶振振蕩器電路 PAGEREF _Toc327824297 h 9 HYPERLINK l _Toc327824298 4.1.2復位電路 PAGEREF _Toc327824298 h 9 HYPERLINK l _Toc327824299 4.2下載電路 PAGEREF _Toc327824299 h 11 HYPERLINK l _Toc327824300 4.3鍵盤電路 PAGEREF _Toc327824300 h 12
5、HYPERLINK l _Toc327824301 4.4顯示電路 PAGEREF _Toc327824301 h 13 HYPERLINK l _Toc327824302 4.4.1數(shù)碼管結構 PAGEREF _Toc327824302 h 13 HYPERLINK l _Toc327824303 4.4.2LED顯示器工作原理 PAGEREF _Toc327824303 h 14 HYPERLINK l _Toc327824304 4.5溫度傳感器電路設計 PAGEREF _Toc327824304 h 16 HYPERLINK l _Toc327824305 4.5.1DS18B20的工
6、作原理 PAGEREF _Toc327824305 h 16 HYPERLINK l _Toc327824306 4.5.2DS18B20的測溫原理 PAGEREF _Toc327824306 h 19 HYPERLINK l _Toc327824307 4.6總電路 PAGEREF _Toc327824307 h 21 HYPERLINK l _Toc327824308 5軟件設計 PAGEREF _Toc327824308 h 22 HYPERLINK l _Toc327824309 5.1主程序流程圖 PAGEREF _Toc327824309 h 22 HYPERLINK l _Toc
7、327824310 5.2定時器0中斷處理流程圖 PAGEREF _Toc327824310 h 23 HYPERLINK l _Toc327824311 5.3時鐘子程序 PAGEREF _Toc327824311 h 24 HYPERLINK l _Toc327824312 5.4溫度子程序 PAGEREF _Toc327824312 h 25 HYPERLINK l _Toc327824313 5.5雙機通信 PAGEREF _Toc327824313 h 26 HYPERLINK l _Toc327824314 5.6頻率計子程序 PAGEREF _Toc327824314 h 28
8、HYPERLINK l _Toc327824315 5.7程序清單 PAGEREF _Toc327824315 h 28 HYPERLINK l _Toc327824316 6仿真分析 PAGEREF _Toc327824316 h 41 HYPERLINK l _Toc327824317 6.1數(shù)字時鐘仿真分析 PAGEREF _Toc327824317 h 41 HYPERLINK l _Toc327824318 6.2溫度計仿真 PAGEREF _Toc327824318 h 43 HYPERLINK l _Toc327824319 6.3頻率計仿真 PAGEREF _Toc327824
9、319 h 45 HYPERLINK l _Toc327824320 7.實物運行照片 PAGEREF _Toc327824320 h 48 HYPERLINK l _Toc327824321 8 小結 PAGEREF _Toc327824321 h 51 HYPERLINK l _Toc327824322 參考文獻 PAGEREF _Toc327824322 h 52摘要本次單片機實習的主要目的是鞏固單片機的理論知識及鍛煉實際動手能力。主要任務是在最小系統(tǒng)的基礎上設計鍵盤顯示電路,然后編程實現(xiàn)數(shù)字時鐘,數(shù)字溫度計和數(shù)字頻率計。其中數(shù)字時鐘要有調時調分調秒的功能;而溫度計能完成串行通信,將溫度
10、顯示在另一個單片機上.最后要求整個系統(tǒng)能通過按鍵實現(xiàn)數(shù)字時鐘與溫度計和頻率計之間的相互切換。在實習過程要記錄每天的實習內容包括方案的論證,硬件設計,軟件設計,仿真分析及實物制作等。關鍵詞:單片機,數(shù)字時鐘,溫度計,頻率計AbstractThe main goal of the Single Chip Microcomputer practice is to renforce the speculative knowledge and train the ability of handwork.The main task is to design the keyboard display cir
11、cuit on the base of DIY.Then we should programme to realize the digital clock,digtal thermometer and digital frequency meter.whatmore,the digital clock is required to have the function of adjust the second,muinute and hour.The Digtal thermometer is required to accomplish the communication of two Sin
12、gle Chip Microcomputers,the temperature can be displayed on the second Single Chip Microcomputer.At last,the whole system is required to realize the mutual switch between the clock and the thermometer ,the clock and the frequency meter.In the practice course ,we should write down the practice conten
13、ts everyday,including the choice of scheme ,hardware design,software design,simuation analysis,making material object and so on .Key words: Single Chip Microcomputer, digital clock, digtal thermometer , digital frequency meter1.實習任務與要求1.1實習目的1、鞏固單片機原理與應用理論課的理論知識;2、熟悉單片機應用系統(tǒng)的硬件設計及軟件設計的基本方法;3、將單片機原理與應
14、用理論課的理論知識應用于實際的應用系統(tǒng)中;4、訓練單片機應用技術,鍛煉實際動手能力。1.2實習任務(1)利用上述材料完成單片機最小系統(tǒng)的設計、焊接、調試;(2)完成ISP下載電路的設計、焊接;(3)完成應用系統(tǒng)擴展電路部分的設計、焊接、調試,應用系統(tǒng)擴展電路的具體要求如下:1)鍵盤、顯示電路利用單片機最小系統(tǒng)、6個7段LED數(shù)碼管、12個按鍵,設計制作一個鍵盤、顯示電路。可以使用8279鍵盤顯示接口電路,也可以使用單片機的并行接口作為鍵盤顯示接口。2) 數(shù)字時鐘在鍵盤、顯示電路的基礎上完成一個數(shù)字時鐘的設計,完成以下功能:要求以24小時計時方式顯示時、分、秒;時、分、秒可以通過按鍵分別調整。3
15、) 數(shù)字溫度計在上題的硬基礎上,制作一個數(shù)字溫度計。完成以下功能:利用DS18B20可編程1-Wire數(shù)字溫度傳感器芯片,或利用AD590溫度傳感器芯片和A/D轉換器芯片采集溫度溫度信號;當按下鍵盤上的溫度顯示按鍵時將實時溫度信息顯示在LED顯示器上,當按下鍵盤上的時鐘顯示按鍵時,恢復時鐘的正常顯示;通過串行通信的方式,將采集到的實時溫度信息送至第二個單片機系統(tǒng),并在二個單片機系統(tǒng)顯示實時溫度。4) 數(shù)字頻率計在上題的硬基礎上,制作一個數(shù)字頻率計。完成以下功能:利用MCU設計一個數(shù)字頻率計,用于檢測0500kHz周期信號的頻率,輸入信號幅度范圍:0.110V;當按下鍵盤上的頻率顯示按鍵時將測量
16、的頻率信息顯示在LED顯示器上,當按下鍵盤上的時鐘顯示按鍵時,恢復時鐘的正常顯示;(4)利用仿真軟件完成系統(tǒng)仿真工作;(5)完成系統(tǒng)軟件的設計,包括程序結構設計、流程圖繪制、程序設計。1.3實習要求1)利用PROTEL等軟件進行硬件設計;2)利用Keil uV2軟件完成應用系統(tǒng)軟件設計;3)利用PROTEUS軟件進行仿真設計;4)完成單片機最小系統(tǒng)和應用系統(tǒng)電路板的焊接;5)對電路進行調試;6)利用stc-isp軟件完成在系統(tǒng)編程、下載,并完成系統(tǒng)軟件調試;7)題目由指導教師提供;8)要求每個學生單獨完成硬件軟件設計、仿真、焊接、調試任務;9)寫出實習報告,實習報告主要包括以下內容:目錄、摘要
17、、關鍵詞、基本原理、方案論證、硬件設計、軟件設計(帶流程圖、程序清單)、仿真結果、實物運行結果照片、結論、參考文獻等;10)實習完成后通過答辯;11)答辯時交實習報告電子文檔,通過答辯后根據(jù)修改意見修改并打印、裝訂成冊。2基本原理2.1數(shù)字時鐘基本原理數(shù)字時鐘是利用單片機的內部的定時/計數(shù)器工作與定時方式,對機器周期計數(shù)形成基準時間(如10ms),然后用另外一個計數(shù)器或軟件計數(shù)的形式對基準時間里德計數(shù)形成秒(如對10ms計數(shù)100次),“秒”計數(shù)60次形式“分”,“分”計數(shù)60次形成“時”,然后通過軟件程序使它們的內容在相應的位置顯示出來。在具體設計時定時器采用中斷方式工作,對時鐘的形成在終中
18、斷程序中實現(xiàn),在主程序中只是對定時/計數(shù)器的定義初始化,調用顯示程序。并在設計中加入了按鍵,可以通過按鍵對時,分,秒進行調整。2.2溫度計工作基本原理在單片機電路設計中,大多都是使用傳感器,所以可以采用一個溫度傳感器,它會將溫度轉換成數(shù)字量后存貯在自身內部,將其連在單片機的一個IO口,即一種單總線串行接口,然后通過軟件程序在數(shù)碼管或液晶屏上顯示出來就可以直接讀取被測溫度值。2.3頻率計工作基本原理頻率計的基本設計原理是直接用十進制數(shù)字顯示被測信號頻率。所謂頻率,就是周期信號在單位時間(1s)內變化的次數(shù)。若在一定時間間隔T內測得這個周期信號的重復變化次數(shù)N,則其頻率可表示為f=N/T。即可利用
19、單片機內部的定時/計數(shù)器來對外部輸入脈沖進行計數(shù),從而測得頻率。3方案論證3.1鍵盤顯示接口部分方案一:使用8279鍵盤顯示接口電路,即鍵盤和顯示器通過8279芯片然后再接到單片機上,8279可以通過對鍵盤的自動掃描,將鍵盤信號存入FIFO RAM里,再通過顯示子程序顯示按鍵的信息。具體來說,掃描輸出線,通過138譯碼后,作為列與回送線交叉成鍵,輸出數(shù)據(jù)分別用三位來體現(xiàn)掃描碼和回送碼,讀鍵時屏蔽高兩位,使鍵值正好等于輸出數(shù)據(jù)的查表值,從而在數(shù)碼管上顯示出來。方案二:使用單片機的并行接口作為鍵盤顯示接口,即鍵盤引腳直接接到單片機的IO口上。從以上兩種方案可以看出,方案一占用的單片機IO口少,精度
20、高,穩(wěn)定性好,但導致整個電路所用芯片增加,成本提高。相比較而言方案二雖然占用單片機的IO口較多,但這個可以通過設計矩陣鍵盤來解決,并且也較方案一所用的芯片少,降低了成本。綜合考慮選擇方案二。3.2溫度計部分方案一:采用熱電偶溫差電路測溫,溫度檢測部分可以使用低溫熱偶,熱電偶由兩個焊接在一起的異金屬導線所組成,熱電偶產生的熱電勢由兩種金屬的接觸電勢和單一導體的溫差電勢組成。通過將參考結點保持在已知溫度并測量該電壓,便可推斷出檢測結點的溫度。數(shù)據(jù)采集部分則使用帶有A/D 通道的單片機,在將隨被測溫度變化的電壓或電流采集過來,進行A/D 轉換后,就可以用單片機進行數(shù)據(jù)的處理,在顯示電路上,就可以將被
21、測溫度顯示出來。熱電偶的優(yōu)點是工作溫度范圍非常寬,且體積小,但是它們也存在著輸出電壓小、容易遭受來自導線環(huán)路的噪聲影響以及漂移較高的缺點,并且這種設計需要用到A/D 轉換電路,感溫電路比較麻煩。系統(tǒng)主要包括對A/D0809 的數(shù)據(jù)采集,自動手動工作方式檢測,溫度的顯示等,這幾項功能的信號通過輸入輸出電路經單片機處理。此外還有復位電路,晶振電路,啟動電路等。故現(xiàn)場輸入硬件有手動復位鍵、A/D 轉換芯片,處理芯片為51 芯片,執(zhí)行機構有4 位數(shù)碼管、報警器等。方案二:采用數(shù)字溫度芯片DS18B20 測量溫度,輸出信號全數(shù)字化。便于單片機處理及控制,省去傳統(tǒng)的測溫方法的很多外圍電路。且該芯片的物理化
22、學性很穩(wěn)定,它能用做工業(yè)測溫元件,此元件線形較好。在0100 攝氏度時,最大線形偏差小于1 攝氏度。DS18B20 的最大特點之一采用了單總線的數(shù)據(jù)傳輸,由數(shù)字溫度計DS18B20和微控制器AT89S51構成的溫度測量裝置,它直接輸出溫度的數(shù)字信號,可直接與計算機連接。這樣,測溫系統(tǒng)的結構就比較簡單,體積也不大。采用51 單片機控制,軟件編程的自由度大,可通過編程實現(xiàn)各種各樣的算術算法和邏輯控制,而且體積小,硬件實現(xiàn)簡單,安裝方便。既可以單獨對多DS18B20控制工作,還可以與PC 機通信上傳數(shù)據(jù),另外AT89S51 在工業(yè)控制上也有著廣泛的應用,編程技術及外圍功能電路的配合使用都很成熟?!?
23、】該系統(tǒng)利用AT89S51芯片控制溫度傳感器DS18B20進行實時溫度檢測并顯示,能夠實現(xiàn)快速測量環(huán)境溫度,并可以根據(jù)需要設定上下限報警溫度。該系統(tǒng)擴展性非常強,它可以在設計中加入時鐘芯片DS1302以獲取時間數(shù)據(jù),在數(shù)據(jù)處理同時顯示時間,并可以利用AT24C16芯片作為存儲器件,以此來對某些時間點的溫度數(shù)據(jù)進行存儲,利用鍵盤來進行調時和溫度查詢,獲得的數(shù)據(jù)可以通過MAX232芯片與計算機的RS232接口進行串口通信,方便的采集和整理時間溫度數(shù)據(jù)。從以上兩種方案,容易看出方案一的測溫裝置可測溫度范圍寬、體積小,但是線性誤差較大。方案二的測溫裝置電路簡單、精確度較高、實現(xiàn)方便、軟件設計也比較簡單
24、,故本次設計采用了方案二。4硬件設計4.1最小系統(tǒng)設計4.1.1晶振振蕩器電路單片機是一個復雜的同步時序電路,為了保證同步工作方式的實現(xiàn),其所有的工作都在唯一的時鐘信號控制下嚴格的按時序進行的。時序就是單片機內部以及內部與外部互聯(lián)必須遵守的規(guī)律。單片機的時序可以通過兩種方式產生:內部振蕩方式和外部振蕩方式。外部振蕩方式需要引入外部時鐘信號作為單片機的時鐘信號,它可以使各單片機之間的時鐘信號同步,常用于多片單片機組成的系統(tǒng)中,而本次設計只需使用一片單片機,所以本次系統(tǒng)設計采用了內部振蕩方式。單片機內部有一個用于構成振蕩器的高增益反相放大器,引腳X1和X2分別是該放大器的輸入端和輸出端。這個放大器
25、與作為反饋原件的片外石英晶體及電容一起構成一個自激振蕩器。電容C1和C2通常取30pF,對振蕩器有微調的作用。晶振的實際頻率與標稱頻率的關系為:x為實際頻率,0為標稱頻率,0范圍是1.2MHz12MHz。所以本設計晶振Y采用12HMz,電容C1和C2取30pF,則x為12MHZ。圖4-1振蕩電路4.1.2復位電路單片機在啟動時都需要復位,以使CPU及系統(tǒng)各部件處于確定的初始狀態(tài),并從初態(tài)開始工作。除了進入系統(tǒng)的正常初始化之外,由于程序運行出錯或者操作出錯而使單片機系統(tǒng)處于死鎖狀態(tài),為了擺脫死鎖狀態(tài),也需要使單片機重新啟動。單片機的復位操作一般有上電自動復位和按鍵電平復位兩種方式。本設計采用上電
26、自動復位和按鍵電平復位都有的復位電路。手動按鍵復位需要人為在復位輸入端RESET上通過按鈕加入高電平,其復位過程是:當按下按鍵S時,RESET端直接與VCC相連,從按下按鍵到松開按鍵的時間內,能使RESET端維持一段時間的高電平,這段時間的高電平使單片機復位。當按鍵被松開后,RESET端回到低電平,單片機系統(tǒng)完成復位,恢復正常工作狀態(tài)。上電復位電路是在RESET復位輸入引腳上接一電容至VCC端,下接一個電阻到地。上電復位的工作過程是:在系統(tǒng)上電瞬間,電容相當于短路,電源電壓通過電容加給RESET引腳以高電平信號,此高電平信號隨著VCC對電容的充電過程而逐漸回落,在其高電平期間,系統(tǒng)復位;當電容
27、兩端電壓達到電源電壓時,電容充電電流為零,電容相當于開路,RESET端為低電平,單片機復位完成,恢復正常工作狀態(tài)。這里要注意的是,要想實現(xiàn)復位,必須保證復位信號高電平持續(xù)時間大于兩個機器周期,而。本設計的單片機機器周期為:。而,所以滿足要求。圖4-2復位電路圖4-3 最小系統(tǒng)電路4.2下載電路MAX232是電平轉換芯片。1970年,美國電氣學會規(guī)定“RS232”串口通信協(xié)議。規(guī)定邏輯“1”,-5-15V;邏輯“0”,+5+15.噪聲容限為2V.要實現(xiàn)利用串口與單片機進行通信,就要進行電平轉換,把標準轉化成單片機可以識別的。MAX220MAX249都是電平轉換芯片,在單片機最小系統(tǒng)中,使用MAX
28、232.圖4-4下載電路4.3鍵盤電路鍵盤分編碼鍵盤和非編碼鍵盤,鍵盤上閉合鍵的識別由專用的硬件編碼器實現(xiàn),并產生按鍵編碼號或鍵值的稱為編碼鍵盤,如計算機鍵盤。而靠軟件編程來識別的稱為非編碼鍵盤,在單片機組成的各種系統(tǒng)中,用的最多的是非編碼鍵盤,也有用到編碼鍵盤的,我們這里用的就是非編碼鍵盤。在這種非編碼鍵盤的單片機系統(tǒng)中,鍵盤處理程序首先執(zhí)行有無按鍵按下的程序段,當確認有按鍵按下后,下一步就要識別哪一個按鍵被按下,對鍵的識別常采用逐行(逐列)掃描的方法。單片機檢測按鍵是否被按下的依據(jù)是檢測與該鍵對應的I/O口是否為低電平。判斷鍵盤哪一個鍵被按下。方法是:一次給行線送低電平,然后查所有列線狀態(tài)
29、,稱為行掃描,如果全為1,則所按下鍵不在此行,如果不全為1,則所按下鍵必在此行,而且是在與零電平列線相交的交點上的那個鍵。本設計中有2*4矩陣鍵盤和獨立鍵盤。矩陣鍵盤可以有效的減少鍵盤與單片機接口時所占用的I/O接口。圖4-5鍵盤電路如圖所示,2*4矩陣鍵盤的行線和列線者接到了單片機的P3口。S1,S2,S3,S4為獨立鍵盤。4.4顯示電路4.4.1數(shù)碼管結構數(shù)碼管內部有8個發(fā)光二極管,公共端由8個發(fā)光二極管的陰極并接而成,正常顯示時公共端接低電平(GND),各發(fā)光二極管是否點亮取決于a-dp各引腳上是否是高電平。 LED數(shù)碼管的外形結構如圖4-5,外部有10個引腳,其中3, 8腳為公共端也稱
30、位選端,其余8個引腳稱為段選端,當要使某一位數(shù)碼管顯示某一數(shù)字(0-9中的一個)必須在這個數(shù)碼管的段選端加上與數(shù)字顯示數(shù)字對應的8位段選碼(也稱字形碼),在位選端加上低電平即可。LED有共陰極和共陽極兩種。如圖4-5所示。二極管的陰極連接在一起,通常此公共陰極接地,而共陽極則將發(fā)光二極管的陽極連接在一起,接入+5V的電壓。一位顯示器由8個發(fā)光二極管組成,其中7個發(fā)光二極管構成字型“8”的各個筆劃(段)ag,另一個小數(shù)點為dp發(fā)光二極管。當在某段發(fā)光二極管施加一定的正向電壓時,該段筆劃即亮;不加電壓則暗。符號和引腳 共陰極 共陽極圖4-6LED結構圖表4-1LED顯示段碼字型共陽極段共陰極段字型
31、共陽極段共陰極段0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H空白FFH00H880H7FHP8CH73H4.4.2LED顯示器工作原理:(1)LED靜態(tài)顯示方式 LED顯示器工作于靜態(tài)顯示方式時,各位的共陰極連接在一起并接地;每位的段碼分別與8位的鎖存器輸出相連。各個LED的顯示字符一經確定,相應鎖存的段碼輸出將維持不變,直到送入另一個字符為止,故靜態(tài)顯示器的亮度較高。(2)LED動態(tài)顯示方式在多位LED顯示時,為簡化硬件電路,通
32、常將所有的段碼線相應段并聯(lián)在一起,由1個8位I/0口控制,形成段碼線的多路復用,而各位的共陰極分別由相應的I/O線控制,形成各位的分時選通。設計中采用八個共陰LED管,其中段碼線采用CD4511譯碼占用4位I/O口,而位選信號使用74LS138占用3個I/O口,則只要7個I/O口。由于各位的段碼線并聯(lián),4位I/O口輸出的段碼對各個顯示位來說都是相同的。因此,在同一時刻,如果各位選線都處于選通狀態(tài)的話,8位LED將顯示相同的字符。若要各位LED能夠同時顯示出與本位相應的顯示字符,就必須采用動態(tài)顯示方式,即在某一時刻,只讓某一位的位選線處于選通狀態(tài),而其它各位的位選線處于關閉狀態(tài),同時,段碼線上輸
33、出相應位要顯示的字符的段碼。這樣,在同一時刻,8位LED中只有選通的那1位顯示出字符,而其他7位則是熄滅的。同樣,在下一時刻,只讓下一位的位選線處于選通狀態(tài),而其他各位的位選線處于關閉狀態(tài),在段碼線上輸出將要顯示字符的段碼,則同一時刻,只有選通位顯示出將要顯示的字符,而其他各位則是熄滅的。如此循環(huán)下去,就可以使各位顯示出將要顯示的字符。雖然這些字符是在不同時刻出現(xiàn)的,而在同一時刻,只有一位顯示,其他各位熄滅,但由于LED顯示器的余輝和人眼的視覺暫留作用,只要每位顯示間隔足夠短,則可以造成多位同時亮的假象,達到同時顯示的效果。發(fā)光二極管從導通到發(fā)光有一定的延時,導通時間太短,則發(fā)光太弱,人眼無法
34、看清;但也不能太長,因為要受限于臨界閃爍頻率,而且此時間越長,占用CPU時間也越多。另外,顯示位數(shù)增多,也將占用大量的CPU時間,因此動態(tài)顯示的實質是以犧牲CPU時間來換取器件的減少。本次設計中,6位LED七段數(shù)碼管采用共陰極接法。圖4-7顯示電路如圖所示,單片機的P0口通過U2鎖存器(74HC573)與數(shù)碼管相連,來實現(xiàn)位選;通過U3與數(shù)碼管相連來實現(xiàn)段選。4.5溫度傳感器電路設計4.5.1DS18B20的工作原理根據(jù)DS18B20的通訊協(xié)議,主機控制DS18B20完成溫度轉換必須經過三個步驟:1. 每一次讀寫之前都必須要對DS18B20進行復位;2. 復位成功后發(fā)送一條ROM指令;3. 最
35、后發(fā)送RAM指令,這樣才能對DS18B20進行預定的操作。復位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號后等待1560微秒左右后發(fā)出60240微秒的存在低脈沖,主CPU收到此信號表示復位成功。其工作時序包括初始化時序、寫時序和讀時序,具體工作方法如圖4-8,4-9,4-10所示。初始化時序圖4-8初始化時序總線上的所有傳輸過程都是以初始化開始的,主機響應應答脈沖。應答脈沖使主機知道,總線上有從機設備,且準備就緒。主機輸出低電平,保持低電平時間至少480us,以產生復位脈沖。接著主機釋放總線,4.7K上拉電阻將總線拉高,延時1560us,并進入接受模式,以產生低電平應答
36、脈沖,若為低電平,再延時480us。(2) 寫時序圖4-9 寫時序 寫時序包括寫0時序和寫1時序。所有寫時序至少需要60us,且在2次獨立的寫時序之間至少需要1us的恢復時間,都是以總線拉低開始。寫1時序,主機輸出低電平,延時2us,然后釋放總線,延時60us。寫0時序,主機輸出低電平,延時60us,然后釋放總線,延時2us。(3) 讀時序圖4-10 讀時序總線器件僅在主機發(fā)出讀時序是,才向主機傳輸數(shù)據(jù),所以,在主機發(fā)出讀數(shù)據(jù)命令后,必須馬上產生讀時序,以便從機能夠傳輸數(shù)據(jù)。所有讀時序至少需要60us,且在2次獨立的讀時序之間至少需要1us的恢復時間。每個讀時序都由主機發(fā)起,至少拉低總線1us
37、。主機在讀時序期間必須釋放總線,并且在時序起始后的15us之內采樣總線狀態(tài)。主機輸出低電平延時2us,然后主機轉入輸入模式延時12us,然后讀取總線當前電平,然后延時50us。當主機收到DSl8B20 的響應信號后,便可以發(fā)出ROM 操作命令之一,這些命令如表4-2所示。RAM指令集如表4-3所示。主機控制DS18B20完成溫度轉換過程是:每一次讀寫之前都要對DS18B20進行復位,即將數(shù)據(jù)總線下拉500us,然后釋放,DS18B20收到信號后等待16-60us左右,之后發(fā)出60-240us的存在低脈沖,主CPU收到此此信號表示復位成功;復位成功后發(fā)送一條ROM指令,然后發(fā)送RAM指令,這樣才
38、能對DS18B20進行預訂的讀寫操作。表4-2 ROM操作命令指令約定代碼功能讀ROM33H讀DS18B20中的編碼符合ROM55H發(fā)出此命令后,接著發(fā)出64位ROM編碼,訪問單線總線上與該編輯相對應的DS18B20使之做出響應,為下一步對該DS18B20的讀寫作準備搜索ROM0F0H用于確定掛接在同一總線上的DS18B20個數(shù)和識別64位ROM地址,為操作各器件作準備跳過ROM0CCH忽略64位ROM地址,直接向DS18B20發(fā)送溫度變換指令告警搜索命令0ECH執(zhí)行后,只有溫度跳過設定值上限或下限的片子才能做出反應表4-3RAM指令集指令約定代碼功能溫度轉換44H啟動DS18B20進行溫度轉
39、換讀暫存器0BEH讀暫存器9個字節(jié)內容寫暫存器4EH將數(shù)據(jù)寫入暫存器的TH、TL字節(jié)復制暫存器48H把暫存器的TH、TL字節(jié)寫到E2RAM中重調E2RAM0B8H把E2RAM中的TH、TL字節(jié)寫到暫存器TH、TL字節(jié)讀供電方式0B4H啟動DS18B20發(fā)送電源供電方式的信號給主CPU4.5.2DS18B20的測溫原理DS18B20的測溫原理是這這樣的,器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產生固定頻率的脈沖信號送給減法計數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產生的信號作為減法計數(shù)器2的脈沖輸入。器件中還有一個計數(shù)門,當計數(shù)門打開時,DS18B20就對低溫度系數(shù)振蕩
40、器產生的時鐘脈沖進行計數(shù)進而完成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將最低溫所對應的一個基數(shù)分別置入減法計數(shù)器1、溫度寄存器中,計數(shù)器1和溫度寄存器被預置在最低溫所對應的一個基數(shù)值。減法計數(shù)器1對低溫度系數(shù)晶振產生的脈沖信號進行減法計數(shù),當減法計數(shù)器1的預置值減到0時,溫度寄存器的值將加1,減法計數(shù)器1的預置將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶振產生的脈沖信號進行計數(shù),如此循環(huán)直到減法計數(shù)器計數(shù)到0時,停止溫度寄存器的累加,此時溫度寄存器中的數(shù)值就是所測溫度值。其輸出用于修正減法計數(shù)器的預置值,只要計數(shù)器門仍未關閉就重復上述過程,直到溫度寄存器值大致
41、被測溫度值。減法計數(shù)器斜坡累加器減到0減法計數(shù)器預 置低溫度系數(shù)振 蕩 器高溫度系數(shù)振 蕩 器計數(shù)比較器預 置溫度寄存器減到0圖4-11測溫原理圖初始化DS18B20跳過ROM匹配溫度變換延時1S跳過ROM匹配讀暫存器轉換成顯示碼數(shù)碼管顯示圖4.12測溫流程圖圖4-13溫度傳感電路4.6總電路 圖4-14總電路圖(1)當給單片機上電后,其為時鐘模式,按一次S1實現(xiàn)對“秒”的調整,按兩次S1實現(xiàn)對“分”的調整,按三次S1實現(xiàn)對“時”調整;按S2 實現(xiàn)增1,按S3實現(xiàn)減1.(2)按S2實現(xiàn)時鐘到溫度計的切換,按S4恢復時鐘。(3)按S3實現(xiàn)時鐘到頻率計的切換,按S4恢復時鐘。5軟件設計5.1主程序
42、流程圖開始初始化調用顯示時鐘函數(shù)調用鍵盤掃描函數(shù)調用溫度顯示函數(shù)調用頻率計函數(shù)S2是否按下S4是否按下S3是否按下顯示時鐘YYYNN 5.2定時器0中斷處理流程圖5.2中斷程序流程圖重裝初值保護現(xiàn)場計數(shù)單元加1到1秒?N秒加1N到60秒?秒清0,分加1N到60分?分清0,時加1N到24時?小時清0恢復現(xiàn)場中斷返回5.3時鐘子程序開始調用鍵盤掃描函數(shù)S1是否按下調用延時函數(shù)S1按下1次S1按下2次S1按下3次S2是否按下S3是否按下調秒調分調時加1減1YY5.4溫度子程序設置堆棧指針將溫度轉換為BCD碼發(fā)讀存儲器命令讀溫度數(shù)據(jù)復位DS18B20發(fā)跳過ROM命令顯示緩沖區(qū)初始化更新數(shù)據(jù)緩沖區(qū)延時發(fā)
43、溫度轉換命令復位DS18B20發(fā)跳過ROM命令開始顯示溫度雙機通信5.5雙機通信(1)發(fā)送開始T1初始化,啟動T1工作設定串行工作方式置發(fā)送數(shù)據(jù)塊首址數(shù)據(jù)塊長度計數(shù)器結束T1=1全部數(shù)據(jù)發(fā)送完清T1修改地址指針和數(shù)據(jù)塊長度計數(shù)器發(fā)送數(shù)據(jù)NNYY(2)接收開始T1初始化,啟動T1工作設定串行工作方式并設定允許接收模式置發(fā)送數(shù)據(jù)塊首址數(shù)據(jù)塊長度計數(shù)器結束R1=1全部數(shù)據(jù)接收完清R1修改地址指針和數(shù)據(jù)塊長度計數(shù)器接收數(shù)據(jù)NNYY5.6頻率計子程序開始頻率測量計數(shù)器計數(shù)測量數(shù)據(jù)顯示5.7程序清單:1.主程序#include#include#define uint unsigned int#define
44、 uchar unsigned charsbit dula=P26;sbit wela=P27;sbit key1=P34;sbit key2=P17;sbit key3=P36;sbit key4=P37;sbit ds=P22;uint temp;float f_temp;uchar buf3;uchar i,num,hour,min,sec,num1,num2,num3,num4;unsigned long int fre;uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f, /帶小數(shù)點
45、的09編碼0 xbf,0 x86,0 xdb,0 xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef;/不帶小數(shù)點的09的編碼void delayms(uint xms)uint i,j;for(i=xms;i0;i-)for(j=110;j0;j-);void display(uchar num1,uchar dat) /數(shù)據(jù)顯示程序 /num是第幾個數(shù)碼管,dat是要顯示的數(shù)字uchar i;i=0 xff;i=i&(0 x01)0)i-;ds=1;i=4;while(i0)i-;bit tempreadbit(void)/讀1位數(shù)據(jù)函數(shù)uint i;bit d
46、at;ds=0;i+; /i+起延時作用ds=1;i+;i+;dat=ds;i=8;while(i0)i-;return(dat);uchar tempread(void) /讀一個字節(jié)數(shù)據(jù)函數(shù)uchar i,j,dat;dat=0;for(i=1;i=8;i+)j=tempreadbit();dat=(j1); /讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在dat里return(dat);void tempwritebyte(uchar dat) /向DS18B20寫一個字節(jié)數(shù)據(jù)函數(shù)uint i;uchar j;bit testb;for(j=1;j1;if(testb)ds=0;i+;i+
47、;ds=1;i=8;while(i0)i-;elseds=0;i=8;while(i0)i-;ds=1;i+,i+;void tempchange(void) /DS18B20開始獲取溫度并轉換dsreset();delayms(1);tempwritebyte(0 xcc);/寫跳過讀ROM指令tempwritebyte(0 x44);/寫溫度轉換指令uint get_temp() /讀取寄存器中存儲的溫度數(shù)據(jù)uchar a,b;dsreset();delayms(1);tempwritebyte(0 xcc);tempwritebyte(0 xbe);a=tempread(); /讀低8位
48、b=tempread(); /讀高8位temp=b;temp0;i-) / dis_temp(get_temp(); / deal(); delayms(5); SBUF=bufi;if(key4=0)delayms(10);if(key4=0)ES=0;num2=0;TR1=0;TMOD=0 x51;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);i
49、f(key3=0)fre=0;TR1=1;if(key4=0)delayms(10);if(key4=0)num2=0; void timer0() interrupt 1 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;void timer1() interrupt 3TH1=(65536-1)/256;TL
50、1=(65536-1)%256;fre+;void zd() interrupt 4 /當進入中斷,要么RI=1,要么TI=1 if(RI) i=SBUF; RI=0; else TI=0;2.雙工接收程序:#include #include#define uint unsigned int#define uchar unsigned char uchar get3;sbit dula=P26;sbit wela=P27;sbit key1=P34;sbit key2=P35;sbit key3=P36;sbit key4=P37;sbit ds=P22;uchar i,j;uchar cod
51、e table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f, /帶小數(shù)點的09編碼0 xbf,0 x86,0 xdb,0 xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef;/不帶小數(shù)點的09的編碼void delayms(uint xms)uint i,j;for(i=xms;i0;i-)for(j=110;j0;j-);void display(uchar num1,uchar dat) /數(shù)據(jù)顯示程序 /num是第幾個數(shù)碼管,dat是要顯示的數(shù)字uchar i;i=0 xff;i=i&
52、(0 x01) 1. 在.h/.cpp的開頭應有一段格式統(tǒng)一的說明,內容包括: a. 文件名 (FileName); b. 創(chuàng)建人 (Creater); c. 文件創(chuàng)建時間 (Date); d. 簡短說明文件功能、用途 (Comment)。好習慣 2. 除非極其簡單,否則對函數(shù)應有注釋說明。內容包括:功能、入口/出口參數(shù),必要 時還可有備注或補充說明。還是好習慣 3. 每列代碼的長度推薦為 80列,最長不得超過120列;折行以對齊為準。太寬了,我的限制是60列,因為文本方式下屏幕一共80列,如果你用BC這一類的編輯器,窗口邊框等又要占據(jù)一定空間,所以80列太寬 4. 循環(huán)、分支代碼,判斷條件與
53、執(zhí)行代碼不得在同一行上。很對 5. 指針的定義,* 號既可以緊接類型,也可以在變量名之前。 例:可寫做:int*pnsize; 也可寫做:int*pnsize; 但不得寫做:int*pnsize;建議采用第二種,除非附加另外一條規(guī)定:一次只聲明一個變量,否則就會讓人混淆,比如:int* a, b;看起來b好像也是個指針,其實不是。 6. 在類的成員函數(shù)內調用非成員函數(shù)時,在非成員函數(shù)名前必須加上:。這一條我倒覺得并不是必需的,我的看法是決不要讓你的類成員函數(shù)和全局函數(shù)的名稱相同(或類似) 7. 函數(shù)入口參數(shù)有缺省值時,應注釋說明。 例:BOOL CWpsDib:PaintDIB(CDC* pD
54、C, CRect& rc,int nBrightness, file:/*=0*/BOOL bGrayScale file:/*=FALSE*/ )每個變量寫一行,必要時加上/*in, out*/注釋 8. elseif 必須寫在一行。應該盡量避免else if這樣的結構 9. 與、有關的各項規(guī)定:9.1、應獨占一行。在該行內可有注釋。 9.2 必須另起一行, 之后的代碼必須縮進一個Tab。與必須在同 一列上。 9.3 在循環(huán)、分支之后若只有一行代碼,雖然可省略、,但不推薦這么 做。若省略后可能引起歧義,則必須加上、。持保留意見,因為GNU的代碼規(guī)范是這樣的:if ( NULL = ptr )
55、/ do something here或者if ( NULL = ptr ) / do something here爭論哪個更好并沒有意義,關鍵是統(tǒng)一,如果用VC當然你的辦法最方便,可是如果你用emacs或者vi,就不是這樣了。 10. 與空格有關的各項規(guī)定。 10.1 在所有兩目、三目運算符的兩邊都必須有空格。在單目運算符兩端不必空格。但 在、:、.、等運算符前后,及&(取地址)、* (取值)等運算符之后不得有空格。 10.2for、while、if 等關鍵詞之后應有1個空格,再接(,之后無空格;在結尾 的)前不得有空格。我認為在括號兩端加空格并不是什么錯誤,尤其是在一個條件十分復雜的if語
56、句里 10.3 調用函數(shù)、宏時,(、)前后不得有空格。 10.4類型強制轉換時,()前后不得有空格同上 11. 與縮進有關的各項規(guī)定 11.1 縮進以 Tab 為單位。1 個 Tab 為 4 個空格我認為這個值應該更大,我自己使用8個空格,如果你的代碼因為縮進幅度太大而導致折行,那么幾乎可以肯定你的程序設計方案有問題。 11.2 下列情況,代碼縮進一個 Tab: 1. 函數(shù)體相對函數(shù)名及、。 2. if、else、for、while、do 等之后的代碼。 3. 一行之內寫不下,折行之后的代碼,應在合理的位置進行折行。若有 + - * / 等運 算符,則運算符應在上一行末尾,而不應在下一行的行首
57、。這一條我反對,運算符應該放在下一行行首,以使人能清楚的知道這一行是續(xù)上一行的,比如if ( something& somethingelse& otherthings )如果寫做if ( something &somethingelse &otherthings )反而看不清楚 11.3 下列情況,不必縮進:switch 之后的 case、default。編程規(guī)范與范例目 錄1 排版 62 注釋 113 標識符命名 184 可讀性 205 變量、結構 226 函數(shù)、過程 287 可測性 368 程序效率 409 質量保證 4410 代碼編輯、編譯、審查 5011 代碼測試、維護 5212 宏
58、 53 1 排版1-1:程序塊要采用縮進風格編寫,縮進的空格數(shù)為4個。說明:對于由開發(fā)工具自動生成的代碼可以有不一致。1-2:相對獨立的程序塊之間、變量說明之后必須加空行。示例:如下例子不符合規(guī)范。if (!valid_ni(ni) . / program coderepssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;應如下書寫if (!valid_ni(ni) . / program coderepssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dat
59、aindex.ni;1-3:較長的語句(80字符)要分成多行書寫,長表達式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進行適當?shù)目s進,使排版整齊,語句可讀。示例:perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN + STAT_SIZE_PER_FRAM * sizeof( _UL );act_task_tableframe_id * STAT_TASK_CHECK_NUMBER + index.occupied = stat_poiindex.occupied;act_task_tabletaskno.duration
60、_true_or_false = SYS_get_sccp_statistic_state( stat_item );report_or_not_flag = (taskno MAX_ACT_TASK_NUMBER) & (n7stat_stat_item_valid (stat_item) & (act_task_tabletaskno.result_data != 0); 1-4:循環(huán)、判斷等語句中若有較長的表達式或語句,則要進行適應的劃分,長表達式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首。示例:if (taskno max_act_task_number) & (n7stat_s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基本知識培訓課件學校
- 從數(shù)據(jù)到洞察:DEA與Bootstrap-DEA方法在技術效率估計中的比較剖析
- 八年級數(shù)學一次函數(shù)綜合測試試卷及答案
- 三維高密度集成系統(tǒng)下多物理場耦合算法的深度探索與創(chuàng)新發(fā)展
- HLA-G表達:解鎖結直腸癌診療密碼的新視角
- 八年級數(shù)學三元一次方程組試卷及答案
- 基層醫(yī)院高血壓病課件
- 新解讀《GB-T 39713-2020精細陶瓷粉體比表面積試驗方法 氣體吸附BET法》
- 新解讀《GB-T 24981.2-2020稀土長余輝熒光粉試驗方法 第2部分:余輝亮度的測定》
- uml面試題及答案
- 2025年新高考Ⅰ卷(新課標Ⅰ卷)語文真題試卷(含答案)
- 租房開午托園合同范本
- 船員基本急救知識
- 肝癌中西醫(yī)治療
- 凈水工程培訓課件
- 商標侵權培訓課件
- 江西贛州寧福殯儀服務有限公司招聘筆試題庫2025
- 田地開墾合同協(xié)議
- 直銷行業(yè)培訓課程
- 2024年南充五中小升初數(shù)學測試題
- 中醫(yī)護理學精氣血津液
評論
0/150
提交評論