![單片機溫度檢測記錄系統(tǒng)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/26/7f329122-afdd-4dd3-9e89-f0c88608dfd6/7f329122-afdd-4dd3-9e89-f0c88608dfd61.gif)
![單片機溫度檢測記錄系統(tǒng)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/26/7f329122-afdd-4dd3-9e89-f0c88608dfd6/7f329122-afdd-4dd3-9e89-f0c88608dfd62.gif)
![單片機溫度檢測記錄系統(tǒng)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/26/7f329122-afdd-4dd3-9e89-f0c88608dfd6/7f329122-afdd-4dd3-9e89-f0c88608dfd63.gif)
![單片機溫度檢測記錄系統(tǒng)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/26/7f329122-afdd-4dd3-9e89-f0c88608dfd6/7f329122-afdd-4dd3-9e89-f0c88608dfd64.gif)
![單片機溫度檢測記錄系統(tǒng)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/26/7f329122-afdd-4dd3-9e89-f0c88608dfd6/7f329122-afdd-4dd3-9e89-f0c88608dfd65.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、單片機溫度檢測記錄系統(tǒng) 物理與電子信息學院 題目:單片機溫度檢測記錄系統(tǒng)行政班級: 成員分組名單 學號: 姓名: 選課班級: 任課教師: 成績:目錄1 設(shè)計任務(wù)與要求21.1 設(shè)計任務(wù)21.2 技術(shù)指標21.3 題目評析22 方案比較與論證22.1 各種方案比較與選擇23 系統(tǒng)硬件設(shè)計33.1 系統(tǒng)的總體設(shè)計3圖3-2 總體原理圖33.2 功能模塊設(shè)計及工作原理的分析43.2.1 時鐘顯示模塊43.2.2 溫度傳感器模塊53.2.3 LCD顯示數(shù)據(jù)模塊63.2.4 串口數(shù)據(jù)傳輸顯示模塊73.3 發(fā)揮部分的設(shè)計與實現(xiàn)93.3.1 年月日時分秒,溫度報警上限設(shè)置功能93.3.1.1硬件按鈕部分93
2、.3.1.2 紅外遙控設(shè)置模塊93.3.2 按鍵傳輸串口數(shù)據(jù)104 系統(tǒng)軟件設(shè)計115 測試結(jié)果146 系統(tǒng)電路存在的不足和改進的方向157 參考文獻168 附錄:17241 設(shè)計任務(wù)與要求1.1 設(shè)計任務(wù)設(shè)計制作一臺可檢測和記錄溫度的系統(tǒng)。1.2 技術(shù)指標(1) LCD顯示實時時鐘:年、月、日、時、分、秒;(2) 每30秒采樣溫度,LCD更新顯示溫度值;(3) 按鍵觸發(fā)存儲當前溫度和時鐘信息(年、月、日、時、分);(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è)置時間日期,上限溫度上,我們不僅僅采用了硬件按鈕控制而且還加入了紅外遙控控制。 與此同時,我們的溫度測量精度在理論上能達到0.0625實際運行時也能達到0.1度,而實驗所要求的僅為1攝氏度。另外,在DS1302芯片上加入了一個備用電源,使得主電源掉電時,時鐘芯片仍然在隨著時間的移動而實時更新。因此主電源再次上電時,時鐘依然是準確的,而不必重新調(diào)過。2 方案比較與論證2.1 各種方案比較與選擇2.1.1 溫度傳感器目前使用接觸式比較多,主要
4、有熱電式傳感器,把溫度變化轉(zhuǎn)換為電阻變化的叫熱電阻傳感器,把溫度變化轉(zhuǎn)換為熱電勢變換的叫熱電偶傳感器。方案1:熱電阻傳感器具有高溫系數(shù),高電阻率,物理特性穩(wěn)定,良好的線性輸出等優(yōu)點,常用的有pt100等。方案2:熱電偶傳感器具有結(jié)構(gòu)簡單,測量范圍廣,熱慣性小,準確度高,輸出信號遠的優(yōu)點,但價格較高。方案3:新型可編程溫度傳感器DS18B20,精度高,成本低,易于采集信號。利用熱電偶或熱敏電阻作為溫度傳感器,這類傳感器至儀表之間通常都要用專用的溫度補償導線,而溫度補償導線的價格很高,并且線路太長,會影響測量精度,這是直接以模擬量形式進行采集的不可避免的問題。采用新型可編程溫度傳感器DS18B20
5、進行溫度檢測可以避免熱電偶或熱敏電阻作為溫度傳感器所造成的測量精度誤差過大等問題,同時DS18B20只需要一個I/O口便可以進行通信,它可以以更低的成本和更高的精確度實現(xiàn)溫度檢測。所以選擇方案3。2.1.2 時鐘顯示方案1:采用內(nèi)部時鐘計時。方案2:采用外部時鐘芯片DS1302。采用內(nèi)部時鐘計時,可以節(jié)省IO引腳,降低成本,但是內(nèi)部振蕩器使用阻容震蕩,其精度不高,如果使用了串口、或者PWM等對時鐘比較敏感的功能,會對時鐘造成混亂。采用外部時鐘芯片DS1302,不僅僅能對時間進行計時還可以對年、月、日、周進行計時,具有閏年補償功能而且對于使用串口、或者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ù)碼管顯示的復雜性高,但其占用的I/O資源較少,且能顯示的內(nèi)容比數(shù)碼管豐富的多,不僅能顯示數(shù)值還能顯示英文。所以使用方案2.2.1.4 數(shù)據(jù)的串口傳送與儲存顯示方案1:通過串口將數(shù)據(jù)傳送到另一個單片機系統(tǒng)上顯示,采用24C02存儲器對數(shù)據(jù)進行儲存。方案2:通過串口將數(shù)據(jù)傳送到PC機上
7、并用VB程序編寫的界面顯示,采用PC機上的“D盤”對數(shù)據(jù)進行儲存。通過串口將數(shù)據(jù)從一個單片機傳送到另一個單片機上設(shè)置較為簡單,將數(shù)據(jù)存儲到24C02存儲器上,不易于對任意時間溫度數(shù)據(jù)進行提取,而將數(shù)據(jù)傳送到PC機上并用VB界面顯示出來不僅美觀而且信息量豐富,將數(shù)據(jù)儲存在“D:溫度.TXT”目錄下不僅存儲量大,而且便于直觀查看。所以使用方案2。3 系統(tǒng)硬件設(shè)計3.1 系統(tǒng)的總體設(shè)計本系統(tǒng)以STM32F103ZET6 單片機為核心,采用溫度傳感器DS18B20進行溫度檢測,將數(shù)字溫度信息傳輸?shù)絾纹瑱C中,在時鐘方面采用外部時鐘芯片DS1302,DS1302是一種高性能、低功耗、帶RAM的實時時鐘電路
8、,它可以對年、月、日、周、時、分、秒進行計時。單片機通過采集溫度時間信息后將溫度時間數(shù)據(jù)傳送到LCD上顯示出來,并將數(shù)據(jù)通過串口通信通過MAX232傳送到電腦中,硬件總體框圖如下:STM32F103ZET6LCD顯示外部時鐘DS1302Dth11溫濕傳感器MAX232電腦PC串口數(shù)據(jù)傳輸采集溫度圖3-1 硬件總體框圖3.2 功能模塊設(shè)計及工作原理的分析3.2.1 時鐘顯示模塊時鐘模塊采用外部時鐘DS1302進行計時,DS1302 是一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V5.5V。采用三線接口與CPU進行同步通
9、信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進行涓細電流充電的能力。其管腳圖以及此模塊仿真圖如圖3-3(a)及3-3(b)所示。(a) (b)圖3-3 DS1302管腳圖與時鐘模塊仿真圖各引腳的功能為: Vcc1:備用電源;Vcc2:主電源。當Vcc2>Vcc1+0.2V時,由Vcc2向DS1302供電,當Vcc2< Vcc1時,由Vcc1向DS1302供電。 在實物中,我們將v
10、cc1與一顆3V的鈕扣電池相連,從而實現(xiàn)時鐘實時更新功能。SCLK:串行時鐘,輸入,控制數(shù)據(jù)的輸入與輸出; I/O:三線接口時的雙向數(shù)據(jù)線; CE:輸入信號,在讀、寫數(shù)據(jù)期間,必須為高。該引腳有兩個功能:第一,CE開始控制字訪問移位寄存器的控制邏輯;其次,CE提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒ā?DS1302有下列幾組寄存器: DS1302有關(guān)日歷、時間的寄存器共有12個,其中有7個寄存器(讀時81h8Dh,寫時80h8Ch),存放的數(shù)據(jù)格式為BCD碼形式,如下圖3-4所示。圖3-4 各寄存器詳情DS1302 的控制字如圖3-5所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不
11、能把數(shù)據(jù)寫入DS1302中,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進行寫操作,為1表示進行讀操作,控制字節(jié)總是從最低位開始輸出。 在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。圖3-5 DS1302控制字DS1302可以用于數(shù)據(jù)記錄,特別是對某些具有特殊意義的數(shù)據(jù)點的記錄,能實現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時間同時記錄。這種記錄對長時間的連續(xù)測控系統(tǒng)結(jié)果的分
12、析及對異常數(shù)據(jù)出現(xiàn)的原因的查找具有重要意義。傳統(tǒng)的數(shù)據(jù)記錄方式是隔時采樣或定時采樣,沒有具體的時間記錄,因此,只能記錄數(shù)據(jù)而無法準確記錄其出現(xiàn)的時間;若采用單片機計時,一方面需要采用計數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費單片機的資源,而且,某些測控系統(tǒng)可能不允許。但是,如果在系統(tǒng)中采用時鐘芯片DS1302,則能很好地解決這個問題。3.2.2 dht11溫濕感應器DHT11數(shù)字溫濕度傳感器是一款含有已校準數(shù)字信號輸出的溫濕度復合傳感器,它應用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性和卓越的長期穩(wěn)定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,
13、并與一個高性能8位單片機相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應、抗干擾能力強、性價比極高等優(yōu)點。每個DHT11傳感器都在極為精確的濕度校驗室中進行校準。校準系數(shù)以程序的形式存在OTP內(nèi)存中,傳感器內(nèi)部在檢測型號的處理過程中要調(diào)用這些校準系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,使其成為該類應用中,在苛刻應用場合的最佳選擇。產(chǎn)品為4針單排引腳封裝,連接方便。折疊技術(shù)參數(shù)供電電壓: 3.35.5V DC輸 出: 單總線數(shù)字信號測量范圍: 濕度20-90%RH, 溫度050測量精度: 濕度+-5%RH, 溫度+-2分 辨 率: 濕度1%RH, 溫度1互 換 性: 可完全
14、互換 ,長期穩(wěn)定性: <±1%RH/年3.2.3 串口數(shù)據(jù)傳輸顯示模塊串行接口Serial Interface是指數(shù)據(jù)一位位地順序傳送,其特點是通信線路簡單,只要一對傳輸線就可以實現(xiàn)雙向通信,并可以利用電話線,從而大大降低了成本,特別適用于遠距離通信,但傳送速度較慢。 RS-232也稱標準串口,最常用的一種串行通訊接口。采取不平衡傳輸方式,即所謂單端通訊。由于其發(fā)送電平與接收電平的差僅為2V至3V左右,所以其共模抑制能力差,再加上雙絞線上的分布電容,其傳送距離最大為約15米,最高速率為20kb/s。RS-232是為點對點(即只用一對收、發(fā)設(shè)備)通訊而設(shè)計的,其驅(qū)動器負載為37k
15、。所以RS-232適合本地設(shè)備之間的通信。這里我們通過STM32F103ZET6的串行傳輸口TXD,RXD,將溫度,時間數(shù)據(jù)通過MAX232傳輸?shù)絇C上并通過VB界面顯示時間溫度描繪溫度/時間曲線。MAX232芯片是美信公司專門為電腦的RS-232標準串口設(shè)計的單電源電平轉(zhuǎn)換芯片,使用+5v單電源供電。MAX232引腳圖如圖3-11(a)硬件設(shè)置如圖3-11(b),VB顯示界面如圖3-12。(a) (b)圖3-11 MAX232引腳圖及其MAX32仿真圖圖3-12 單片機溫度檢測記錄系統(tǒng)(vb)如圖3-11(a)與3-11(b)所示,其各引腳功能介紹如下:第一部分是電荷泵電路。由1、2、3、4
16、、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ù)通道。 其中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
17、輸出。 第三部分是供電。15腳GND、16腳VCC(+5v)。 3.3 發(fā)揮部分的設(shè)計與實現(xiàn)發(fā)揮部分包含兩個部分。首先是年月日時分秒及其溫度報警上限功能設(shè)置,另外還有串口數(shù)據(jù)傳輸部分的實現(xiàn)。3.3.1 年月日時分秒,溫度報警上限設(shè)置功能年月日時分秒及其溫度報警上限功能設(shè)置有兩種方法,包括硬件按鍵設(shè)置以及紅外遙控設(shè)置。3.3.1.1 硬件按鈕部分硬件按鈕部分設(shè)置如圖3-13所示,key1:為功能設(shè)置進入按鈕,key2:為功能切換按鈕如圖3-14,3-15,3-16,3-17,3-18,3-19,3-20,所示。key3:為加一功能按鍵。key4:為減一功能按鍵。在這一部分中,4個按鍵按下key1
18、即可進入年設(shè)置模式,通過key3與key4鍵進行加一減一操作。設(shè)置完年份之后,再按下key2即可進入月份設(shè)置操作,繼續(xù)按下則能相繼出現(xiàn)日,時,分,秒及溫度上限的設(shè)置操作,同理,key3與key4對數(shù)值設(shè)置進行加減。 圖3-13 硬件按鈕設(shè)置 圖3-14 設(shè)置年份 圖3-15設(shè)置月份 圖3-16 設(shè)置日期 圖3-17 設(shè)置小時 圖3-18 設(shè)置分鐘 圖3-19 設(shè)置秒 圖3-20 設(shè)置溫度3.3.1.2 紅外遙控設(shè)置模塊人的眼睛能看到的是可見光,若按波長排列,依次(從長到短)為紅、橙、黃、綠、青、藍、紫,紅光的波長范圍為 0.62m0.7m,比紅光波長還長的光叫紅外線。紅外線遙控器就是利用波長
19、0.76m1.5m之間的近紅外線來傳送控制信號的。紅外線的特點是不干擾其他電器設(shè)備工作,也不會影響周邊環(huán)境。調(diào)試簡單,若對發(fā)射信號進行編碼,可實現(xiàn)多路紅外遙控功能。紅外線發(fā)射和接收:紅外遙控發(fā)射器由鍵盤矩陣、遙控專用集成電路、激勵器和紅外發(fā)光二極管組成。遙控專用集成電路(采用AT89S52 單片機)是發(fā)射系統(tǒng)的核心部分,其內(nèi)部由振蕩電路、定時電路、掃描信號發(fā)生器、鍵輸入編碼器、指令譯碼器、用戶碼轉(zhuǎn)換器、數(shù)碼調(diào)制電路及緩沖放大器等組成。它能產(chǎn)生鍵位掃描脈沖信號,并能譯出按鍵的鍵碼,再經(jīng)遙控指令編碼器得到某鍵位的遙控指令(遙控編碼脈沖),由38KHZ 的載波進行脈沖幅度調(diào)制,載有遙控指令的調(diào)制信號
20、激勵紅外二極管發(fā)出紅外遙控信號。在紅外接收器中,采用光電轉(zhuǎn)換器(光電二極管),將接收到的紅外光指令信號轉(zhuǎn)換成相應的電信號。由于技術(shù)原因與制作成本,紅外遙控發(fā)射器是利用現(xiàn)成的電視遙控器。接收器將接收到的紅外頻率數(shù)據(jù)傳輸?shù)絾纹瑱C中,進行處理識別紅外控制的按鍵,從而進行時間溫度的設(shè)置。3.3.2 按鍵傳輸串口數(shù)據(jù)如下圖3-21為串口傳輸?shù)陌存I。四個按鍵分別對應的功能如下:Key3:單次按鍵傳輸串口數(shù)據(jù),即每觸發(fā)一次傳輸一次即時的時間溫度數(shù)據(jù)。Key4:觸發(fā)一次連續(xù)傳輸即時的串口數(shù)據(jù)。Key2:停止串口數(shù)據(jù)傳輸按鈕。圖3-21 按鍵傳輸串口數(shù)據(jù)功能鍵4 系統(tǒng)軟件設(shè)計主函數(shù)開始先進行LCD初始化,時鐘芯
21、片初始化,串口初始化,之后通過時間,溫度處理函數(shù)讀取時間,溫度的數(shù)值,判斷是否有按鍵被按下,如果沒有運行時間顯示函數(shù),溫度顯示函數(shù),溫度報警函數(shù);如果按鍵被按下,則進入功能設(shè)置函數(shù)調(diào)節(jié)時間和溫度上限??傮w程序流程圖如圖4-1所示。開始Lcd初始化,時鐘芯片初始化,串口初始化正常顯示模式下功能設(shè)置顯示模式時間處理函數(shù),溫度轉(zhuǎn)換處理函數(shù)鍵盤掃描時間顯示函溫度顯示函溫度報警函數(shù)串口判斷傳輸函數(shù)功能設(shè)置函數(shù)圖4-1 總體程序流程圖主程序可見附錄程序1。4.1 溫度傳感器流程圖 將dht11首先要將溫度傳感器內(nèi)存初始化,逐字讀取傳感器RAM中的的溫度數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)化為十進制的浮點型數(shù)據(jù),返回溫度值。其
22、流程圖如下: 開始初始化溫度傳感器讀取溫度傳感器RAM內(nèi)存中的溫度數(shù)據(jù)將溫度數(shù)據(jù)轉(zhuǎn)化為十進制浮點型數(shù)據(jù)結(jié)束,返回溫度值 圖4-2溫度傳感器流程圖 溫度傳感器程序見附錄程序2。4.2 時鐘芯片流程圖開始 判斷時間顯示是否正確如果不正確外部電路可從新設(shè)置時鐘之后進入流程(1),如果時間顯示正確,(1)讀取芯片內(nèi)部RAM中的提取年、月、日、時、分、秒數(shù)據(jù),并將年、月、日、時、分、秒值返回。時間顯示是否正常NY外部手動進入內(nèi)部RAM設(shè)置正確時鐘從DS1302RAM中提取年、月、日、時、分、秒數(shù)據(jù)結(jié)束,返回年、月、日、時、分、秒值圖4-3 時鐘芯片流程圖 時鐘芯片程序見附錄程序3。4.3 紅外控制程序流
23、程圖初始化紅外接收管,判斷是否接收到紅外信號,無則結(jié)束,有則判斷紅外信號是否為有用信號,如有有用信號則返回相應的值。開始初始化紅外接收管是否接收到紅外信號判斷所收到的紅外信號,有用信號則返回結(jié)束YN 圖4-4 紅外控制程序流程圖紅外控制程序見附錄程序4。 4 測試結(jié)果 如上圖為我們所搭的實物圖,接通電源后,各個模塊均正常工作,LCD顯示時間溫度正常。6 系統(tǒng)電路存在的不足和改進的方向電路存在不足之處在于時間溫度的串口傳輸是通過有線進行的,靈活性與局限性較大,如果主系統(tǒng)與從系統(tǒng)距離較大,便使用起來更不方便,改進之處在于,不使用有線傳輸數(shù)據(jù),而是使用無線傳輸數(shù)據(jù),使用功率較大的無線接受發(fā)器還可以傳
24、送百米甚至幾百米以上的距離,在軟件方面對無線設(shè)置協(xié)議便可解決因距離過大而產(chǎn)生的數(shù)據(jù)出錯。另外,可以考慮同時實現(xiàn)本地存儲與異地存儲的結(jié)合使用。困為如果要存儲在電腦上,雖然美觀而且使用方便,但是其功耗及延時將會比存儲在本地上要多得多。所以,這也將是一個改進的方向。7 技能訓練四感想經(jīng)過這次的測試技術(shù)實驗,我們小組得到了不少的收獲,一方面加深了我對課本理論的認識,另一方面也提高了實驗操作能力。 在實驗的過程中我們要培養(yǎng)自己的獨立分析問題,和解決問題的能力。在這學期的實驗中,在收獲知識的同時,還收獲了閱歷,收獲了成熟,在此過程中,我們通過查找大量資料,請教老師,以及不懈的努力,不僅培養(yǎng)了獨立
25、思考、動手操作的能力,在各種其它能力上也都有了提高。更重要的是,在實驗課上,我們學會了很多學習的方法。還有團結(jié)協(xié)作的精神,而這是日后最實用的,真的是受益匪淺。8 附錄1) 文件主函數(shù)int main(void) u8 t=0; u8 temperature; u8 humidity; Stm32_Clock_Init(9);/系統(tǒng)時鐘設(shè)置TIMER_Init();uart_init(72,9600); /串口初始化為9600delay_init(72); /延時初始化 LED_Init(); /初始化與LED連接的硬件接口LCD_Init(); /初始化LCDusmart_dev.init(7
26、2);/初始化USMARTKEY_Init();/按鍵初始化POINT_COLOR=RED;/設(shè)置字體為紅色 while(DHT11_Init()/DHT11初始化LCD_ShowString(60,130,200,16,16,"DHT11 Error");Delay_ms(200);LCD_Fill(60,130,239,130+16,WHITE); Delay_ms(200); LCD_ShowString(60,130,200,16,16,"DHT11 OK");POINT_COLOR=BLUE;/設(shè)置字體為藍色 LCD_ShowString(60
27、,150,200,16,16,"Temp: C"); LCD_ShowString(121,150,200,16,16,"."); LCD_ShowString(60,170,200,16,16,"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,te
28、mperature,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.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,calenda
29、r.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,16); LCD_ShowNum(84,42,calendar.min,2,16); LCD_ShowNum(108,42,calendar.sec+,2,16); Delay_ms(10); 2)dht11溫濕感應器函數(shù)程序/復位DHT11void DHT11_Rst(void) DHT11_IO_OUT(); /SET OU
30、TPUT DHT11_DQ_OUT=0; /拉低DQ Delay_ms(20); /拉低至少18ms DHT11_DQ_OUT=1; /DQ=1 Delay_us(30); /主機拉高2040us/等待DHT11的回應/返回1:未檢測到DHT11的存在/返回0:存在u8 DHT11_Check(void) u8 retry=0;DHT11_IO_IN();/SET INPUT while (DHT11_DQ_IN&&retry<100)/DHT11會拉低4080usretry+;Delay_us(1);if(retry>=100&&retry<
31、210)return 1;else retry=0; while (!DHT11_DQ_IN&&retry<100)/DHT11拉低后會再次拉高4080usretry+;Delay_us(1);if(retry>=100)return 1; return 0;/從DHT11讀取一個位/返回值:1/0u8 DHT11_Read_Bit(void) u8 retry=0;while(DHT11_DQ_IN&&retry<100)/等待變?yōu)榈碗娖絩etry+;Delay_us(1);retry=0;while(!DHT11_DQ_IN&&am
32、p;retry<100)/等待變高電平retry+;delay_us(1);Delay_us(40);/等待40usif(DHT11_DQ_IN)return 1;else return 0; /從DHT11讀取一個字節(jié)/返回值:讀到的數(shù)據(jù)u8 DHT11_Read_Byte(void) u8 i,dat; dat=0;for (i=0;i<8;i+) dat<<=1; dat|=DHT11_Read_Bit(); return dat;/從DHT11讀取一次數(shù)據(jù)/temp:溫度值(范圍:050°)/humi:濕度值(范圍:20%90%)/返回值:0,正常;1
33、,讀取失敗u8 DHT11_Read_Data(u8 *temp,u8 *humi) u8 buf5;u8 i;DHT11_Rst();if(DHT11_Check()=0)for(i=0;i<5;i+)/讀取40位數(shù)據(jù)bufi=DHT11_Read_Byte();if(buf0+buf1+buf2+buf3)=buf4)*humi=buf0; *temp=buf2; else return 1;return 0; /初始化DHT11的IO口 DQ 同時檢測DHT11的存在/返回1:不存在/返回0:存在 u8 DHT11_Init(void)RCC->APB2ENR|=1<&
34、lt;8; /使能PORTG口時鐘 GPIOG->CRH&=0XFFFF0FFF;/PORTG.11 推挽輸出GPIOG->CRH|=0X00003000;GPIOG->ODR|=1<<11; /輸出1 DHT11_Rst();return DHT11_Check();3)延時函數(shù)static u8 fac_us=0;/us延時倍乘數(shù) static u16 fac_ms=0;/ms延時倍乘數(shù),在ucos下,代表每個節(jié)拍的ms數(shù)#ifdef OS_CRITICAL_METHOD /如果OS_CRITICAL_METHOD定義了,說明使用ucosII了./sy
35、stick中斷服務(wù)函數(shù),使用ucos時用到void SysTick_Handler(void) OSIntEnter();/進入中斷 OSTimeTick(); /調(diào)用ucos的時鐘服務(wù)程序 OSIntExit(); /觸發(fā)任務(wù)切換軟中斷#endif /初始化延遲函數(shù)/當使用ucos的時候,此函數(shù)會初始化ucos的時鐘節(jié)拍/SYSTICK的時鐘固定為HCLK時鐘的1/8/SYSCLK:系統(tǒng)時鐘void delay_init(u8 SYSCLK)#ifdef OS_CRITICAL_METHOD /如果OS_CRITICAL_METHOD定義了,說明使用ucosII了.u32 reload;#e
36、ndif SysTick->CTRL&=(1<<2);/SYSTICK使用外部時鐘源 fac_us=SYSCLK/8;/不論是否使用ucos,fac_us都需要使用 #ifdef OS_CRITICAL_METHOD /如果OS_CRITICAL_METHOD定義了,說明使用ucosII了.reload=SYSCLK/8;/每秒鐘的計數(shù)次數(shù) 單位為K reload*=1000000/OS_TICKS_PER_SEC;/根據(jù)OS_TICKS_PER_SEC設(shè)定溢出時間/reload為24位寄存器,最大值:16777216,在72M下,約合1.86s左右fac_ms=10
37、00/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需要的systick時鐘數(shù) #endif #ifdef OS_CRITICAL_METHOD /如果OS_CRITICAL_METHOD定義了,說明使用ucosII了./延時
38、nus/nus為要延時的us數(shù). void delay_us(u32 nus)u32 ticks;u32 told,tnow,tcnt=0;u32 reload=SysTick->LOAD;/LOAD的值 ticks=nus*fac_us; /需要的節(jié)拍數(shù) tcnt=0;OSSchedLock();/阻止ucos調(diào)度,防止打斷us延時told=SysTick->VAL; /剛進入時的計數(shù)器值while(1)tnow=SysTick->VAL;if(tnow!=told) if(tnow<told)tcnt+=told-tnow;/這里注意一下SYSTICK是一個遞減的計
39、數(shù)器就可以了.else tcnt+=reload-tnow+told; told=tnow;if(tcnt>=ticks)break;/時間超過/等于要延遲的時間,則退出. ;OSSchedUnlock();/開啟ucos調(diào)度 /延時nms/nms:要延時的ms數(shù)void delay_ms(u16 nms)if(OSRunning=OS_TRUE)/如果os已經(jīng)在跑了 if(nms>=fac_ms)/延時的時間大于ucos的最少時間周期 OSTimeDly(nms/fac_ms);/ucos延時nms%=fac_ms;/ucos已經(jīng)無法提供這么小的延時了,采用普通方式延時 dela
40、y_us(u32)(nms*1000);/普通方式延時 #else/不用ucos時/延時nus/nus為要延時的us數(shù). void delay_us(u32 nus)u32 temp; SysTick->LOAD=nus*fac_us; /時間加載 SysTick->VAL=0x00; /清空計數(shù)器SysTick->CTRL=0x01 ; /開始倒數(shù) dotemp=SysTick->CTRL;while(temp&0x01)&&!(temp&(1<<16);/等待時間到達 SysTick->CTRL=0x00; /關(guān)閉計
41、數(shù)器SysTick->VAL =0X00; /清空計數(shù)器 /延時nms/注意nms的范圍/SysTick->LOAD為24位寄存器,所以,最大延時為:/nms<=0xffffff*8*1000/SYSCLK/SYSCLK單位為Hz,nms單位為ms/對72M條件下,nms<=1864 void delay_ms(u16 nms) u32 temp; SysTick->LOAD=(u32)nms*fac_ms;/時間加載(SysTick->LOAD為24bit)SysTick->VAL =0x00; /清空計數(shù)器SysTick->CTRL=0x01
42、 ; /開始倒數(shù) dotemp=SysTick->CTRL;while(temp&0x01)&&!(temp&(1<<16);/等待時間到達 SysTick->CTRL=0x00; /關(guān)閉計數(shù)器SysTick->VAL =0X00; /清空計數(shù)器 #endif u8 cnt1=0, cnt2=0;void TIMER_Init(void) RCC->APB1ENR |= RCC_APB1ENR_TIM6EN | RCC_APB1ENR_TIM7EN;void Delay_us(u32 uns) cnt1 = 0; TIM6-&
43、gt;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;void Delay_ms(u16 ums) TIM7->ARR = ums*10; TIM7->PSC = 7199; /10KHz=0.1ms; TIM7->CR1 |= TIM_CR1_OPM; TI
44、M7->DIER |= TIM_DIER_UIE; TIM7->CR1 |= TIM_CR1_CEN; MY_NVIC_Init(0,2,TIM7_IRQn,0); while (!cnt2); cnt2 = 0;void TIM6_IRQHandler(void) TIM6->SR &= TIM_SR_UIF; cnt1 = 1; void TIM7_IRQHandler(void) TIM7->SR &= TIM_SR_UIF; cnt2 = 1; 4)RTC初始化函數(shù)u8 RTC_Init(void)/檢查是不是第一次配置時鐘u8 temp=0;i
45、f(BKP->DR1!=0X5050)/第一次配置 RCC->APB1ENR|=1<<28; /使能電源時鐘 RCC->APB1ENR|=1<<27; /使能備份時鐘 PWR->CR|=1<<8; /取消備份區(qū)寫保護RCC->BDCR|=1<<16; /備份區(qū)域軟復位 RCC->BDCR&=(1<<16); /備份區(qū)域軟復位結(jié)束 RCC->BDCR|=1<<0; /開啟外部低速振蕩器 while(!(RCC->BDCR&0X02)&&temp<250)/等待外部時鐘就緒 temp+;delay_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙教版數(shù)學七年級下冊2.1《二元一次方程》(第2課時)聽評課記錄
- 五年級分數(shù)乘法口算練習
- 湘教版數(shù)學七年級下冊2.1.2《冪的乘方與積的乘方》聽評課記錄1
- 蘇教版小學四年級上冊數(shù)學口算題
- 人教版數(shù)學九年級下冊27.3《位似》聽評課記錄(一)
- 營業(yè)場所租賃合同范本
- 核心員工高層管理人員各崗位保密協(xié)議書范本
- 辦公樓加固改造工程施工合同范本
- 合作開店合同范本
- 三人合伙合作協(xié)議書范本
- 期末 (試題) -2024-2025學年教科版(廣州)英語四年級上冊
- 解讀國有企業(yè)管理人員處分條例課件
- 湖南省長沙市一中2024-2025學年高一生物上學期期末考試試題含解析
- 碳纖維增強復合材料在海洋工程中的應用情況
- 小孩使用手機協(xié)議書范本
- 公司市場分析管理制度
- 焊接材料制造工-國家職業(yè)標準(2024版)
- 江西省2024年中考數(shù)學試卷(含答案)
- 榆神礦區(qū)郭家灘煤礦(700 萬噸-年)項目環(huán)評
- 2024年200MW-400MWh電化學儲能電站設(shè)計方案
- 余土外運施工方案
評論
0/150
提交評論