單片機(jī)溫度檢測記錄系統(tǒng)_第1頁
單片機(jī)溫度檢測記錄系統(tǒng)_第2頁
單片機(jī)溫度檢測記錄系統(tǒng)_第3頁
單片機(jī)溫度檢測記錄系統(tǒng)_第4頁
單片機(jī)溫度檢測記錄系統(tǒng)_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、物理與電子信息學(xué)院題目:單片機(jī)溫度檢測記錄系統(tǒng)行政班級:成員分組名單學(xué)號:姓名:選課班級:任課教師:成績:目錄1設(shè)計任務(wù)與要求21.1 設(shè)計任務(wù)21.2 技術(shù)指標(biāo)21.3 題目評析22方案比較與論證32.1 各種方案比較與選擇33系統(tǒng)硬件設(shè)計43.1 系統(tǒng)的總體設(shè)計4圖3-2總體原理圖錯誤!未定義書簽。3.2 功能模塊設(shè)計及工作原理的分析43.2.1 時鐘顯示模塊43.2.2 溫度傳感器模塊錯誤!未定義書簽。3.2.3 LCD顯示數(shù)據(jù)模塊53.2.4 串口數(shù)據(jù)傳輸顯示模塊63.3 發(fā)揮部分的設(shè)計與實現(xiàn)83.3.1 年月日時分秒,溫度報警上限設(shè)置功能83.3.1.1 硬件按鈕部分83.3.1.2

2、 紅外遙控設(shè)置模塊83.3.2 按鍵傳輸串口數(shù)據(jù)94系統(tǒng)軟件設(shè)計105 測試結(jié)果136 系統(tǒng)電路存在的不足和改進(jìn)的方向147參考文獻(xiàn)錯誤!未定義書簽。8附錄:錯誤!未定義書簽。1設(shè)計任務(wù)與要求1.1 設(shè)計任務(wù)設(shè)計制作一臺可檢測和記錄溫度的系統(tǒng)。1.2 技術(shù)指標(biāo)(1) LCD顯示實時時鐘:年、月、日、時、分、秒;(2)每30秒采樣溫度,LCD更新顯示溫度值;(3)按鍵觸發(fā)存儲當(dāng)前溫度和時鐘信息(年、月、日、時、分);(4)按鍵觸發(fā)串口傳輸存儲的溫度和時鐘信息;(5)溫度測量精度:土1度。1.3題目評析本設(shè)計題我們小組摒棄了常規(guī)做法,加入了兩項獨特的創(chuàng)新實現(xiàn)方法:(1)對于數(shù)據(jù)傳送儲存顯示方面我們

3、不使用24C02存儲器,I2C存儲器等儲存器件,而是直接通過串口將數(shù)據(jù)傳輸?shù)碾娔X中通過VB界面顯示數(shù)據(jù)并將數(shù)據(jù)記錄在電腦硬盤中。(2)在設(shè)置時間日期,上限溫度上,我們不僅僅采用了硬件按鈕控制而且還加入了紅外遙控控制。與此同時,我們的溫度測量精度在理論上能達(dá)到0.0625實際運行時也能達(dá)到0.1度,而實驗所要求的僅為1攝氏度。另外,在DS1302芯片上加入了一個備用電源,使得主電源掉電時,時鐘芯片仍然在隨著時間的移動而實時更新。因此主電源再次上電時,時鐘依然是準(zhǔn)確的,而不必重新調(diào)過。2方案比較與論證2.1 各種方案比較與選擇2.1.1 溫度傳感器目前使用接觸式比較多,主要有熱電式傳感器,把溫度變

4、化轉(zhuǎn)換為電阻變化的叫熱電阻傳感器,把溫度變化轉(zhuǎn)換為熱電勢變換的叫熱電偶傳感器。方案1:熱電阻傳感器具有高溫系數(shù),高電阻率,物理特性穩(wěn)定,良好的線性輸出等優(yōu)點,常用的有pt100等。方案2:熱電偶傳感器具有結(jié)構(gòu)簡單,測量范圍廣,熱慣性小,準(zhǔn)確度高,輸出信號遠(yuǎn)的優(yōu)點,但價格較高。方案3:新型可編程溫度傳感器DS18B20,精度高,成本低,易于采集信號。利用熱電偶或熱敏電阻作為溫度傳感器,這類傳感器至儀表之間通常都要用專用的溫度補(bǔ)償導(dǎo)線,而溫度補(bǔ)償導(dǎo)線的價格很高,并且線路太長,會影響測量精度,這是直接以模擬量形式進(jìn)行采集的不可避免的問題。采用新型可編程溫度傳感器DS18B20進(jìn)行溫度檢測可以避免熱電

5、偶或熱敏電阻作為溫度傳感器所造成的測量精度誤差過大等問題,同時DS18B20只需要一個I/O口便可以進(jìn)行通信,它可以以更低的成本和更高的精確度實現(xiàn)溫度檢測。所以選擇方案3。2.1.2 時鐘顯示方案1:采用內(nèi)部時鐘計時。方案2:采用外部時鐘芯片DS1302。采用內(nèi)部時鐘計時,可以節(jié)省IO弓I腳,降低成本,但是內(nèi)部振蕩器使用阻容震蕩,其精度不高,如果使用了串口、或者PWM等對時鐘比較敏感的功能,會對時鐘造成混亂。采用外部時鐘芯片DS1302,不僅僅能對時間進(jìn)行計時還可以對年、月、日、周進(jìn)行計時,具有閏年補(bǔ)償功能而且對于使用串口、或者PWM等對時鐘比較敏感的功能,不會產(chǎn)生影響。如果接入外置電子電池的

6、話在系統(tǒng)掉電的情況下還可以繼續(xù)計時。所以選擇方案2。2.1.3 時間溫度數(shù)據(jù)顯示方案1:采用數(shù)碼管顯示。方案2:米用LCD顯木器顯布。采用數(shù)碼管顯示時間溫度數(shù)據(jù)操作方便,但需要用到的數(shù)碼管數(shù)量甚多,占用I/O口較多,浪費I/O口的利用率,且只能顯示數(shù)字。而使用LCD顯示雖然在編程上有一定程度比數(shù)碼管顯示的復(fù)雜性高,但其占用的I/O資源較少,且能顯示的內(nèi)容比數(shù)碼管豐富的多,不僅能顯示數(shù)值還能顯示英文。所以使用方案2.2.1.4 數(shù)據(jù)的串口傳送與儲存顯示方案1:通過串口將數(shù)據(jù)傳送到另一個單片機(jī)系統(tǒng)上顯示,采用24C02存儲器對數(shù)據(jù)進(jìn)行儲存。方案2:通過串口將數(shù)據(jù)傳送到PC機(jī)上并用VB程序編寫的界面

7、顯示,采用PC機(jī)上的“D盤”對數(shù)據(jù)進(jìn)行儲存。通過串口將數(shù)據(jù)從一個單片機(jī)傳送到另一個單片機(jī)上設(shè)置較為簡單,將數(shù)據(jù)存儲到24C02存儲器上,不易于對任意時間溫度數(shù)據(jù)進(jìn)行提取,而將數(shù)據(jù)傳送到PC機(jī)上并用VB界面顯示出來不僅美觀而且信息量豐富,將數(shù)據(jù)儲存在“D:溫度.TXT”目錄下不僅存儲量大,而且便于直觀查看。所以使用方案2。3系統(tǒng)硬件設(shè)計3.1 系統(tǒng)的總體設(shè)計本系統(tǒng)以STM32F103ZET6單片機(jī)為核心,采用溫度傳感器DS18B20進(jìn)行溫度檢測,將數(shù)字溫度信息傳輸?shù)絾纹瑱C(jī)中,在時鐘方面采用外部時鐘芯片DS1302,DS1302是一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周、

8、時、分、秒進(jìn)行計時。單片機(jī)通過采集溫度時間信息后將溫度時間數(shù)據(jù)傳送到LCD上顯示出來,并將數(shù)據(jù)通過串口通信通過MAX232傳送到電腦中,硬件總體框圖如下:圖3-1硬件總體框圖3.2 功能模塊設(shè)計及工作原理的分析3.2.1 時鐘顯示模塊時鐘模塊采用外部時鐘DS1302進(jìn)行計時,DS1302是一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周、時、分、秒進(jìn)行計時,具有閏年補(bǔ)償功能,工作電壓為2.5V5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31X8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1

9、202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進(jìn)行涓細(xì)電流充電的能力。其管腳圖以及此模塊仿真圖如圖3-3(a)及3-3(b)所示。(a)(b)圖3-3DS1302管腳圖與時鐘模塊仿真圖各引腳的功能為:Vcc1:備用電源;Vcc2:主電源。當(dāng)Vcc2>Vcc1+0.2V時,由Vcc2向DS1302供電,當(dāng)Vcc2<Vcc1時,由Vcc1向DS1302供電。在實物中,我們將vccl與一顆3V的鈕扣電池相連,從而實現(xiàn)時鐘實時更新功能。SCLK:串行時鐘,輸入,控制數(shù)據(jù)的輸入與輸出;I/O:三線接口時的雙向數(shù)據(jù)線;CE:輸入信號,在讀、寫數(shù)據(jù)

10、期間,必須為高。該引腳有兩個功能:第一,CE開始控制字訪問移位寄存器的控制邏輯;其次,CE提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒?。DS1302有下列幾組寄存器:DS1302有關(guān)日歷、時間的寄存器共有12個,其中有7個寄存器(讀時81h8Dh,寫時80h8Ch),存放的數(shù)據(jù)格式為BCD碼形式,如下圖3-4所示。讀寄存器寫寄存器BIT7BIT6BIT5BIT4BIT3BIT20IT1BIT0范圍81HsonCH1。秒再00-5983h62h1。分分00-5985tl64h12/2?0IC時時1-12/0-2387h86h00WB日7189hSflh00010月.月1-128Ah00000周日:-7B

11、Dh8Chto年年00-998EhWP0000000圖3-4各寄存器詳情DS1302的控制字如圖3-5所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。DS130

12、2可以用于數(shù)據(jù)記錄,特別是對某些具有特殊意義的數(shù)據(jù)點的記錄,能實現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時間同時記錄。這種記錄對長時間的連續(xù)測控系統(tǒng)結(jié)果的分析及對異常數(shù)據(jù)出現(xiàn)的原因的查找具有重要意義。傳統(tǒng)的數(shù)據(jù)記錄方式是隔時采樣或定時采樣,沒有具體的時間記錄,因此,只能記錄數(shù)據(jù)而無法準(zhǔn)確記錄其出現(xiàn)的時間;若采用單片機(jī)計時,一方面需要采用計數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費單片機(jī)的資源,而且,某些測控系統(tǒng)可能不允許。但是,如果在系統(tǒng)中采用時鐘芯片DS1302,則能很好地解決這個問題。3.2.2 dht11溫濕感應(yīng)器DHT1微生溫濕度使感鑒是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器,它應(yīng)用

13、專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性和卓越的長期穩(wěn)定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價比極高等優(yōu)點。每個DHT11傳感器都在極為精確的濕度校驗室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式存在OTP內(nèi)存中,傳感器內(nèi)部在檢測型號的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,使其成為該類應(yīng)用中,在苛刻應(yīng)用場合的最佳選擇。產(chǎn)品為4針單排引腳封裝,連接方便。”技術(shù)參數(shù)供電電壓:3.35.5VDC輸出:單總線數(shù)字信號測量范圍:濕度20-

14、90%RH溫度050c測量精度:濕度+-5%RH溫度+-2C分辨率:濕度1%RH溫度1C互換性:可完全互換,長期穩(wěn)定性:±1%R#3.2.3 串口數(shù)據(jù)傳輸顯示模塊串行接口SerialInterface是指數(shù)據(jù)一位位地順序傳送,其特點是通信線路簡單,只要一對傳輸線就可以實現(xiàn)雙向通信,并可以利用電話線,從而大大降低了成本,特別適用于遠(yuǎn)距離通信,但傳送速度較慢。RS-232也稱標(biāo)準(zhǔn)串口,最常用的一種串行通訊接口。采取不平衡傳輸方式,即所謂單端通訊。由于其發(fā)送電平與接收電平的差僅為2V至3V左右,所以其共模抑制能力差,再加上雙絞線上的分布電容,其傳送距離最大為約15米,最高速率為20kb/s

15、。RS-232是為點對點(即只用一對收、發(fā)設(shè)備)通訊而設(shè)計的,其驅(qū)動器負(fù)載為37kQ。所以RS-232適合本地設(shè)備之間的通信。這里我們通過STM32F103ZET6的串行傳輸口TXD,RXD,將溫度,時間數(shù)據(jù)通過MAX232傳輸?shù)絇C上并通過VB界面顯示時間溫度描繪溫度/時間曲線。MAX232芯片是美信公司專門為電腦的RS-232標(biāo)準(zhǔn)串口設(shè)計的單電源電平轉(zhuǎn)換芯片,使用+5v單電源供電。MAX232引腳圖如圖3-11(a)硬件設(shè)置如圖3-11(b),VB顯示界面如圖3-12。司INPUTcsft丫比曲m+nvVOLIAGtWUEUROVOLTAGEWTERHLWQSomisIUCSXTXTIrl

16、DDRR_TcD二1節(jié)mm%&M口二TH二.E俁BLUECl-ChT1OUII1INR1NR1OUIT2OU1TilNR2INR2OUT頗VS.HPO.lu(a)(b)圖3-11MAX232引腳圖及其MAX3防真圖單片機(jī)溫度檢測記錄系統(tǒng)圍口設(shè)置I20*二知*«77K*.I(!)qnajiBBirain!IT上次記厚X4EWO假Sff4?JS+)'),;'一/!1!>>,電!,P,!3:!,!*!I范昆|方方1關(guān)麗口Iri*KliMtal中.送阻ri,m中si吟石設(shè)置整定拉窗附口比總.;:J22+"1Wtrion00電周二|.后插倬電I也出

17、1I>幽皿00電近二J國i*由m*fiaH8m電am1時同閉總L叼”三;:"::I2s工JEm<n電St百1foo:Daoo六J星度;曲|JizoKlj:二二!工胸8厘電后七I幅一I(00:00OOJjgd1n1ian0恭迎使用單片機(jī)逞度像,運錄系境圖3-12單片機(jī)溫度檢測記錄系統(tǒng)(vb)如圖3-11(a)與3-11(b)所示,其各引腳功能介紹如下:第一部分是電荷泵電路。由1、2、3、4、5、6腳和4只電容構(gòu)成。功能是產(chǎn)生+12v和-12v兩個電源,提供給RS-232串口電平的需要。第二部分是數(shù)據(jù)轉(zhuǎn)換通道。由7、8、9、10、11、12、13、14腳構(gòu)成兩個數(shù)據(jù)通道。其中

18、13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數(shù)據(jù)通道。8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數(shù)據(jù)通道。TTL/CMOS數(shù)據(jù)從T1IN、T2IN輸入轉(zhuǎn)換成RS-232數(shù)據(jù)從T1OUT、T2OUT送到電腦DB9插頭;DB9插頭的RS-232數(shù)據(jù)從R1IN、R2IN輸入轉(zhuǎn)換成TTL/CMOS數(shù)據(jù)后從R1OUT、R2OUT輸出。第三部分是供電。15腳GND、16腳VCC(+5v)。3.3 發(fā)揮部分的設(shè)計與實現(xiàn)發(fā)揮部分包含兩個部分。首先是年月日時分秒及其溫度報警上限功能設(shè)置,另外還有串口數(shù)據(jù)傳輸部分的實現(xiàn)。3.3.1

19、 年月日時分秒,溫度報警上限設(shè)置功能年月日時分秒及其溫度報警上限功能設(shè)置有兩種方法,包括硬件按鍵設(shè)置以及紅外遙控設(shè)置。3.3.1.1 硬件按鈕部分硬件按鈕部分設(shè)置如圖3-13所示,keyl:為功能設(shè)置進(jìn)入按鈕,key2:為功能切換按鈕如圖3-14,3-15,3-16,3-17,3-18,3-19,3-20,所示。key3:為加一功能按鍵。key4:為減一功能按鍵。在這一部分中,4個按鍵按下key1即可進(jìn)入年設(shè)置模式,通過key3與key4鍵進(jìn)行加一減一操作。設(shè)置完年份之后,再按下key2即可進(jìn)入月份設(shè)置操作,繼續(xù)按下則能相繼出現(xiàn)日,時,分,秒及溫度上限的設(shè)置操作,同理,key3與key4對數(shù)值

20、設(shè)置進(jìn)行加減。圖3-14設(shè)置年份圖3-15設(shè)置月份圖3-13硬件按鈕設(shè)置圖3-16設(shè)置日期圖3-17設(shè)置小時圖3-18設(shè)置分鐘圖3-19設(shè)置秒圖3-20設(shè)置溫度3.3.1.2 紅外遙控設(shè)置模塊人的眼睛能看到的是可見光,若按波長排列,依次(從長到短)為紅、橙、黃、綠、青、藍(lán)、紫,紅光的波長范圍為0.62科m0.7科m,比紅光波長還長的光叫紅外線。紅外線遙控器就是利用波長0.76科m1.5科m之間的近紅外線來傳送控制信號的。紅外線的特點是不干擾其他電器設(shè)備工作,也不會影響周邊環(huán)境。調(diào)試簡單,若對發(fā)射信號進(jìn)行編碼,可實現(xiàn)多路紅外遙控功能。紅外線發(fā)射和接收:紅外遙控發(fā)射器由鍵盤矩陣、遙控專用集成電路、

21、激勵器和紅外發(fā)光二極管組成。遙控專用集成電路(采用AT89S52單片機(jī))是發(fā)射系統(tǒng)的核心部分,其內(nèi)部由振蕩電路、定時電路、掃描信號發(fā)生器、鍵輸入編碼器、指令譯碼器、用戶碼轉(zhuǎn)換器、數(shù)碼調(diào)制電路及緩沖放大器等組成。它能產(chǎn)生鍵位掃描脈沖信號,并能譯出按鍵的鍵碼,再經(jīng)遙控指令編碼器得到某鍵位的遙控指令(遙控編碼脈沖),由38KHZ的載波進(jìn)行脈沖幅度調(diào)制,載有遙控指令的調(diào)制信號激勵紅外二極管發(fā)出紅外遙控信號。在紅外接收器中,采用光電轉(zhuǎn)換器(光電二極管),將接收到的紅外光指令信號轉(zhuǎn)換成相應(yīng)的電信號。由于技術(shù)原因與制作成本,紅外遙控發(fā)射器是利用現(xiàn)成的電視遙控器。接收器將接收到的紅外頻率數(shù)據(jù)傳輸?shù)絾纹瑱C(jī)中,進(jìn)

22、行處理識別紅外控制的按鍵,從而進(jìn)行時間溫度的設(shè)置。3.3.2 按鍵傳輸串口數(shù)據(jù)如下圖3-21為串口傳輸?shù)陌存I。四個按鍵分別對應(yīng)的功能如下:Key3:單次按鍵傳輸串口數(shù)據(jù),即每觸發(fā)一次傳輸一次即時的時間溫度數(shù)據(jù)。Key4:觸發(fā)一次連續(xù)傳輸即時的串口數(shù)據(jù)。Key2:停止串口數(shù)據(jù)傳輸按鈕。圖3-21按鍵傳輸串口數(shù)據(jù)功能鍵4系統(tǒng)軟件設(shè)計主函數(shù)開始先進(jìn)行LCD初始化,時鐘芯片初始化,串口初始化,之后通過時間,溫度處理函數(shù)讀取時間,溫度的數(shù)值,判斷是否有按鍵被按下,如果沒有運行時間顯示函數(shù),溫度顯示函數(shù),溫度報警函數(shù);如果按鍵被按下,則進(jìn)入功能設(shè)置函數(shù)調(diào)節(jié)時間和溫度上限??傮w程序流程圖如圖4-1所示。圖4

23、-1總體程序流程圖主程序可見附錄程序1。4.1 溫度傳感器流程圖將dhtll首先要將溫度傳感器內(nèi)存初始化,逐字讀取傳感器RAM中的的溫度數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)化為十進(jìn)制的浮點型數(shù)據(jù),返回溫度值。其流程圖如下:圖4-2溫度傳感器流程圖溫度傳感器程序見附錄程序2。4.2 時鐘芯片流程圖判斷時間顯示是否正確如果不正確外部電路可從新設(shè)置時鐘之后進(jìn)入流程(1),如果時間顯示正確,(1)讀取芯片內(nèi)部RAM中的提取年、月、日、時、分、秒數(shù)據(jù),并將年、月、日、時、分、秒值返回。圖4-3時鐘芯片流程圖時鐘芯片程序見附錄程序3。4.3 紅外控制程序流程圖初始化紅外接收管,判斷是否接收到紅外信號,無則結(jié)束,有則判斷紅外信

24、號是否為有用信號,如有有用信號則返回相應(yīng)的值。圖4-4紅外控制程序流程圖紅外控制程序見附錄程序4。4測試結(jié)果LCD顯示時間溫度正如上圖為我們所搭的實物圖,接通電源后,各個模塊均正常工作,常。6系統(tǒng)電路存在的不足和改進(jìn)的方向電路存在不足之處在于時間溫度的串口傳輸是通過有線進(jìn)行的,靈活性與局限性較大,如果主系統(tǒng)與從系統(tǒng)距離較大,便使用起來更不方便,改進(jìn)之處在于,不使用有線傳輸數(shù)據(jù),而是使用無線傳輸數(shù)據(jù),使用功率較大的無線接受發(fā)器還可以傳送百米甚至幾百米以上的距離,在軟件方面對無線設(shè)置協(xié)議便可解決因距離過大而產(chǎn)生的數(shù)據(jù)出錯。另外,可以考慮同時實現(xiàn)本地存儲與異地存儲的結(jié)合使用。困為如果要存儲在電腦上,

25、雖然美觀而且使用方便,但是其功耗及延時將會比存儲在本地上要多得多。所以,這也將是一個改進(jìn)的方向。7技能訓(xùn)練四感想經(jīng)過這次的測試技術(shù)實驗,我們小組得到了不少的收獲,一方面加深了我對課本理論的認(rèn)識,另一方面也提高了實驗操作能力。在實驗的過程中我們要培養(yǎng)自己的獨立分析問題,和解決問題的能力。在這學(xué)期的實驗中,在收獲知識的同時,還收獲了閱歷,收獲了成熟,在此過程中,我們通過查找大量資料,請教老師,以及不懈的努力,不僅培養(yǎng)了獨立思考、動手操作的能力,在各種其它能力上也都有了提高。更重要的是,在實驗課上,我們學(xué)會了很多學(xué)習(xí)的方法。還有團(tuán)結(jié)協(xié)作的精神,而這是日后最實用的,真的是受益匪淺。8附錄1)文件主函數(shù)

26、intmain(void)(u8t=0;u8temperature;u8humidity;Stm32_Clock_Init(9);TIMER_Init();uart_init(72,9600);delay_init(72);LED_Init();LCD_Init();usmart_dev.init(72);KEY_Init();POINT_COLOR=RED;/while(DHT11_Init()系統(tǒng)時鐘設(shè)置串口初始化為9600延時初始化初始化與LED連接的硬件接口初始化LCD初始化USMART按鍵初始化設(shè)置字體為紅色/DHT11初始化(LCD_ShowString(60,130,200,16

27、,16,"DHT11Error");Delay_ms(200);LCD_Fill(60,130,239,130+16,WHITE);Delay_ms(200);LCD_ShowString(60,130,200,16,16,"DHT11OK");POINT_COLOR=BLUE;/設(shè)置字體為藍(lán)色LCD_ShowString(60,150,200,16,16,"Temp:C");LCD_ShowString(121,150,200,16,16,".");LCD_ShowString(60,170,200,16,16,

28、"Humi:%");LCD_ShowString(121,170,200,16,16,".");while(1)(if(t%10=0)/每100ms讀取一次(DHT11_Read_Data(&temperature,&humidity);讀取溫濕度值LCD_ShowNum(60+45,150,temperature,2,16);顯示溫度LCD_ShowNum(60+45,170,humidity,2,16);顯示濕度Delay_ms(10);t+;if(t=20)(/t=0;LED0=!LED0;)if(t=100)(t=calendar

29、.sec;calendar.hour=13;/calendar.min=40;if(calendar.sec%60=0)(calendar.sec=0;calendar.min+;)if(calendar.min%60=0)(calendar.min=0;calendar.hour+;)LCD_ShowNum(60,10,calendar.w_year,4,16);LCD_ShowNum(100,10,calendar.w_month,2,16);LCD_ShowNum(124,10,calendar.w_date,2,16);LCD_ShowNum(60,42,calendar.hour,2

30、,16);LCD_ShowNum(84,42,calendar.min,2,16);LCD_ShowNum(108,42,calendar.sec+,2,16);)Delay_ms(10);)2)dht11溫濕感應(yīng)器函數(shù)程序/復(fù)位DHT11voidDHT11_Rst(void)(DHT11_IO_OUT();/SETOUTPUTDHT11_DQ_OUT=0;拉低DQDelay_ms(20);拉低至少18msDHT11_DQ_OUT=1;/DQ=1Delay_us(30);主機(jī)拉高2040us)/等待/返回/返回DHT11的回應(yīng)1:未檢測到DHT11的存在0:存在u8DHT11_Check(vo

31、id)(u8retry=0;DHT11_IO_IN();/SETINPUTwhile(DHT11_DQ_IN&&retry<100)/DHT11(retry+;Delay_us(1););if(retry>=100&&retry<210)return1;elseretry=0;while(!DHT11_DQ_IN&&retry<100)/DHT11(retry+;Delay_us(1););if(retry>=100)return1;return0;會拉低4080us拉低后會再次拉高40-80us)/從DHT11讀取

32、一個位/返回彳1:1/0u8DHT11_Read_Bit(void)(u8retry=0;等待變?yōu)榈碗娖降却兏唠娖絯hile(DHT11_DQ_IN&&retry<100)(retry+;Delay_us(1);)retry=0;while(!DHT11_DQ_IN&&retry<100)/(retry+;delay_us(1);)Delay_us(40);/等待40usif(DHT11_DQ_IN)return1;elsereturn0;)/從DHT11讀取一個字節(jié)/返回值:讀到的數(shù)據(jù)u8DHT11_Read_Byte(void)(u8i,dat

33、;dat=0;for(i=0;i<8;i+)(dat<<=1;dat|=DHT11_Read_Bit();returndat;/從DHT11讀取一次數(shù)據(jù)/temp:溫度值(范圍:050°)/humi:濕度值(范圍:20%90%)/返回彳1:0,正常;1,讀取失敗u8DHT11_Read_Data(u8*temp,u8*humi)(u8buf5;u8i;DHT11_Rst();if(DHT11_Check()=0)(for(i=0;i<5;i+)/讀取40位數(shù)據(jù)(bufi=DHT11_Read_Byte();if(buf0+buf1+buf2+buf3)=buf

34、4)(*humi=buf0;*temp=buf2;elsereturn1;return0;初始化DHT11的IO口DQ同時檢測DHT11的存在/返回1:不存在/返回0:存在u8DHT11_Init(void)(RCC->APB2ENR|=1<<8;使能PORTG口時鐘GPIOG->CRH&=0XFFFF0FFF;PORTG.11推挽輸出GPIOG->CRH|=0X00003000;GPIOG->ODR|=1<<11;輸出1DHT11_Rst();returnDHT11_Check();)3)延時函數(shù)staticu8fac_us=0;/us

35、延時倍乘數(shù)staticu16fac_ms=0;/ms延時倍乘數(shù),在ucos下,代表每個節(jié)拍的ms數(shù)#ifdefOS_CRITICAL_METHOD/如果OS_CRITICAL_METHOD定義了,說明使用ucosII了./systick中斷服務(wù)函數(shù),使用ucos時用到voidSysTick_Handler(void)(OSIntEnter();/進(jìn)入中斷OSTimeTick();/調(diào)用ucos的時鐘服務(wù)程序OSIntExit();/觸發(fā)任務(wù)切換軟中斷)#endif初始化延遲函數(shù)當(dāng)使用ucos的時候,此函數(shù)會初始化ucos的時鐘節(jié)拍/SYSTICK的時鐘固定為HCLK時鐘的1/8/SYSCLK:

36、系統(tǒng)時鐘voiddelay_init(u8SYSCLK)(#ifdefOS_CRITICAL_METHOD/如果OS_CRITICAL_METHOD定義了,說明使用ucosII了.u32reload;#endifSysTick->CTRL&=(1<<2);/SYSTICK使用外部時鐘源fac_us=SYSCLK/8;/不論是否使用ucos,fac_us都需要使用#ifdefOS_CRITICAL_METHOD/如果OS_CRITICAL_METHOD定義了,說明使用ucosII了.reload=SYSCLK/8;每秒鐘的計數(shù)次數(shù)單位為Kreload*=1000000/

37、OS_TICKS_PER_SEC;/根據(jù)OS_TICKS_PER_SEC設(shè)定溢出時間/reload為24位寄存器,最大值:16777216,在72M下,約合1.86s左右fac_ms=1000/OS_TICKS_PER_SEC;/代表ucos可以延時的最少單位SysTick->CTRL|=1<<1;開啟SYSTICK中斷SysTick->LOAD=reload;每1/OS_TICKS_PER_SEC秒中斷一次SysTick->CTRL|=1<<0;開啟SYSTICK#elsefac_ms=(u16)fac_us*1000;/非ucos下,代表每個ms需

38、要的systick時鐘數(shù)#endif)#ifdefOS_CRITICAL_METHOD/如果OS_CRITICAL_METHOD定義了,說明使用ucosII了./延時nus/nus為要延時的us數(shù).voiddelay_us(u32nus)(u32ticks;u32told,tnow,tcnt=0;u32reload=SysTick->LOAD;/LOAD的值ticks=nus*fac_us;需要的節(jié)拍數(shù)tcnt=0;OSSchedLock();阻止ucos調(diào)度,防止打斷us延時told=SysTick->VAL;/剛進(jìn)入時的計數(shù)器值while(1)(tnow=SysTick->

39、;VAL;if(tnow!=told)(if(tnow<told)tcnt+=told-tnow;/這里注意一下SYSTICK是一個遞減的計數(shù)器就可以了.elsetcnt+=reload-tnow+told;told=tnow;if(tcnt>=ticks)break;/時間超過/等于要延遲的時間,則退出.);OSSchedUnlock();/開啟ucos調(diào)度)/延時nms/nms:要延日的ms數(shù)voiddelay_ms(u16nms)(if(OSRunning=OS_TRUE)/如果os已經(jīng)在跑了(if(nms>=fac_ms)/延時的時間大于ucos的最少時間周期(OST

40、imeDly(nms/fac_ms);/ucos延時)nms%=fac_ms;/ucos已經(jīng)無法提供這么小的延時了,采用普通方式延時delay_us(u32)(nms*1000);普通方式延時)#else/不用ucos時/延時nus/nus為要延時的us數(shù).voiddelay_us(u32nus)u32temp;SysTick->LOAD=nus*fac_us;/時間加載SysTick->VAL=0x00;/清空計數(shù)器SysTick->CTRL=0x01;開始倒數(shù)dotemp=SysTick->CTRL;)while(temp&0x01)&&!(

41、temp&(1<<16);等待時間到達(dá)SysTick->CTRL=0x00;關(guān)閉計數(shù)器SysTick->VAL=0X00;清空計數(shù)器)/延時nms/注意nms的范圍/SysTick->LOAD為24位寄存器,所以,最大延時為:/nms<=0xffffff*8*1000/SYSCLK/SYSCLK單位為Hz,nms單位為ms對72M條件下,nms<=1864voiddelay_ms(u16nms)u32temp;SysTick->LOAD=(u32)nms*fac_ms;/時間加載(SysTick->LOAD為24bit)SysTic

42、k->VAL=0x00;清空計數(shù)器SysTick->CTRL=0x01;開始倒數(shù)dotemp=SysTick->CTRL;)while(temp&0x01)&&!(temp&(1<<16);等待時間到達(dá)SysTick->CTRL=0x00;關(guān)閉計數(shù)器SysTick->VAL=0X00;清空計數(shù)器)#endifu8cnt1=0,cnt2=0;voidTIMER_Init(void)(RCC->APB1ENR|=RCC_APB1ENR_TIM6EN|RCC_APB1ENR_TIM7EN;)voidDelay_us(u3

43、2uns)(cnt1=0;TIM6->ARR=uns;TIM6->PSC=71;/1MHz=1us;TIM6->CR1|=TIM_CR1_OPM;TIM6->DIER|=TIM_DIER_UIE;TIM6->CR1|=TIM_CR1_CEN;MY_NVIC_Init(0,1,TIM6_IRQn,0);while(!cnt1);cnt1=0;)voidDelay_ms(u16ums)(TIM7->ARR=ums*10;TIM7->PSC=7199;/10KHz=0.1ms;TIM7->CR1|=TIM_CR1_OPM;TIM7->DIER|=

44、TIM_DIER_UIE;TIM7->CR1|=TIM_CR1_CEN;MY_NVIC_Init(0,2,TIM7_IRQn,0);while(!cnt2);cnt2=0;)voidTIM6_IRQHandler(void)(TIM6->SR&=TIM_SR_UIF;cnt1=1;)voidTIM7_IRQHandler(void)(TIM7->SR&=TIM_SR_UIF;cnt2=1;4)RTC初始化函數(shù)u8RTC_Init(void)(/檢查是不是第一次配置時鐘u8temp=0;if(BKP->DR1!=0X5050)/第一次配置RCC->APB1ENR|=1<<28;RCC->APB1ENR|=1<<27;PWR->CR|=1<<8;RCC->BDCR|=1<<16;RCC->BDCR&=(1<<16);RCC->BDCR|=1<<0;使能電源時鐘使能備份時鐘/取消備份區(qū)寫保護(hù)備份區(qū)域軟復(fù)位備份區(qū)域軟復(fù)位結(jié)束開啟外部低速振蕩器while(!(RCC->BDCR&0X02)

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論