在日常生活中,需要檢測(cè)人員的體溫,而且這個(gè)溫度范圍很小。該系統(tǒng)采集主要以Atmel公司的AT89C51單片機(jī)為控制處理核心,由它完成對(duì)數(shù)據(jù)的采集處理以及控制數(shù)據(jù)在LCD顯示屏上的顯示。AT89C51單片機(jī)是一種低功耗/低電壓/高性能的8位單片機(jī),片內(nèi)帶有一個(gè)8KB的可編程/可擦除/只讀存儲(chǔ)器。
在本文中,主要說(shuō)明單片機(jī)與K型熱電偶以及K型熱電偶模數(shù)轉(zhuǎn)換器—MAX6675的組合,形成單片機(jī)的溫度檢測(cè)系統(tǒng)。包括:如何根據(jù)選擇的器件設(shè)計(jì)外圍電路和單片機(jī)的接口電路,如何編寫(xiě)控制溫度檢測(cè)器件進(jìn)行數(shù)據(jù)傳輸?shù)膯纹瑱C(jī)程序,如何使用LCD12864進(jìn)行字符的顯示,并簡(jiǎn)要介紹數(shù)字溫度傳感器MAX6675的應(yīng)用。
1 系統(tǒng)總體方案設(shè)計(jì)
1.1 工作原理
1.2 總體設(shè)計(jì)方案
2 系統(tǒng)硬件設(shè)計(jì)
2.1 信號(hào)采集電路
2.1.1 傳感器
2.2 單片機(jī)系統(tǒng)電路
2.3 人機(jī)交互電路
2.4 溫度顯示電路
3 仿真電路及硬件分析
4 系統(tǒng)軟件設(shè)計(jì)
4.1 軟件設(shè)計(jì)思路
4.2 程序流程圖
4.3 主要程序代碼
5 實(shí)驗(yàn)結(jié)果顯示
6 附錄及元器件清單
6.1 所用相關(guān)軟件
6.2 元器件清單
統(tǒng)總體方案設(shè)計(jì)
1.1 工作原理熱電堆基本原理 熱電堆是一種熱釋紅外線傳感器,它是由熱電偶構(gòu)成的一種器件。它在耳式體溫計(jì)、放射溫度計(jì)、電烤爐、食品溫度檢測(cè)等領(lǐng)域中,作為溫度檢測(cè)器件獲得了廣泛的應(yīng)用。熱電堆的組成基本單元--熱電偶。 K型熱電偶作為一種溫度傳感器,K型熱電偶通常和顯示儀表,記錄儀表和電子調(diào)節(jié)器配套使用。K型熱電偶可以直接測(cè)量各種生產(chǎn)中從0℃到1300℃范圍的液體蒸汽和氣體介質(zhì)以及固體的表面溫度。K型熱電偶通常由感溫元件、安裝固定裝置和接線盒等主要部件組成,K型熱電偶是目前用量最大的廉金屬熱電偶,其用量為其他熱電偶的總和。K型熱電偶絲直徑一般為1.2~4.0mm。K型熱電偶具有線性度好,熱電動(dòng)勢(shì)較大,靈敏度高,穩(wěn)定性和均勻性較好,抗氧化性能強(qiáng),價(jià)格便宜等優(yōu)點(diǎn),能用于氧化性惰性氣氛中廣泛為用戶所采用。 熱電偶測(cè)溫由熱電偶、連接導(dǎo)線及顯示儀表三部分組成。如果將熱電偶的熱端加熱,使得冷、熱兩端的溫度不同,則在該熱電偶回路中就會(huì)產(chǎn)生熱電勢(shì),這種物理現(xiàn)象就稱為熱電現(xiàn)象(即熱電效應(yīng))。在熱電偶回路中產(chǎn)生的電勢(shì)由溫差電勢(shì)和接觸電勢(shì)兩部分組成。接觸電勢(shì):它是兩種電子密度不同的導(dǎo)體相互接觸時(shí)產(chǎn)生的一種熱電勢(shì)。當(dāng)兩種不同的導(dǎo)體A和B相接觸時(shí),假設(shè)導(dǎo)體A和B的電子密度分別為NA和NB并且NA>NB,則在兩導(dǎo)體的接觸面上,電子在兩個(gè)方向的擴(kuò)散率就不相同,由導(dǎo)體A擴(kuò)散到導(dǎo)體B的電子數(shù)比從B擴(kuò)散到A的電子數(shù)要多。導(dǎo)體A失去電子而顯正電,導(dǎo)體B獲得電子而顯負(fù)電。因此,在A、B兩導(dǎo)體的接觸面上便形成一個(gè)由A到B的靜電場(chǎng),這個(gè)電場(chǎng)將阻礙擴(kuò)散運(yùn)動(dòng)的繼續(xù)進(jìn)行,同時(shí)加速電子向相反方向運(yùn)動(dòng),使從B到A的電子數(shù)增多,最后達(dá)到動(dòng)態(tài)平衡狀態(tài)。此時(shí)A、B之間也形成一電位差,這個(gè)電位差稱為接觸電勢(shì)。此電勢(shì)只與兩種導(dǎo)體的性質(zhì)相接觸點(diǎn)的溫度有關(guān),當(dāng)兩種導(dǎo)體的材料一定,接觸電勢(shì)僅與其接點(diǎn)溫度有關(guān)。溫度越高,導(dǎo)體中的電子就越活躍,由A導(dǎo)體擴(kuò)散到B導(dǎo)體的電子就越多,接觸面處所產(chǎn)生的電動(dòng)勢(shì)就越大,即接觸電勢(shì)越大。
MAX6675的工作原理與功能 根據(jù)熱電偶測(cè)溫原理,熱電偶的輸出熱電勢(shì)不僅與測(cè)量端的溫度有關(guān),而且與冷端的溫度有關(guān),使用硬件電路進(jìn)行冷端補(bǔ)償時(shí),雖能部分改善測(cè)量精度,但由于熱電偶使用環(huán)境的不同及硬件電路本身的局限性,效果并不明顯;而使用軟件補(bǔ)償,通常是使用微處理機(jī)表格法或線性電路等方法來(lái)減小熱電偶本身非線性帶來(lái)的測(cè)量誤差,但同時(shí)也增加了程序編制及調(diào)試電路的難度。MAX6675對(duì)其內(nèi)部元器件參數(shù)進(jìn)行了激光修正,從而對(duì)熱電偶的非線性進(jìn)行了內(nèi)部修正。同時(shí),MAX6675內(nèi)部集成的冷端補(bǔ)償電路、非線性校正電路、斷偶檢測(cè)電路都給K型熱電偶的使用帶來(lái)了極大方便,其工作原理如圖2所示。 (1) 溫度變換 MAX6675內(nèi)部具有將熱電偶信號(hào)轉(zhuǎn)換為與ADC輸入通道兼容電壓的信號(hào)調(diào)節(jié)放大器,T+和T-輸入端連接到低噪聲放大器A1,以保證檢測(cè)輸入的高精度,同時(shí)是熱電偶連接導(dǎo)線與干擾源隔離。熱電偶輸出的熱電勢(shì)經(jīng)低噪聲放大器A1放大,再經(jīng)過(guò)A2電壓跟隨器緩沖后,送至ADC的輸入端。在將溫度電壓值轉(zhuǎn)換為相等價(jià)的溫度值之前,它需要對(duì)熱電偶的冷端進(jìn)行補(bǔ)償,冷端溫度即是MAX6675周圍溫度與0℃實(shí)際參考值之間的差值。對(duì)于K型熱電偶, 電壓變化率為41μ/℃, 電壓可由線性公式Vout=(41μ/℃)×(tR-tAMB)來(lái)近似熱電偶的特性。上式中, Vout為熱電偶輸出電壓(mV), tR是測(cè)量點(diǎn)溫度,tAMB是周圍溫度。 (2)冷端補(bǔ)償 熱電偶的功能是檢測(cè)熱、冷兩端溫度的差值,熱電偶熱節(jié)點(diǎn)溫度可在0℃~+1023.75℃范圍變化。冷端即安裝MAX6675的電路板周圍溫度,比溫度在-20℃~+85℃范圍內(nèi)變化。當(dāng)冷端溫度波動(dòng)時(shí),MAX6675仍能精確檢測(cè)熱端的溫度變化。 (3) 熱補(bǔ)償 在測(cè)溫應(yīng)用中,芯片自熱將降低MAX6675溫度測(cè)量精度,誤大小依賴于MAX6675封裝的熱傳導(dǎo)性、安裝技術(shù)和通風(fēng)效果。為降低芯片自熱引起的測(cè)量誤差,可在布線時(shí)使用大面積接地技術(shù)提高M(jìn)AX6675溫度測(cè)量精度。 (4) 噪聲補(bǔ)償 MAX6675的測(cè)量精度對(duì)電源耦合噪聲較敏感。為降低電源噪聲影響,可在MAX6675的電源引腳附近接入1只0.1μF陶瓷旁路電容。 (5)測(cè)量精度的提高 熱電偶系統(tǒng)的測(cè)量精度可通過(guò)以下預(yù)防措施來(lái)提高:①盡量采用不能從測(cè)量區(qū)域散熱的大截面導(dǎo)線;②如必須用小截面導(dǎo)線,則只能應(yīng)用在測(cè)量區(qū)域,并且在無(wú)溫度變化率區(qū)域用擴(kuò)展導(dǎo)線;③避免受能拉緊導(dǎo)線的機(jī)械擠壓和振動(dòng);④當(dāng)熱電偶距離較遠(yuǎn)時(shí),應(yīng)采用雙絞線作熱電偶連線;⑤在溫度額定值范圍內(nèi)使用熱電偶導(dǎo)線;⑥避免急劇溫度變化;⑦在嚴(yán)劣環(huán)境中,使用合適的保護(hù)套以保證熱電偶導(dǎo)線;⑧僅在低溫和小變化率區(qū)域使用擴(kuò)展導(dǎo)線;⑨保持熱電偶電阻的事件 (6) SPI串行接口 MAX6675采用標(biāo)準(zhǔn)的SPI串行外設(shè)總線與MCU接口,且MAX6675只能作為從設(shè)備。MAX6675 SO端輸出溫度數(shù)據(jù)的格式如圖3所示,MAX6675 SPI接口時(shí)序如圖4所示。MAX6675從SPI串行接口輸出數(shù)據(jù)的過(guò)程如下:MCU使CS變低并提供時(shí)鐘信號(hào)給SCK,由SO讀取測(cè)量結(jié)果。CS變低將停止任何轉(zhuǎn)換過(guò)程;CS變高將啟動(dòng)一個(gè)新的轉(zhuǎn)換過(guò)程。一個(gè)完整串行接口讀操作需16個(gè)時(shí)鐘周期,在時(shí)鐘的下降沿讀16個(gè)輸出位,第1位和第15位是一偽標(biāo)志位,并總為0;第14位到第3位為以MSB到LSB順序排列的轉(zhuǎn)換溫度值;第2位平時(shí)為低,當(dāng)熱電偶輸入開(kāi)放時(shí)為高,開(kāi)放熱電偶檢測(cè)電路完全由MAX6675實(shí)現(xiàn),為開(kāi)放熱電偶檢測(cè)器操作,T-必須接地,并使能地點(diǎn)盡可能接近GND腳;第1位為低以提供MAX6675器件身份碼,第0位為三態(tài)。
LCD12864顯示原理 在數(shù)字電路中,所有的數(shù)據(jù)都是以0和1保存的,對(duì)LCD控制器進(jìn)行不同的數(shù)據(jù)操作,可以得到不同的結(jié)果。對(duì)于顯示英文操作,由于英文字母種類很少,只需要8位(一字節(jié))即可。而對(duì)于中文,常用卻有6000以上,于是我們的DOS前輩想了一個(gè)辦法,就是將ASCII表的高128個(gè)很少用到的數(shù)值以兩個(gè)為一組來(lái)表示漢字,即漢字的內(nèi)碼。而剩下的低128位則留給英文字符使用,即英文的內(nèi)碼。 那么,得到了漢字的內(nèi)碼后,還僅是一組數(shù)字,那又如何在屏幕上去顯示呢?這就涉及到文字的字模,字模雖然也是一組數(shù)字,但它的意義卻與數(shù)字的意義有了根本的變化,它是用數(shù)字的各位信息來(lái)記載英文或漢字的形狀,如英文的'A'在字模的記載方式如圖1所示: 圖1 “A”字模圖 而中文的“你”在字模中的記載卻如圖2所示: 圖2 “你”字模圖 根據(jù)芯片的不同取模的方式不同,有多種取模方式:?jiǎn)紊c(diǎn)陣液晶字模,橫向取模,字節(jié)正序,單色點(diǎn)陣液晶字模,橫向取模,字節(jié)倒序,單色點(diǎn)陣液晶字模,縱向取模,字節(jié)正序,單色點(diǎn)陣液晶字模,縱向取模,字節(jié)倒序等等。 1.2 總體設(shè)計(jì)方案本系統(tǒng)采用的是K型熱電偶采集溫度,因此本設(shè)計(jì)有溫度采集部分,數(shù)據(jù)處理部分,溫度顯示部分,故障顯示并顯示部分組成。AT89S52單片機(jī)以及單片機(jī)的外圍電路由晶振電路,復(fù)位電路,溫度采集電路,溫度顯示電路,報(bào)警電路組成。系統(tǒng)設(shè)計(jì)框圖如下: 系統(tǒng)框圖 溫度采集部分 先使用K型熱電偶對(duì)環(huán)境溫度進(jìn)行檢查,再經(jīng)過(guò)K型熱電偶模數(shù)轉(zhuǎn)換器—MAX6675,進(jìn)行溫度轉(zhuǎn)換,將環(huán)境溫度轉(zhuǎn)換成12位二進(jìn)制數(shù)據(jù)采集進(jìn)單片機(jī),以便單片機(jī)進(jìn)行數(shù)據(jù)處理。在本系統(tǒng)中,由于是4路溫度采集,因此使用串行的方式,依次對(duì)4路溫度進(jìn)行采集,并用單片機(jī)的P2口來(lái)傳輸與反饋數(shù)據(jù)。 數(shù)據(jù)處理部分 利用算法,在單片機(jī)中對(duì)采集到的數(shù)據(jù)進(jìn)行處理,并轉(zhuǎn)換成百、十、個(gè)位通過(guò)P0口進(jìn)行輸出。 溫度顯示部分 通過(guò)調(diào)用LCD的顯示函數(shù),將溫度以兩行的方式實(shí)時(shí)地顯示在LCD上。 超限報(bào)警部分 通過(guò)軟件算法,檢測(cè)4路的溫度是否超出人體正常體溫,一旦超過(guò)這個(gè)范圍,則進(jìn)行報(bào)警,并在LCD上顯示“發(fā)燒”,并且同時(shí)通過(guò)蜂鳴器以及LED燈,來(lái)進(jìn)行聲光報(bào)警。當(dāng)檢測(cè)到熱電偶出現(xiàn)斷耦時(shí),在LCD上顯示“斷耦”,并且同時(shí)通過(guò)點(diǎn)亮對(duì)應(yīng)的LED燈進(jìn)行報(bào)警。
2 系統(tǒng)硬件設(shè)計(jì)2.1 信號(hào)采集電路2.1.1 傳感器 該部分為四路溫度采集,采用K型熱電偶與K型熱電偶數(shù)模轉(zhuǎn)換器-MAX6675互相搭配的方式,如下圖所示: 以其中一路為例,MAX6675的冷熱接收端分別于熱電偶的冷熱端相連,其串行數(shù)據(jù)輸出端分別與單片機(jī)的P2口相連。 Maxim公司新近推出的MAX6675是一復(fù)雜的單片熱電偶數(shù)字轉(zhuǎn)換器, 內(nèi)部具有信號(hào)調(diào)節(jié)放大器、12位的模擬數(shù)字化熱電偶轉(zhuǎn)換器、冷端補(bǔ)償傳感和校正、數(shù)字控制器、1個(gè)SPI兼容接口和1個(gè)相關(guān)的邏輯控制。MAX6675內(nèi)部集成有冷端補(bǔ)償電路;帶有簡(jiǎn)單的3位串行SPI接口;可將溫度信號(hào)轉(zhuǎn)換成12位數(shù)字量,溫度分辨率達(dá)0.25℃;內(nèi)含熱電偶斷線檢測(cè)電路。冷端補(bǔ)償?shù)臏囟确秶?20℃~80℃,它的溫度分辨能力為0. 25 ℃,可以測(cè)量0℃~1023.75℃的溫度,工作電壓為3. 0~5. 5V。 MAX6675的主要特性如下: ①簡(jiǎn)單的SPI串行口溫度值輸出; ②0℃~+1024℃的測(cè)溫范圍; ③12位0.25℃的分辨率; ④片內(nèi)冷端補(bǔ)償; ⑤高阻抗差動(dòng)輸入; ⑥熱電偶斷線檢測(cè); ⑦單一+5V的電源電壓; ⑧低功耗特性; ⑨工作溫度范圍-20℃~+85℃; ⑩2000V的ESD信號(hào)。 該器件采用8引腳SO帖片封裝。引腳排列如圖1所示,引腳功能如下表所列。  為了正確使用MAX6675芯片,設(shè)計(jì)時(shí)還必須注意以下幾點(diǎn): (1)利用輸出數(shù)據(jù)中的D2進(jìn)行斷偶檢測(cè)時(shí),熱電偶的輸入負(fù)極T·必須接地,且應(yīng)盡可能地靠近MX6675的引腳地(即PIN1) (2)由于冷端溫度是由MAX6675本身檢測(cè)的因此為了提髙測(cè)量的精確度電路板的地線盡可能地大; (3)由于熱電偶信號(hào)為微弱信號(hào),因此要盡可能地釆取措施防止噪聲千擾?稍贛AX675電源與地線之間接個(gè)0.1uF的陶瓷電容。 以下是具體電路:這里只給出一路
2.2 單片機(jī)系統(tǒng)電路AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡(jiǎn)版本。 主要特性:
1、與MCS-51 兼容 2、4K字節(jié)可編程閃爍存儲(chǔ)器 3、1000寫(xiě)/擦循環(huán)數(shù)據(jù)保留時(shí)間10年 4、全靜態(tài)工作,0Hz-24Hz·三級(jí)程序存儲(chǔ)器鎖定 5、128*8位內(nèi)部RAM32可編程I/O線 6、兩個(gè)16位定時(shí)器/計(jì)數(shù)器 7、5個(gè)中斷源 8、可編程串行通道低功耗的閑置和掉電模式 9、片內(nèi)振蕩器和時(shí)鐘電路 主要管腳說(shuō)明: P0口:P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫(xiě)1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。 P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。 P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。 P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 以下是單片機(jī)系統(tǒng)的電路圖: 2.3 人機(jī)交互電路通過(guò)蜂鳴器和4顆紅色LED可以判斷被檢測(cè)者體溫是否發(fā)熱。當(dāng)體溫狀況是大于37.1℃即發(fā)燒時(shí),蜂鳴器響,四顆LED燈亮,LCD顯示發(fā)燒者的溫度;人員可以通過(guò)SOUND和STOP/RESET來(lái)控制蜂鳴器和檢測(cè)是否暫停;電源指示燈用來(lái)表示系統(tǒng)是否已經(jīng)通電;當(dāng)系統(tǒng)檢測(cè)斷耦時(shí),四顆LED會(huì)對(duì)應(yīng)四個(gè)熱電偶,如果出現(xiàn)斷耦,對(duì)應(yīng)的LED會(huì)亮,LCD顯示屏上也會(huì)顯示“斷耦”字符。 以下是各個(gè)人機(jī)交換電路的設(shè)計(jì)圖: 2.4 溫度顯示電路該部分是通過(guò)LCD進(jìn)行對(duì)溫度數(shù)據(jù)的顯示其使能端與P3口相連,數(shù)據(jù)輸入端與P0口相連,如下圖所示是仿真軟件中的電路: 下圖所示是實(shí)際電路中的設(shè)計(jì),使用的是一個(gè)2.54間距20Pin的排針插座: 附系統(tǒng)原理圖: 3 仿真電路及硬件分析仿真系統(tǒng)使用Protues 8 Professional軟件進(jìn)行仿真。仿真電路可以分為主控模塊、溫度采集模塊、溫度顯示模塊、聲光警報(bào)模塊和按鍵模塊。溫度采集模塊使用四顆K型熱電偶和四顆MAX6675芯片,聲光報(bào)警系統(tǒng)使用一個(gè)蜂鳴器和四個(gè)紅色LED,主控模塊主要采用AT89C51芯片,溫度顯示模塊使用一塊不帶中文字庫(kù)的LCD12864顯示屏,按鍵模塊由兩個(gè)帶鎖開(kāi)關(guān)組成。 進(jìn)過(guò)仿真測(cè)試,各個(gè)功能可以達(dá)到設(shè)計(jì)的要求。MAX6675的分辨率為0.25℃,在模擬中,可以測(cè)試出在此誤差條件下,改測(cè)量系統(tǒng)對(duì)溫度的采集符合設(shè)計(jì)要求。
仿真圖1:系統(tǒng)開(kāi)機(jī)初始界面: 仿真圖2:正常測(cè)體溫,未發(fā)現(xiàn)發(fā)熱狀況 仿真圖3:正常測(cè)體溫,發(fā)現(xiàn)發(fā)熱狀況,并發(fā)出聲光報(bào)警 仿真圖4:正常測(cè)體溫,1路采集發(fā)生斷耦,未發(fā)現(xiàn)發(fā)熱狀況,并發(fā)出光警報(bào) 4 系統(tǒng)軟件設(shè)計(jì)4.1 軟件設(shè)計(jì)思路程序開(kāi)始后,先初始化LCE12864顯示屏,在開(kāi)機(jī)界面顯示“歡迎使用 智能溫度 檢測(cè)系統(tǒng) 深圳大學(xué)”的文字,延時(shí)一定時(shí)間后進(jìn)行清屏工作。 下面進(jìn)入while循環(huán)。讀取存儲(chǔ)四個(gè)MAX6675芯片上測(cè)量的K型熱電偶的溫度值并進(jìn)行標(biāo)度轉(zhuǎn)換,并且根據(jù)MAX6675輸出數(shù)據(jù)上的D2位是否置1來(lái)判斷是否短線,如果短線,則將輸出數(shù)據(jù)置0,并且在熱電偶對(duì)應(yīng)的LED長(zhǎng)亮,由此來(lái)判斷哪只電偶出現(xiàn)斷線。由于MAX6675的轉(zhuǎn)換時(shí)間的典型值是0.17s,最大值是0.22s,所以在轉(zhuǎn)換時(shí),要加入一定時(shí)間的延遲。然后將標(biāo)度轉(zhuǎn)換后的溫度數(shù)據(jù)在LCD顯示屏上顯示出。此時(shí)對(duì)4路溫度進(jìn)行判斷,如果測(cè)量的體溫已經(jīng)大于37.1℃則說(shuō)明被測(cè)者已經(jīng)發(fā)熱,37.3-38℃是低燒,38.1-40℃是高燒。此時(shí),儀器產(chǎn)生聲光警報(bào),暫停測(cè)量,引入2個(gè)外部按鍵開(kāi)關(guān)中斷,如果STOP/RESET按鍵置低電位,則繼續(xù)測(cè)量,置高電位表示保持暫停轉(zhuǎn)態(tài),方便人員進(jìn)行數(shù)據(jù)記錄; 如果SOUND按鍵置低電位,表示關(guān)閉蜂鳴器。如果在測(cè)量的過(guò)程中未發(fā)現(xiàn)發(fā)熱狀況,人員也可以對(duì)STOP/RESET按鍵置低電位,來(lái)暫停測(cè)量,對(duì)SOUND按鍵置低電位,表示關(guān)閉蜂鳴器。 4.2 程序流程圖4.3 主要程序代碼數(shù)據(jù)獲取部分
由于MAX6675采用的是12位二進(jìn)制的串行數(shù)據(jù)輸出的方式,而且,其有效的數(shù)據(jù)分別在3~~14位,因此需要進(jìn)行串行數(shù)據(jù)的移位操作,MAX6675最大數(shù)值為1023.75,而AD精度為12位,即2的12次方為4096,轉(zhuǎn)換對(duì)應(yīng)數(shù),故要除4(*0.25)。轉(zhuǎn)換公式是:實(shí)際溫度=Temp_1*0.25-24.1。以下為部分軟件算法:
/***********************************************************
函數(shù)名稱:Re_Convert_1()
函數(shù)功能:讀取第一顆MAX6675芯片上的原始數(shù)據(jù)
入口參數(shù):
出口參數(shù):溫度Temp_1
***********************************************************/
float Re_Convert_1()
{
uchar i;
int cut_off_flag = 1;
unsigned int Temp_1;
Temp_1=0;
CS=1;
SCK=0;
_nop_();
_nop_();
CS=0;
for(i=0;i<16;i++) //獲取16位MSB
{
Temp_1<<=1; //sck置低
_nop_();
SCK=1;
if(SO1==1)//取當(dāng)前值
{
Temp_1=Temp_1|0x01;
}
else
Temp_1=Temp_1|0x00;
_nop_();
SCK=0;
_nop_();
}
cut_off_flag = (Temp_1>>2)&0x0001; //當(dāng)斷耦時(shí),D2位置1
if(cut_off_flag == 1) //斷偶標(biāo)志是 0的話,斷開(kāi)
{
flag1 = 0;
}
else flag1 = 1;
Temp_1=Temp_1<<1; //去掉第15位
Temp_1=Temp_1>>4; //去掉第0~2位
return(Temp_1);
}
以上算法把數(shù)據(jù)左移移一位,然后再右移四位,從而得到完整的12位二進(jìn)制溫度數(shù)據(jù)。
數(shù)據(jù)顯示部分
LCD上的漢字以及數(shù)據(jù),都需要使用相應(yīng)的字模軟件來(lái)對(duì)漢字和數(shù)據(jù)進(jìn)行編碼,并存儲(chǔ)在相應(yīng)的數(shù)組中,通過(guò)相應(yīng)的函數(shù)調(diào)用,將所需顯示的數(shù)據(jù),按照相應(yīng)的格式顯示在LCD上,以下為部分軟件算法:
漢字顯示函數(shù):
void Display_HZ(uchar screen,uchar page,uchar column,uchar *p)
{
uchar i;
SelectScreen(screen);
Set_page(page); //寫(xiě)上半頁(yè):16*8
Set_column(column*16); //控制列
for(i=0;i<16;i++) //控制16列的數(shù)據(jù)輸出,左右各64個(gè)點(diǎn),可顯示4個(gè)漢字
{
write_LCD_data(p); //漢字的上半部分
}
Set_page(page+1); //寫(xiě)下半頁(yè):16*8
Set_column(column*16); //控制列
for(i=0;i<16;i++) //控制16列的數(shù)據(jù)輸出
{
write_LCD_data(p[i+16]); //漢字的下半部分
}
}
數(shù)字顯示函數(shù):
void Display_ASCII(uchar screen,uchar page,uchar column,uchar *p) //左右各64個(gè)點(diǎn),可顯示8個(gè)字符
{
uchar i;
SelectScreen(screen);
Set_page(page);
Set_column(column);
for(i=0;i<8;i++) //顯示字符上半部分:8*8
{
write_LCD_data(p);
}
Set_page(page+1); //顯示字符下半部分:8*8
Set_column(column);
for(i=0;i<8;i++)
{
write_LCD_data(p[i+8]);
}
}
調(diào)用方式如下:
Display_HZ(1,0,2,huan);
Display_HZ(1,0,3,ying);
Display_ASCII(1,0,0*8,shuzi[10]);
Display_ASCII(1,0,1*8,shuzi[1]);
以下為L(zhǎng)CD顯示測(cè)量溫度函數(shù)部分:(以1路為例)
void Disp_temp()
{
temp1=(int)(wendu1*10);
if(wendu1)
{
fen1=temp1%10;
temp1=temp1/10;
ge1=temp1%10;
shi1=temp1/10;
Display_ASCII(1,0,5*8,shuzi[fen1]);
Display_ASCII(1,0,3*8,shuzi[ge1]);
Display_ASCII(1,0,2*8,shuzi[shi1]);
}
else if(wendu1==0)
{
Display_ASCII(1,0,5*8,shuzi[0]);
Display_ASCII(1,0,3*8,shuzi[0]);
Display_ASCII(1,0,2*8,shuzi[0]);
}
Display_HZ(1,0,0,fuhao_1);
Display_ASCII(1,0,4*8,shuzi[13]);
Display_HZ(1,0,3,fuhao_ssd);
}
斷耦檢測(cè)函數(shù)
如果熱電偶發(fā)生斷耦標(biāo)志位wendu=1,則LED長(zhǎng)亮。
void cut_off_flag()
{
if(flag1 == 0)
{
LED1 = 1;
wendu1 = 0;
Display_HZ(1,6,3,duan);
Display_HZ(2,6,0,ou);
}
if(flag2==0)
{
LED2 = 1;
wendu2 = 0;
Display_HZ(1,6,3,duan);
Display_HZ(2,6,0,ou);
}
if(flag3==0)
{
LED3 = 1;
wendu3= 0;
Display_HZ(1,6,3,duan);
Display_HZ(2,6,0,ou);
}
if(flag4==0)
{
LED4 = 1;
wendu4 = 0;
Display_HZ(1,6,3,duan);
Display_HZ(2,6,0,ou);
}
}
發(fā)燒檢測(cè)函數(shù)
如果四個(gè)熱電偶其中有一個(gè)檢測(cè)到發(fā)燒,則暫停檢測(cè)、LED長(zhǎng)亮、蜂鳴器響、顯示字符“發(fā)燒xx.x℃”;按STOP/RESET鍵可復(fù)位重新進(jìn)行檢測(cè)。
void fever_check()//發(fā)燒檢測(cè)
{
float wendu_H;
int wenduH,fenH,geH,shiH;
if((wendu1<37.1) && (wendu2<37.1) && (wendu3<37.1) && (wendu4<37.1)) //檢測(cè)是否發(fā)燒
{
SPEAKER = 0;//蜂鳴器不響,LED不亮
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
}
else
{
if(SOUND == 0) //外部按鍵中斷,蜂鳴器的控制
{
SPEAKER =0;
}
else
SPEAKER = 1;//蜂鳴器響
LED1 = 1;//LED亮
LED2 = 1;
LED3 = 1;
LED4 = 1;
if((wendu1-wendu2)>0.0001)
{
wendu_H = wendu1;
}
else
{
wendu_H = wendu2;
}
if((wendu_H<wendu3)>0.001)
{
wendu_H = wendu3;
}
if((wendu_H<wendu4)>0.001)
{
wendu_H = wendu4;
}
wenduH=(int)(wendu_H*10);
fenH=wenduH%10;
wenduH=wenduH/10;
geH=wenduH%10;
shiH=wenduH/10;
Display_ASCII(1,4,6*8,shuzi[shiH]);
Display_ASCII(1,4,7*8,shuzi[geH]);
Display_ASCII(2,4,0*8,shuzi[13]);
Display_ASCII(2,4,1*8,shuzi[fenH]);
Display_HZ(1,4,1,fa);
Display_HZ(1,4,2,sao);
Display_HZ(2,4,1,fuhao_ssd);
for(;STOP == 1;) //當(dāng)檢測(cè)到發(fā)燒時(shí),暫停
{
if(SOUND == 0) //外部按鍵中斷,蜂鳴器的控制
{
SPEAKER =0;
}
else
SPEAKER = 1;//蜂鳴器響
}
ClearScreen(0);
}
for(;STOP == 0;) //外部按鍵中斷,暫停
{
}
}
實(shí)驗(yàn)結(jié)果顯示將實(shí)物連接起來(lái)后的PCB電路如下所示: 圖5-1 實(shí)物圖-正面 圖5-1 實(shí)物圖-背面 6 附錄及元器件清單6.1 所用相關(guān)軟件- Keil——51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng)
- ISIS——proteus仿真軟件
- Altium——Altium Designer 9 PCB繪制軟件
圖6-1 本設(shè)計(jì)所用相關(guān)軟件 6.2 元器件清單7 總結(jié)及體會(huì)(寫(xiě)下總結(jié)及體會(huì),以及對(duì)授課方式等的意見(jiàn)和建議。) 剛開(kāi)始對(duì)于體溫檢測(cè)傳感器的選擇,不是很正確,走了一下彎路。在老師指導(dǎo)后才知道使用熱電堆進(jìn)行體溫的檢測(cè)會(huì)更加準(zhǔn)確合理。在熱電偶的選擇上也是查閱了好多資料,對(duì)比現(xiàn)存的很多設(shè)計(jì)方案,從系統(tǒng)的復(fù)雜性、精確度和原件價(jià)格入手,采用了采用K型熱電偶與K型熱電偶模數(shù)轉(zhuǎn)換器—MAX6675的組合。顯示器上也使用了LCD12864,可以實(shí)現(xiàn)中英文顯示,使用方便。 確定好方案后,在對(duì)MAX6675的串行數(shù)據(jù)進(jìn)行Protues仿真讀取時(shí),卻出現(xiàn)了很多小問(wèn)題。MAX6675與單片機(jī)的通訊中,對(duì)片選和時(shí)鐘電平如果沒(méi)有適當(dāng)延時(shí)的話會(huì)出現(xiàn)錯(cuò)誤的數(shù)據(jù),并且花費(fèi)了很多時(shí)間才解決掉這一問(wèn)題,同時(shí)出現(xiàn)的問(wèn)題還有MAX6675芯片的輸出數(shù)據(jù)在Protues仿真和芯片數(shù)據(jù)手冊(cè)的輸出數(shù)據(jù)是不一樣的,這一點(diǎn)原先不知道,也是花費(fèi)了很長(zhǎng)時(shí)間才意識(shí)到Protues仿真得出的結(jié)果和實(shí)際結(jié)果存在幾十℃的偏差,這才解決掉輸出溫度誤差很大的問(wèn)題。起初溫度數(shù)據(jù)的誤差大不正常還以為是時(shí)序有問(wèn)題,修改了很多遍SPI通訊的代碼,在花費(fèi)很長(zhǎng)時(shí)間后才發(fā)現(xiàn)最初的代碼沒(méi)錯(cuò),而是Protues的問(wèn)題。 在LCD12864上顯示數(shù)字和文字也出現(xiàn)了一個(gè)問(wèn)題,本身代碼沒(méi)有問(wèn)題,但是因?yàn)閗eil5的一個(gè)設(shè)置(Memory Model需要選擇Small,否則會(huì)出錯(cuò)),會(huì)導(dǎo)致在代碼成功的條件下運(yùn)行出錯(cuò),導(dǎo)致LCD顯示屏一直亂碼。也是花了一段時(shí)間梳理代碼,確保代碼沒(méi)出錯(cuò)后,才解決問(wèn)題。
51hei.png (7.59 KB, 下載次數(shù): 89)
下載附件
2020-6-28 18:15 上傳
全部資料51hei下載地址:
智能體溫檢測(cè).7z
(2.18 MB, 下載次數(shù): 266)
2020-6-28 18:16 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|