版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、單片機(jī)溫度檢測記錄系統(tǒng) 物理與電子信息學(xué)院 題目:單片機(jī)溫度檢測記錄系統(tǒng)行政班級(jí): 成員分組名單 學(xué)號(hào): 姓名: 選課班級(jí): 任課教師: 成績:目錄1 設(shè)計(jì)任務(wù)與要求21.1 設(shè)計(jì)任務(wù)21.2 技術(shù)指標(biāo)21.3 題目評(píng)析22 方案比較與論證22.1 各種方案比較與選擇23 系統(tǒng)硬件設(shè)計(jì)33.1 系統(tǒng)的總體設(shè)計(jì)3圖3-2 總體原理圖33.2 功能模塊設(shè)計(jì)及工作原理的分析43.2.1 時(shí)鐘顯示模塊43.2.2 溫度傳感器模塊53.2.3 LCD顯示數(shù)據(jù)模塊63.2.4 串口數(shù)據(jù)傳輸顯示模塊73.3 發(fā)揮部分的設(shè)計(jì)與實(shí)現(xiàn)93.3.1 年月日時(shí)分秒,溫度報(bào)警上限設(shè)置功能93.3.1.1硬件按鈕部分93
2、.3.1.2 紅外遙控設(shè)置模塊93.3.2 按鍵傳輸串口數(shù)據(jù)104 系統(tǒng)軟件設(shè)計(jì)115 測試結(jié)果146 系統(tǒng)電路存在的不足和改進(jìn)的方向157 參考文獻(xiàn)168 附錄:17241 設(shè)計(jì)任務(wù)與要求1.1 設(shè)計(jì)任務(wù)設(shè)計(jì)制作一臺(tái)可檢測和記錄溫度的系統(tǒng)。1.2 技術(shù)指標(biāo)(1) LCD顯示實(shí)時(shí)時(shí)鐘:年、月、日、時(shí)、分、秒;(2) 每30秒采樣溫度,LCD更新顯示溫度值;(3) 按鍵觸發(fā)存儲(chǔ)當(dāng)前溫度和時(shí)鐘信息(年、月、日、時(shí)、分);(4) 按鍵觸發(fā)串口傳輸存儲(chǔ)的溫度和時(shí)鐘信息;(5) 溫度測量精度:±1度。1.3 題目評(píng)析本設(shè)計(jì)題我們小組摒棄了常規(guī)做法,加入了兩項(xiàng)獨(dú)特的創(chuàng)新實(shí)現(xiàn)方法:(1) 對(duì)于數(shù)據(jù)
3、傳送儲(chǔ)存顯示方面我們不使用24C02存儲(chǔ)器,I2C存儲(chǔ)器等儲(chǔ)存器件,而是直接通過串口將數(shù)據(jù)傳輸?shù)碾娔X中通過VB界面顯示數(shù)據(jù)并將數(shù)據(jù)記錄在電腦硬盤中。(2)在設(shè)置時(shí)間日期,上限溫度上,我們不僅僅采用了硬件按鈕控制而且還加入了紅外遙控控制。 與此同時(shí),我們的溫度測量精度在理論上能達(dá)到0.0625實(shí)際運(yùn)行時(shí)也能達(dá)到0.1度,而實(shí)驗(yàn)所要求的僅為1攝氏度。另外,在DS1302芯片上加入了一個(gè)備用電源,使得主電源掉電時(shí),時(shí)鐘芯片仍然在隨著時(shí)間的移動(dòng)而實(shí)時(shí)更新。因此主電源再次上電時(shí),時(shí)鐘依然是準(zhǔn)確的,而不必重新調(diào)過。2 方案比較與論證2.1 各種方案比較與選擇2.1.1 溫度傳感器目前使用接觸式比較多,主要
4、有熱電式傳感器,把溫度變化轉(zhuǎn)換為電阻變化的叫熱電阻傳感器,把溫度變化轉(zhuǎn)換為熱電勢變換的叫熱電偶傳感器。方案1:熱電阻傳感器具有高溫系數(shù),高電阻率,物理特性穩(wěn)定,良好的線性輸出等優(yōu)點(diǎn),常用的有pt100等。方案2:熱電偶傳感器具有結(jié)構(gòu)簡單,測量范圍廣,熱慣性小,準(zhǔn)確度高,輸出信號(hào)遠(yuǎn)的優(yōu)點(diǎn),但價(jià)格較高。方案3:新型可編程溫度傳感器DS18B20,精度高,成本低,易于采集信號(hào)。利用熱電偶或熱敏電阻作為溫度傳感器,這類傳感器至儀表之間通常都要用專用的溫度補(bǔ)償導(dǎo)線,而溫度補(bǔ)償導(dǎo)線的價(jià)格很高,并且線路太長,會(huì)影響測量精度,這是直接以模擬量形式進(jìn)行采集的不可避免的問題。采用新型可編程溫度傳感器DS18B20
5、進(jìn)行溫度檢測可以避免熱電偶或熱敏電阻作為溫度傳感器所造成的測量精度誤差過大等問題,同時(shí)DS18B20只需要一個(gè)I/O口便可以進(jìn)行通信,它可以以更低的成本和更高的精確度實(shí)現(xiàn)溫度檢測。所以選擇方案3。2.1.2 時(shí)鐘顯示方案1:采用內(nèi)部時(shí)鐘計(jì)時(shí)。方案2:采用外部時(shí)鐘芯片DS1302。采用內(nèi)部時(shí)鐘計(jì)時(shí),可以節(jié)省IO引腳,降低成本,但是內(nèi)部振蕩器使用阻容震蕩,其精度不高,如果使用了串口、或者PWM等對(duì)時(shí)鐘比較敏感的功能,會(huì)對(duì)時(shí)鐘造成混亂。采用外部時(shí)鐘芯片DS1302,不僅僅能對(duì)時(shí)間進(jìn)行計(jì)時(shí)還可以對(duì)年、月、日、周進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能而且對(duì)于使用串口、或者PWM等對(duì)時(shí)鐘比較敏感的功能,不會(huì)產(chǎn)生影響。
6、如果接入外置電子電池的話在系統(tǒng)掉電的情況下還可以繼續(xù)計(jì)時(shí)。所以選擇方案2。2.1.3 時(shí)間溫度數(shù)據(jù)顯示方案1:采用數(shù)碼管顯示。方案2:采用LCD顯示器顯示。采用數(shù)碼管顯示時(shí)間溫度數(shù)據(jù)操作方便,但需要用到的數(shù)碼管數(shù)量甚多,占用I/O口較多,浪費(fèi)I/O口的利用率,且只能顯示數(shù)字。而使用LCD顯示雖然在編程上有一定程度比數(shù)碼管顯示的復(fù)雜性高,但其占用的I/O資源較少,且能顯示的內(nèi)容比數(shù)碼管豐富的多,不僅能顯示數(shù)值還能顯示英文。所以使用方案2.2.1.4 數(shù)據(jù)的串口傳送與儲(chǔ)存顯示方案1:通過串口將數(shù)據(jù)傳送到另一個(gè)單片機(jī)系統(tǒng)上顯示,采用24C02存儲(chǔ)器對(duì)數(shù)據(jù)進(jìn)行儲(chǔ)存。方案2:通過串口將數(shù)據(jù)傳送到PC機(jī)上
7、并用VB程序編寫的界面顯示,采用PC機(jī)上的“D盤”對(duì)數(shù)據(jù)進(jìn)行儲(chǔ)存。通過串口將數(shù)據(jù)從一個(gè)單片機(jī)傳送到另一個(gè)單片機(jī)上設(shè)置較為簡單,將數(shù)據(jù)存儲(chǔ)到24C02存儲(chǔ)器上,不易于對(duì)任意時(shí)間溫度數(shù)據(jù)進(jìn)行提取,而將數(shù)據(jù)傳送到PC機(jī)上并用VB界面顯示出來不僅美觀而且信息量豐富,將數(shù)據(jù)儲(chǔ)存在“D:溫度.TXT”目錄下不僅存儲(chǔ)量大,而且便于直觀查看。所以使用方案2。3 系統(tǒng)硬件設(shè)計(jì)3.1 系統(tǒng)的總體設(shè)計(jì)本系統(tǒng)以STM32F103ZET6 單片機(jī)為核心,采用溫度傳感器DS18B20進(jìn)行溫度檢測,將數(shù)字溫度信息傳輸?shù)絾纹瑱C(jī)中,在時(shí)鐘方面采用外部時(shí)鐘芯片DS1302,DS1302是一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路
8、,它可以對(duì)年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí)。單片機(jī)通過采集溫度時(shí)間信息后將溫度時(shí)間數(shù)據(jù)傳送到LCD上顯示出來,并將數(shù)據(jù)通過串口通信通過MAX232傳送到電腦中,硬件總體框圖如下:STM32F103ZET6LCD顯示外部時(shí)鐘DS1302Dth11溫濕傳感器MAX232電腦PC串口數(shù)據(jù)傳輸采集溫度圖3-1 硬件總體框圖3.2 功能模塊設(shè)計(jì)及工作原理的分析3.2.1 時(shí)鐘顯示模塊時(shí)鐘模塊采用外部時(shí)鐘DS1302進(jìn)行計(jì)時(shí),DS1302 是一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V5.5V。采用三線接口與CPU進(jìn)行同步通
9、信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級(jí)產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時(shí)提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。其管腳圖以及此模塊仿真圖如圖3-3(a)及3-3(b)所示。(a) (b)圖3-3 DS1302管腳圖與時(shí)鐘模塊仿真圖各引腳的功能為: Vcc1:備用電源;Vcc2:主電源。當(dāng)Vcc2>Vcc1+0.2V時(shí),由Vcc2向DS1302供電,當(dāng)Vcc2< Vcc1時(shí),由Vcc1向DS1302供電。 在實(shí)物中,我們將v
10、cc1與一顆3V的鈕扣電池相連,從而實(shí)現(xiàn)時(shí)鐘實(shí)時(shí)更新功能。SCLK:串行時(shí)鐘,輸入,控制數(shù)據(jù)的輸入與輸出; I/O:三線接口時(shí)的雙向數(shù)據(jù)線; CE:輸入信號(hào),在讀、寫數(shù)據(jù)期間,必須為高。該引腳有兩個(gè)功能:第一,CE開始控制字訪問移位寄存器的控制邏輯;其次,CE提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒ā?DS1302有下列幾組寄存器: DS1302有關(guān)日歷、時(shí)間的寄存器共有12個(gè),其中有7個(gè)寄存器(讀時(shí)81h8Dh,寫時(shí)80h8Ch),存放的數(shù)據(jù)格式為BCD碼形式,如下圖3-4所示。圖3-4 各寄存器詳情DS1302 的控制字如圖3-5所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不
11、能把數(shù)據(jù)寫入DS1302中,位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。 在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。圖3-5 DS1302控制字DS1302可以用于數(shù)據(jù)記錄,特別是對(duì)某些具有特殊意義的數(shù)據(jù)點(diǎn)的記錄,能實(shí)現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄。這種記錄對(duì)長時(shí)間的連續(xù)測控系統(tǒng)結(jié)果的分
12、析及對(duì)異常數(shù)據(jù)出現(xiàn)的原因的查找具有重要意義。傳統(tǒng)的數(shù)據(jù)記錄方式是隔時(shí)采樣或定時(shí)采樣,沒有具體的時(shí)間記錄,因此,只能記錄數(shù)據(jù)而無法準(zhǔn)確記錄其出現(xiàn)的時(shí)間;若采用單片機(jī)計(jì)時(shí),一方面需要采用計(jì)數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費(fèi)單片機(jī)的資源,而且,某些測控系統(tǒng)可能不允許。但是,如果在系統(tǒng)中采用時(shí)鐘芯片DS1302,則能很好地解決這個(gè)問題。3.2.2 dht11溫濕感應(yīng)器DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器,它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性和卓越的長期穩(wěn)定性。傳感器包括一個(gè)電阻式感濕元件和一個(gè)NTC測溫元件,
13、并與一個(gè)高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價(jià)比極高等優(yōu)點(diǎn)。每個(gè)DHT11傳感器都在極為精確的濕度校驗(yàn)室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式存在OTP內(nèi)存中,傳感器內(nèi)部在檢測型號(hào)的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,使其成為該類應(yīng)用中,在苛刻應(yīng)用場合的最佳選擇。產(chǎn)品為4針單排引腳封裝,連接方便。折疊技術(shù)參數(shù)供電電壓: 3.35.5V DC輸 出: 單總線數(shù)字信號(hào)測量范圍: 濕度20-90%RH, 溫度050測量精度: 濕度+-5%RH, 溫度+-2分 辨 率: 濕度1%RH, 溫度1互 換 性: 可完全
14、互換 ,長期穩(wěn)定性: <±1%RH/年3.2.3 串口數(shù)據(jù)傳輸顯示模塊串行接口Serial Interface是指數(shù)據(jù)一位位地順序傳送,其特點(diǎn)是通信線路簡單,只要一對(duì)傳輸線就可以實(shí)現(xiàn)雙向通信,并可以利用電話線,從而大大降低了成本,特別適用于遠(yuǎn)距離通信,但傳送速度較慢。 RS-232也稱標(biāo)準(zhǔn)串口,最常用的一種串行通訊接口。采取不平衡傳輸方式,即所謂單端通訊。由于其發(fā)送電平與接收電平的差僅為2V至3V左右,所以其共模抑制能力差,再加上雙絞線上的分布電容,其傳送距離最大為約15米,最高速率為20kb/s。RS-232是為點(diǎn)對(duì)點(diǎn)(即只用一對(duì)收、發(fā)設(shè)備)通訊而設(shè)計(jì)的,其驅(qū)動(dòng)器負(fù)載為37k
15、。所以RS-232適合本地設(shè)備之間的通信。這里我們通過STM32F103ZET6的串行傳輸口TXD,RXD,將溫度,時(shí)間數(shù)據(jù)通過MAX232傳輸?shù)絇C上并通過VB界面顯示時(shí)間溫度描繪溫度/時(shí)間曲線。MAX232芯片是美信公司專門為電腦的RS-232標(biāo)準(zhǔn)串口設(shè)計(jì)的單電源電平轉(zhuǎn)換芯片,使用+5v單電源供電。MAX232引腳圖如圖3-11(a)硬件設(shè)置如圖3-11(b),VB顯示界面如圖3-12。(a) (b)圖3-11 MAX232引腳圖及其MAX32仿真圖圖3-12 單片機(jī)溫度檢測記錄系統(tǒng)(vb)如圖3-11(a)與3-11(b)所示,其各引腳功能介紹如下:第一部分是電荷泵電路。由1、2、3、4
16、、5、6腳和4只電容構(gòu)成。功能是產(chǎn)生+12v和-12v兩個(gè)電源,提供給RS-232串口電平的需要。 第二部分是數(shù)據(jù)轉(zhuǎn)換通道。由7、8、9、10、11、12、13、14腳構(gòu)成兩個(gè)數(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è)計(jì)與實(shí)現(xiàn)發(fā)揮部分包含兩個(gè)部分。首先是年月日時(shí)分秒及其溫度報(bào)警上限功能設(shè)置,另外還有串口數(shù)據(jù)傳輸部分的實(shí)現(xiàn)。3.3.1 年月日時(shí)分秒,溫度報(bào)警上限設(shè)置功能年月日時(shí)分秒及其溫度報(bào)警上限功能設(shè)置有兩種方法,包括硬件按鍵設(shè)置以及紅外遙控設(shè)置。3.3.1.1 硬件按鈕部分硬件按鈕部分設(shè)置如圖3-13所示,key1:為功能設(shè)置進(jìn)入按鈕,key2:為功能切換按鈕如圖3-14,3-15,3-16,3-17,3-18,3-19,3-20,所示。key3:為加一功能按鍵。key4:為減一功能按鍵。在這一部分中,4個(gè)按鍵按下key1
18、即可進(jìn)入年設(shè)置模式,通過key3與key4鍵進(jìn)行加一減一操作。設(shè)置完年份之后,再按下key2即可進(jìn)入月份設(shè)置操作,繼續(xù)按下則能相繼出現(xiàn)日,時(shí),分,秒及溫度上限的設(shè)置操作,同理,key3與key4對(duì)數(shù)值設(shè)置進(jìn)行加減。 圖3-13 硬件按鈕設(shè)置 圖3-14 設(shè)置年份 圖3-15設(shè)置月份 圖3-16 設(shè)置日期 圖3-17 設(shè)置小時(shí) 圖3-18 設(shè)置分鐘 圖3-19 設(shè)置秒 圖3-20 設(shè)置溫度3.3.1.2 紅外遙控設(shè)置模塊人的眼睛能看到的是可見光,若按波長排列,依次(從長到短)為紅、橙、黃、綠、青、藍(lán)、紫,紅光的波長范圍為 0.62m0.7m,比紅光波長還長的光叫紅外線。紅外線遙控器就是利用波長
19、0.76m1.5m之間的近紅外線來傳送控制信號(hào)的。紅外線的特點(diǎn)是不干擾其他電器設(shè)備工作,也不會(huì)影響周邊環(huán)境。調(diào)試簡單,若對(duì)發(fā)射信號(hào)進(jìn)行編碼,可實(shí)現(xiàn)多路紅外遙控功能。紅外線發(fā)射和接收:紅外遙控發(fā)射器由鍵盤矩陣、遙控專用集成電路、激勵(lì)器和紅外發(fā)光二極管組成。遙控專用集成電路(采用AT89S52 單片機(jī))是發(fā)射系統(tǒng)的核心部分,其內(nèi)部由振蕩電路、定時(shí)電路、掃描信號(hào)發(fā)生器、鍵輸入編碼器、指令譯碼器、用戶碼轉(zhuǎn)換器、數(shù)碼調(diào)制電路及緩沖放大器等組成。它能產(chǎn)生鍵位掃描脈沖信號(hào),并能譯出按鍵的鍵碼,再經(jīng)遙控指令編碼器得到某鍵位的遙控指令(遙控編碼脈沖),由38KHZ 的載波進(jìn)行脈沖幅度調(diào)制,載有遙控指令的調(diào)制信號(hào)
20、激勵(lì)紅外二極管發(fā)出紅外遙控信號(hào)。在紅外接收器中,采用光電轉(zhuǎn)換器(光電二極管),將接收到的紅外光指令信號(hào)轉(zhuǎn)換成相應(yīng)的電信號(hào)。由于技術(shù)原因與制作成本,紅外遙控發(fā)射器是利用現(xiàn)成的電視遙控器。接收器將接收到的紅外頻率數(shù)據(jù)傳輸?shù)絾纹瑱C(jī)中,進(jìn)行處理識(shí)別紅外控制的按鍵,從而進(jìn)行時(shí)間溫度的設(shè)置。3.3.2 按鍵傳輸串口數(shù)據(jù)如下圖3-21為串口傳輸?shù)陌存I。四個(gè)按鍵分別對(duì)應(yīng)的功能如下:Key3:單次按鍵傳輸串口數(shù)據(jù),即每觸發(fā)一次傳輸一次即時(shí)的時(shí)間溫度數(shù)據(jù)。Key4:觸發(fā)一次連續(xù)傳輸即時(shí)的串口數(shù)據(jù)。Key2:停止串口數(shù)據(jù)傳輸按鈕。圖3-21 按鍵傳輸串口數(shù)據(jù)功能鍵4 系統(tǒng)軟件設(shè)計(jì)主函數(shù)開始先進(jìn)行LCD初始化,時(shí)鐘芯
21、片初始化,串口初始化,之后通過時(shí)間,溫度處理函數(shù)讀取時(shí)間,溫度的數(shù)值,判斷是否有按鍵被按下,如果沒有運(yùn)行時(shí)間顯示函數(shù),溫度顯示函數(shù),溫度報(bào)警函數(shù);如果按鍵被按下,則進(jìn)入功能設(shè)置函數(shù)調(diào)節(jié)時(shí)間和溫度上限。總體程序流程圖如圖4-1所示。開始Lcd初始化,時(shí)鐘芯片初始化,串口初始化正常顯示模式下功能設(shè)置顯示模式時(shí)間處理函數(shù),溫度轉(zhuǎn)換處理函數(shù)鍵盤掃描時(shí)間顯示函溫度顯示函溫度報(bào)警函數(shù)串口判斷傳輸函數(shù)功能設(shè)置函數(shù)圖4-1 總體程序流程圖主程序可見附錄程序1。4.1 溫度傳感器流程圖 將dht11首先要將溫度傳感器內(nèi)存初始化,逐字讀取傳感器RAM中的的溫度數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)化為十進(jìn)制的浮點(diǎn)型數(shù)據(jù),返回溫度值。其
22、流程圖如下: 開始初始化溫度傳感器讀取溫度傳感器RAM內(nèi)存中的溫度數(shù)據(jù)將溫度數(shù)據(jù)轉(zhuǎn)化為十進(jìn)制浮點(diǎn)型數(shù)據(jù)結(jié)束,返回溫度值 圖4-2溫度傳感器流程圖 溫度傳感器程序見附錄程序2。4.2 時(shí)鐘芯片流程圖開始 判斷時(shí)間顯示是否正確如果不正確外部電路可從新設(shè)置時(shí)鐘之后進(jìn)入流程(1),如果時(shí)間顯示正確,(1)讀取芯片內(nèi)部RAM中的提取年、月、日、時(shí)、分、秒數(shù)據(jù),并將年、月、日、時(shí)、分、秒值返回。時(shí)間顯示是否正常NY外部手動(dòng)進(jìn)入內(nèi)部RAM設(shè)置正確時(shí)鐘從DS1302RAM中提取年、月、日、時(shí)、分、秒數(shù)據(jù)結(jié)束,返回年、月、日、時(shí)、分、秒值圖4-3 時(shí)鐘芯片流程圖 時(shí)鐘芯片程序見附錄程序3。4.3 紅外控制程序流
23、程圖初始化紅外接收管,判斷是否接收到紅外信號(hào),無則結(jié)束,有則判斷紅外信號(hào)是否為有用信號(hào),如有有用信號(hào)則返回相應(yīng)的值。開始初始化紅外接收管是否接收到紅外信號(hào)判斷所收到的紅外信號(hào),有用信號(hào)則返回結(jié)束YN 圖4-4 紅外控制程序流程圖紅外控制程序見附錄程序4。 4 測試結(jié)果 如上圖為我們所搭的實(shí)物圖,接通電源后,各個(gè)模塊均正常工作,LCD顯示時(shí)間溫度正常。6 系統(tǒng)電路存在的不足和改進(jìn)的方向電路存在不足之處在于時(shí)間溫度的串口傳輸是通過有線進(jìn)行的,靈活性與局限性較大,如果主系統(tǒng)與從系統(tǒng)距離較大,便使用起來更不方便,改進(jìn)之處在于,不使用有線傳輸數(shù)據(jù),而是使用無線傳輸數(shù)據(jù),使用功率較大的無線接受發(fā)器還可以傳
24、送百米甚至幾百米以上的距離,在軟件方面對(duì)無線設(shè)置協(xié)議便可解決因距離過大而產(chǎn)生的數(shù)據(jù)出錯(cuò)。另外,可以考慮同時(shí)實(shí)現(xiàn)本地存儲(chǔ)與異地存儲(chǔ)的結(jié)合使用。困為如果要存儲(chǔ)在電腦上,雖然美觀而且使用方便,但是其功耗及延時(shí)將會(huì)比存儲(chǔ)在本地上要多得多。所以,這也將是一個(gè)改進(jìn)的方向。7 技能訓(xùn)練四感想經(jīng)過這次的測試技術(shù)實(shí)驗(yàn),我們小組得到了不少的收獲,一方面加深了我對(duì)課本理論的認(rèn)識(shí),另一方面也提高了實(shí)驗(yàn)操作能力。 在實(shí)驗(yàn)的過程中我們要培養(yǎng)自己的獨(dú)立分析問題,和解決問題的能力。在這學(xué)期的實(shí)驗(yàn)中,在收獲知識(shí)的同時(shí),還收獲了閱歷,收獲了成熟,在此過程中,我們通過查找大量資料,請(qǐng)教老師,以及不懈的努力,不僅培養(yǎng)了獨(dú)立
25、思考、動(dòng)手操作的能力,在各種其它能力上也都有了提高。更重要的是,在實(shí)驗(yàn)課上,我們學(xué)會(huì)了很多學(xué)習(xí)的方法。還有團(tuán)結(jié)協(xié)作的精神,而這是日后最實(shí)用的,真的是受益匪淺。8 附錄1) 文件主函數(shù)int main(void) u8 t=0; u8 temperature; u8 humidity; Stm32_Clock_Init(9);/系統(tǒng)時(shí)鐘設(shè)置TIMER_Init();uart_init(72,9600); /串口初始化為9600delay_init(72); /延時(shí)初始化 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è)置字體為藍(lán)色 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溫濕感應(yīng)器函數(shù)程序/復(fù)位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); /主機(jī)拉高2040us/等待DHT11的回應(yīng)/返回1:未檢測到DHT11的存在/返回0:存在u8 DHT11_Check(void) u8 retry=0;DHT11_IO_IN();/SET INPUT while (DHT11_DQ_IN&&retry<100)/DHT11會(huì)拉低4080usretry+;Delay_us(1);if(retry>=100&&retry<
31、210)return 1;else retry=0; while (!DHT11_DQ_IN&&retry<100)/DHT11拉低后會(huì)再次拉高4080usretry+;Delay_us(1);if(retry>=100)return 1; return 0;/從DHT11讀取一個(gè)位/返回值: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讀取一個(gè)字節(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 同時(shí)檢測DHT11的存在/返回1:不存在/返回0:存在 u8 DHT11_Init(void)RCC->APB2ENR|=1<&
34、lt;8; /使能PORTG口時(shí)鐘 GPIOG->CRH&=0XFFFF0FFF;/PORTG.11 推挽輸出GPIOG->CRH|=0X00003000;GPIOG->ODR|=1<<11; /輸出1 DHT11_Rst();return DHT11_Check();3)延時(shí)函數(shù)static u8 fac_us=0;/us延時(shí)倍乘數(shù) static u16 fac_ms=0;/ms延時(shí)倍乘數(shù),在ucos下,代表每個(gè)節(jié)拍的ms數(shù)#ifdef OS_CRITICAL_METHOD /如果OS_CRITICAL_METHOD定義了,說明使用ucosII了./sy
35、stick中斷服務(wù)函數(shù),使用ucos時(shí)用到void SysTick_Handler(void) OSIntEnter();/進(jìn)入中斷 OSTimeTick(); /調(diào)用ucos的時(shí)鐘服務(wù)程序 OSIntExit(); /觸發(fā)任務(wù)切換軟中斷#endif /初始化延遲函數(shù)/當(dāng)使用ucos的時(shí)候,此函數(shù)會(huì)初始化ucos的時(shí)鐘節(jié)拍/SYSTICK的時(shí)鐘固定為HCLK時(shí)鐘的1/8/SYSCLK:系統(tǒng)時(shí)鐘void delay_init(u8 SYSCLK)#ifdef OS_CRITICAL_METHOD /如果OS_CRITICAL_METHOD定義了,說明使用ucosII了.u32 reload;#e
36、ndif SysTick->CTRL&=(1<<2);/SYSTICK使用外部時(shí)鐘源 fac_us=SYSCLK/8;/不論是否使用ucos,fac_us都需要使用 #ifdef OS_CRITICAL_METHOD /如果OS_CRITICAL_METHOD定義了,說明使用ucosII了.reload=SYSCLK/8;/每秒鐘的計(jì)數(shù)次數(shù) 單位為K reload*=1000000/OS_TICKS_PER_SEC;/根據(jù)OS_TICKS_PER_SEC設(shè)定溢出時(shí)間/reload為24位寄存器,最大值:16777216,在72M下,約合1.86s左右fac_ms=10
37、00/OS_TICKS_PER_SEC;/代表ucos可以延時(shí)的最少單位 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下,代表每個(gè)ms需要的systick時(shí)鐘數(shù) #endif #ifdef OS_CRITICAL_METHOD /如果OS_CRITICAL_METHOD定義了,說明使用ucosII了./延時(shí)
38、nus/nus為要延時(shí)的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延時(shí)told=SysTick->VAL; /剛進(jìn)入時(shí)的計(jì)數(shù)器值while(1)tnow=SysTick->VAL;if(tnow!=told) if(tnow<told)tcnt+=told-tnow;/這里注意一下SYSTICK是一個(gè)遞減的計(jì)
39、數(shù)器就可以了.else tcnt+=reload-tnow+told; told=tnow;if(tcnt>=ticks)break;/時(shí)間超過/等于要延遲的時(shí)間,則退出. ;OSSchedUnlock();/開啟ucos調(diào)度 /延時(shí)nms/nms:要延時(shí)的ms數(shù)void delay_ms(u16 nms)if(OSRunning=OS_TRUE)/如果os已經(jīng)在跑了 if(nms>=fac_ms)/延時(shí)的時(shí)間大于ucos的最少時(shí)間周期 OSTimeDly(nms/fac_ms);/ucos延時(shí)nms%=fac_ms;/ucos已經(jīng)無法提供這么小的延時(shí)了,采用普通方式延時(shí) dela
40、y_us(u32)(nms*1000);/普通方式延時(shí) #else/不用ucos時(shí)/延時(shí)nus/nus為要延時(shí)的us數(shù). void delay_us(u32 nus)u32 temp; SysTick->LOAD=nus*fac_us; /時(shí)間加載 SysTick->VAL=0x00; /清空計(jì)數(shù)器SysTick->CTRL=0x01 ; /開始倒數(shù) dotemp=SysTick->CTRL;while(temp&0x01)&&!(temp&(1<<16);/等待時(shí)間到達(dá) SysTick->CTRL=0x00; /關(guān)閉計(jì)
41、數(shù)器SysTick->VAL =0X00; /清空計(jì)數(shù)器 /延時(shí)nms/注意nms的范圍/SysTick->LOAD為24位寄存器,所以,最大延時(shí)為:/nms<=0xffffff*8*1000/SYSCLK/SYSCLK單位為Hz,nms單位為ms/對(duì)72M條件下,nms<=1864 void delay_ms(u16 nms) u32 temp; SysTick->LOAD=(u32)nms*fac_ms;/時(shí)間加載(SysTick->LOAD為24bit)SysTick->VAL =0x00; /清空計(jì)數(shù)器SysTick->CTRL=0x01
42、 ; /開始倒數(shù) dotemp=SysTick->CTRL;while(temp&0x01)&&!(temp&(1<<16);/等待時(shí)間到達(dá) SysTick->CTRL=0x00; /關(guān)閉計(jì)數(shù)器SysTick->VAL =0X00; /清空計(jì)數(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)/檢查是不是第一次配置時(shí)鐘u8 temp=0;i
45、f(BKP->DR1!=0X5050)/第一次配置 RCC->APB1ENR|=1<<28; /使能電源時(shí)鐘 RCC->APB1ENR|=1<<27; /使能備份時(shí)鐘 PWR->CR|=1<<8; /取消備份區(qū)寫保護(hù)RCC->BDCR|=1<<16; /備份區(qū)域軟復(fù)位 RCC->BDCR&=(1<<16); /備份區(qū)域軟復(fù)位結(jié)束 RCC->BDCR|=1<<0; /開啟外部低速振蕩器 while(!(RCC->BDCR&0X02)&&temp<250)/等待外部時(shí)鐘就緒 temp+;delay_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 仿古門窗加工合同范例
- 養(yǎng)殖地出租合同范例
- 代辦天貓合同范例
- 商店轉(zhuǎn)讓車位合同范例
- 墻布購銷合同范例
- 入股聯(lián)營合同范例
- 大型貨船租賃合同范例
- 單位工程合同范例
- 土地土地租賃合同模板
- 合同模板都是里頒布
- 電力工程施工售后保障方案
- 2024年小學(xué)心理咨詢室管理制度(五篇)
- 第16講 國家出路的探索與挽救民族危亡的斗爭 課件高三統(tǒng)編版(2019)必修中外歷史綱要上一輪復(fù)習(xí)
- 機(jī)器學(xué)習(xí) 課件 第10、11章 人工神經(jīng)網(wǎng)絡(luò)、強(qiáng)化學(xué)習(xí)
- 北京市人民大學(xué)附屬中學(xué)2025屆高二生物第一學(xué)期期末學(xué)業(yè)水平測試試題含解析
- 書籍小兵張嘎課件
- 氫氣中鹵化物、甲酸的測定 離子色譜法-編制說明
- 2024秋期國家開放大學(xué)??啤稒C(jī)械制圖》一平臺(tái)在線形考(形成性任務(wù)四)試題及答案
- 2024年黑龍江哈爾濱市通河縣所屬事業(yè)單位招聘74人(第二批)易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 私募基金管理人-廉潔從業(yè)管理準(zhǔn)則
- 房地產(chǎn)估價(jià)機(jī)構(gòu)內(nèi)部管理制度
評(píng)論
0/150
提交評(píng)論