基于單片機的脈搏測量儀設(shè)計
摘要: 脈搏測量儀在我們的日常生活中已經(jīng)得到了非常廣泛的應(yīng)用,通過觀測脈搏信號,可以對人體的健康進行檢查,通常被用于保健中心和醫(yī)院。為了提高脈搏測量儀的簡便性和精確度,本課題設(shè)計了一種基于51單片機的脈搏測量儀。系統(tǒng)以STC89C52單片機為核心,以光電傳感器利用單片機系統(tǒng)內(nèi)部定時器來計算時間,由光電傳感器感應(yīng)產(chǎn)生信號,單片機通過對信號累加得到脈搏跳動次數(shù),時間由定時器定時而得。系統(tǒng)運行中可以通過觀察指示燈閃爍,若均勻閃爍說明測量值準(zhǔn)確。系統(tǒng)停止運行時,能夠顯示總的脈搏次數(shù)和時間。經(jīng)測試,系統(tǒng)工作正常,達到設(shè)計要求。
本設(shè)計利用紅外光電傳感器產(chǎn)生脈沖信號,經(jīng)過放大整形后,輸入單片機內(nèi)進行相應(yīng)的控制,從而測量出一分鐘內(nèi)的脈搏跳動次數(shù),快捷方便。系統(tǒng)可以供用戶測量當(dāng)時的脈搏次數(shù),同時還可以設(shè)定上限次數(shù)和下限次數(shù),當(dāng)測量的范圍超過設(shè)定的范圍則驅(qū)動蜂鳴器報警提醒,除此外用戶還可以設(shè)定每天鬧鐘提醒測量,時間可以自行設(shè)定,結(jié)果最終可以把采集到的脈搏信號顯示在LCD1602上。
引 言
脈搏測量在有脈搏時遮擋光線,無脈搏時透光強,所采用的傳感器是紅外接收二極管和紅外發(fā)射二極管。通過觀測脈搏信號,可以對人體的健康進行檢查,通常被用于保健中心和醫(yī)院。系統(tǒng)可以供用戶測量當(dāng)時的脈搏次數(shù),同時還可以設(shè)定上限次數(shù)和下限次數(shù),當(dāng)測量的范圍超過設(shè)定的范圍則驅(qū)動蜂鳴器報警提醒,除此外用戶還可以設(shè)定每天鬧鐘提醒測量,時間可以自行設(shè)定[1]。
從脈搏波中提取人體的生理病理信息作為臨床診斷和治療的依據(jù),歷來都受到中外醫(yī)學(xué)界的重視。系統(tǒng)以STC89C52單片機為核心,以光電傳感器利用單片機系統(tǒng)內(nèi)部定時器來計算時間,由光電傳感器感應(yīng)產(chǎn)生信號,單片機通過對信號累加得到脈搏跳動次數(shù),時間由定時器定時而得。系統(tǒng)運行中可以通過觀察指示燈閃爍,若均勻閃爍說明測量值準(zhǔn)確。幾乎世界上所有的民族都用過“摸脈”作為診斷疾病的手段。脈搏波所呈現(xiàn)出的形態(tài)(波形)、強度(波幅)、速率(波速)和節(jié)律(周期)等方面的綜合信息,在很大程度上反映出人體心血管系統(tǒng)中許多生理病理的血流特征,但人體的生物信號多屬于強噪聲背景下的低頻的弱信號, 脈搏波信號更是低頻微弱的非電生理信號, 必需經(jīng)過放大和后級濾波以滿足采集的要求。
第一章 概述
1.1 選題的背景和意義
脈搏攜帶有豐富的人體健康狀況的信息,自公元三世紀(jì)我國最早的脈學(xué)專著《脈經(jīng)》問世以來,脈學(xué)理論得到不斷的發(fā)展和提高。在中醫(yī)四診(望、聞、問、切)中,脈診占有非常重要的位置。脈診是我國傳統(tǒng)醫(yī)學(xué)中最具特色的一項診斷方法,其歷史悠久,內(nèi)容豐富,是中醫(yī)“整體觀念”、“辨證論證”的基本精神的體現(xiàn)與應(yīng)用。脈診作為“綠色無創(chuàng)”診斷的手段和方法,得到了中外人士的關(guān)注。但由于中醫(yī)是靠手指獲取脈搏信息,雖然脈診具有簡便、無創(chuàng)、無痛的特點易為患者接受,然而在長期的醫(yī)療實踐中也暴露出一些缺陷。首先,切脈單憑醫(yī)生手指感覺辨別脈象的特征,受到感覺、經(jīng)驗和表述的限制,并且難免存在許多主觀臆斷因素,影響了對脈象判斷的規(guī)范化;其次,這種用手指切脈的技巧很難掌握;再則,感知的脈象無法記錄和保存影響了對脈象機理的研究。脈診的這種定性化和主觀性,大大影響了其精度與可行性,成為中醫(yī)脈診應(yīng)用、發(fā)展和交流中的制約因素。為了將傳統(tǒng)的中醫(yī)藥學(xué)發(fā)揚光大,促進脈診的應(yīng)用和發(fā)展,必須與現(xiàn)代科技相結(jié)合,實現(xiàn)更科學(xué)、客觀的診斷[1]。
醫(yī)院的護士每天都要給住院的病人把脈記錄病人每分鐘脈搏數(shù),方法是用手按在病人腕部的動脈上,根據(jù)脈搏的跳動進行計數(shù)。為了節(jié)省時間,一般不會作1分鐘的測量,通常是測量10秒鐘時間內(nèi)心跳的數(shù),再把結(jié)果乘以6即得到每分鐘的心跳數(shù),即使這樣做還是比較費時,而且精度也不高。為了提高脈搏測量的精確與速度,多種脈搏測量儀被運用到醫(yī)學(xué)上來,從而開辟了一條全新的醫(yī)學(xué)診斷方法。
早在1860年Vierordt 創(chuàng)建了第一臺杠桿式脈搏描記儀,國內(nèi)20世紀(jì)50年代初朱顏將脈搏儀引用到中醫(yī)脈診的客觀化研究方面。此后隨著機械及電子技術(shù)的發(fā)展,國內(nèi)外在研制中醫(yī)脈象儀方面進展很快,尤其是70年代中期,國內(nèi)天津、上海、江西等地相繼成立了跨學(xué)科的脈象研究協(xié)作組,多學(xué)科共同合作促使中醫(yī)脈象研究工作進入了一個新的境界。脈象探頭式樣很多,有單部、三部、單點、多點、剛性接觸式、軟性接觸式、氣壓式、硅杯式、液態(tài)汞、液態(tài)水、子母式等組成,脈象探頭的主要原件有應(yīng)變片、壓電晶體、單晶硅、光敏元件、PVDF壓電薄膜等,其中以單部單點應(yīng)變片式為最廣泛,不過近年來正在向三部多點式方向設(shè)計[2]。
目前脈搏測量儀在多個領(lǐng)域被廣泛應(yīng)用,除了應(yīng)用于醫(yī)學(xué)領(lǐng)域,如無創(chuàng)心血管功能檢測、妊高癥檢測、中醫(yī)脈象、脈率檢測等等,商業(yè)應(yīng)用也不斷拓展,如運動、健身器材中的心率測試都用到了技術(shù)先進的脈搏測量儀。
1.2 脈搏測量儀的發(fā)展與應(yīng)用
隨著科學(xué)技術(shù)的發(fā)展,脈搏測量技術(shù)也越來越先進,對脈搏的測量精度也越來越高,國內(nèi)外先后研制了不同類型的脈搏測量儀,而其中關(guān)鍵是對脈搏傳感器的研究。起初用于體育測量的脈搏測試集中在對接觸式傳感器的研究,利用此類傳感器所研制的指脈、耳脈等測量儀各有其優(yōu)缺點。指脈測量比較方便、簡單,但因為手指上的汗腺較多,指夾常年使用,污染可能會使測量靈敏度下降:耳脈測量比較干凈,傳感器使用環(huán)境污染少,容易維護。但因耳脈較弱,尤其是當(dāng)季節(jié)變化時,所測信號受環(huán)境溫度影響明顯,造成測量結(jié)果不準(zhǔn)確。過去在醫(yī)院臨床監(jiān)護和日常中老年保健中出現(xiàn)的日常監(jiān)護儀器,如便攜式電子血壓計,可以完成脈搏的測量,但是這種便攜式電子血壓計利用微型氣泵加壓橡膠氣囊,每次測量都需要一個加壓和減壓的過程,存在體積龐大、加減壓過程會有不適、脈搏檢測的精確度低等缺點。
近年來國內(nèi)外致力于開發(fā)無創(chuàng)非接觸式的傳感器,這類傳感器的重要特征是測量的探測部分不侵入機體,不造成機體創(chuàng)傷,能夠自動消除儀表自身系統(tǒng)的誤差,測量精度高,通常在體外,尤其是在體表間接測量人體的生理和生化參數(shù)。
其中光電式脈搏傳感器是根據(jù)光電容積法制成的脈搏傳感器,通過對手指末端透光度的監(jiān)測,間接檢測出脈搏信號。具有結(jié)構(gòu)簡單、無損傷、精度高、可重復(fù)使用等優(yōu)點。通過光電式脈搏傳感器所研制的脈搏測量儀已經(jīng)應(yīng)用到臨床醫(yī)學(xué)等各個方面并收到了理想效果。
人體心室周期性的收縮和舒張導(dǎo)致主動脈的收縮和舒張,是血流壓力以波的形式從主動脈根部開始沿著整個動脈系統(tǒng)傳播,這種波成為脈搏波。從脈搏波中提取人體的心理病理信息作為臨床診斷和治療的依據(jù),歷來都受到中外醫(yī)學(xué)界的重視。脈搏波所呈現(xiàn)出的形態(tài)(波形)、強度(波幅)、速率(波速)和節(jié)律(周期)等方面的綜合信息,在很大程度上反映出人體心血管系統(tǒng)中許多生理病理的血流特征,因此對脈搏波采集和處理具有很高的醫(yī)學(xué)價值和應(yīng)用前景。但人體的生物信號多屬于強噪聲背景下的低頻的弱信號, 脈搏波信號更是低頻微弱的非電生理信號,因此必需經(jīng)過放大和后級濾波以滿足采集的要求。
第二章 總體方案的論證與設(shè)計
2.1主控模塊的選型和論證
方案一:
采用MSP430系列單片機,該單片機是TI公司1996年開始推向市場的一種16位超低功耗的混合信號處理器。其內(nèi)部集成了很多模擬電路、數(shù)字電路和微處理器,提供強大的功能。不過該芯片昂貴不適合一般的設(shè)計開發(fā)[3]。
方案二
采用51系列的單片機,該單片機是一個高可靠性,超低價,無法解密,高性能的8位單片機,32個IO口,且STC系列的單片機可以在線編程、調(diào)試,方便地實現(xiàn)程序的下載與整機的調(diào)試。
因此選用方案二中的51系列單片機作為主控芯片。
2.2顯示模塊的選型和論證
方案一:
采用點陣式數(shù)碼管顯示,點陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較合適,如采用在顯示數(shù)字顯得太浪費,且價格也相對較高,所以不用此種作為顯示。
方案二:
采用LED數(shù)碼管動態(tài)掃描,LED數(shù)碼管價格雖適中,對于顯示數(shù)字也最合適,而且采用動態(tài)掃描法與單片機連接時,占用單片機口線少。但是由于數(shù)碼管動態(tài)掃描需要借助74LS164移位寄存器進行移位,該芯片在電路調(diào)試時往往有很多障礙,所以不采用LED數(shù)碼管作為顯示。
方案三:
采用LCD液晶顯示屏,液晶顯示屏的顯示功能強大,可顯示大量文字,圖形,顯示多樣,清晰可見,對于本設(shè)計而言一個LCD1602的液晶屏即可,價格也還能接受,需要的借口線較多,但會給調(diào)試帶來諸多方便。
所以本設(shè)計中方案三中的LCD1602液顯示屏作為顯示模塊。
2.3傳感器的選型和論證
方案一:
采用壓電傳感器用來提取人的脈搏信號,壓電傳感器是利用某些電介質(zhì)受力后產(chǎn)生的壓電效應(yīng)制成的傳感器。所謂壓電效應(yīng)是指某些電介質(zhì)在受到某一方向的外力作用而發(fā)生形變(包括彎曲和伸縮形變)時,由于內(nèi)部電荷的極化現(xiàn)象,會在其表面產(chǎn)生電荷的現(xiàn)象。通過此現(xiàn)象可以提取出人的脈搏信號。
方案二:
采用光電傳感器提取人體脈搏信號,授予手指組織可以分成皮膚、肌肉、骨骼等非血液組織和血液組織,其中非血液組織的光吸收量是恒定的,而在血液中,靜脈血的搏動相對動脈血是十分微弱的,可以忽略,因此可以認(rèn)為光透過手指后的變化僅由動脈血的充盈而引起,那么在恒定波長的光源的照射下,通過檢測透過手指的光強將可以間接測量到人體的脈搏信號[4]。
由于光電傳感器較壓電傳感器容易在一般的地方可以買得到,因此這里選用光電傳感器來提取人體脈搏信號。
2.5系統(tǒng)整體設(shè)計概述
系統(tǒng)總體設(shè)計由STC89C52、按鍵、LCD1602、光電傳感器、時鐘模塊、運放等構(gòu)成,如圖2.1所示,系統(tǒng)設(shè)有四個按鍵,可以設(shè)置上下限脈搏數(shù),當(dāng)超過范圍的時候單片機會驅(qū)動蜂鳴器發(fā)響,脈搏測量的時候需要人把手輕輕的按在光電傳感器上面,由于人脈搏跳動的時候,血液的透光性不一樣會導(dǎo)致接收器那邊接收的信號強弱不一樣,間接的把人脈搏信號傳回,通過運放對其進行放大、整形后連接到單片機的IO口,單片機利用外部中斷對其進行計數(shù),最終換算成人一分鐘脈搏的跳動次數(shù),最終顯示在液晶屏上。
第三章 系統(tǒng)硬件電路設(shè)計
3.1主控模塊
主控模塊模塊在整個系統(tǒng)中起著統(tǒng)籌的作用,需要檢測鍵盤等各種參數(shù),同時驅(qū)動液晶顯示相關(guān)參數(shù),在這里我們選用了51系列單片機中的STC89C52單片機作為系統(tǒng)的主控芯片。
51系列單片機最初是由Intel 公司開發(fā)設(shè)計的,但后來Intel 公司把51 核的設(shè)計方案賣給了幾家大的電子設(shè)計生產(chǎn)商,譬如SST、Philip、Atmel 等大公司。因此市面上出現(xiàn)了各式各樣的均以51 為內(nèi)核的單片機[6]。這些各大電子生產(chǎn)商推出的單片機都兼容51 指令、并在51 的基礎(chǔ)上擴展一些功能而內(nèi)部結(jié)構(gòu)是與51一致的。
STC89C52有40個引腳,4個8位并行I/O口,1個全雙工異步串行口,同時內(nèi)含5個中斷源,2個優(yōu)先級,2個16位定時/計數(shù)器。STC89C52的存儲器系統(tǒng)由4K的程序存儲器(掩膜ROM),和128B的數(shù)據(jù)存儲器(RAM)組成。
STC89C52單片機的基本組成框圖見圖3.1所示。
圖3.1 STC89C52單片機結(jié)構(gòu)圖
3.1.3單片機最小系統(tǒng)設(shè)計
圖3.3 單片機最小系統(tǒng)電路圖
圖3.3為單片機最小系統(tǒng)電路圖,單片機最小系統(tǒng)有單片機、時鐘電路、復(fù)位電路組成,時鐘電路選用了12MHZ的晶振提供時鐘,作用為給單片機提供一個時間基準(zhǔn),其中執(zhí)行一條基本指令需要的時間為一個機器周期,單片機的復(fù)位電路,按下復(fù)位按鍵之后可以使單片機進入剛上電的起始狀態(tài)。圖中10K排阻為P0口的上拉電阻,由于P0口跟其他IO結(jié)構(gòu)不一樣為漏極開路的結(jié)構(gòu),因此要加上拉電阻才能正常使用。
3.2 LCD液晶顯示器簡介
由于本設(shè)計中要求顯示界面顯示一些參數(shù),因此這里選用了LCD1602作為界面顯示,可以把一些相關(guān)的參數(shù)進行顯示。
3.2.1 液晶原理介紹
液晶顯示器(LCD)英文全稱為Liquid Crystal Display,它一種是采用了液晶控制透光度技術(shù)來實現(xiàn)色彩的顯示器。和CRT顯示器相比,LCD的優(yōu)點是很明顯的。由于通過控制是否透光來控制亮和暗,當(dāng)色彩不變時,液晶也保持不變,這樣就無須考慮刷新率的問題。
顯示接口用來顯示系統(tǒng)的狀態(tài),命令或采集的電壓數(shù)據(jù)。本系統(tǒng)顯示部分用的是LCD液晶模塊,采用一個16×2的字符型液晶顯示模塊。
點陣圖形式液晶由 M 行×N 列個顯示單元組成,假設(shè) LCD 顯示屏有64行,每行有 128列,每 8列對應(yīng) 1 個字節(jié)的 8 個位,即每行由 16 字節(jié),共 16×8=128個點組成,屏上 64×16 個顯示單元和顯示 RAM 區(qū) 1024 個字節(jié)相對應(yīng),每一字節(jié)的內(nèi)容和屏上相應(yīng)位置的亮暗對應(yīng)。一個字符由 6×8 或 8×8點陣組成,即要找到和屏上某幾個位置對應(yīng)的顯示 RAM區(qū)的 8 個字節(jié),并且要使每個字節(jié)的不同的位為‘1’,其它的為‘0’,為‘1’的點亮,為‘0’的點暗,這樣一來就組成某個字符。但對于內(nèi)帶字符發(fā)生器的控制器來說,顯示字符就比較簡單了,可讓控制器工作在文本方式,根據(jù)在LCD 上開始顯示的行列號及每行的列數(shù)找出顯示 RAM對應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對應(yīng)的代碼即可。
3.2.2液晶模塊簡介
LCD1602液晶模塊采用HD44780控制器,hd44780具有簡單而功能較強的指令集,可以實現(xiàn)字符移動,閃爍等功能,LM016L與單片機MCU通訊可采用8位或4位并行傳輸兩種方式,hd44780控制器由兩個8位寄存器,指令寄存器(IR)和數(shù)據(jù)寄存器(DR)忙標(biāo)志(BF),顯示數(shù)RAM(DDRAM),字符發(fā)生器ROMA(CGOROM)字符發(fā)生器RAM(CGRAM),地址計數(shù)器RAM(AC)。IR用于寄存指令碼,只能寫入不能讀出,DR用于寄存數(shù)據(jù),數(shù)據(jù)由內(nèi)部操作自動寫入DDRAM和CGRAM,或者暫存從DDRAM和CGRAM讀出的數(shù)據(jù),BF為1時,液晶模塊處于內(nèi)部模式,不響應(yīng)外部操作指令和接受數(shù)據(jù),DDTAM用來存儲顯示的字符,能存儲80個字符碼,CGROM由8位字符碼生成5*7點陣字符160中和5*10點陣字符32種.8位字符編碼和字符的對應(yīng)關(guān)系, CGRAM是為用戶編寫特殊字符留用的,它的容量僅64字節(jié),可以自定義8個5*7點陣字符或者4個5*10點陣字符,AC可以存儲DDRAM和CGRAM的地址,如果地址碼隨指令寫入IR,則IR自動把地址碼裝入AC,同時選擇DDRAM或CGRAM,LCD1602液晶模塊的引腳圖如圖3.4所示。
圖3.4 LCD1602引腳圖
液晶寄存器選擇控制如表3.1。
表3.1寄存器選擇控制
| | |
| | |
| | 讀busy flag(DB7),以及讀取位址計數(shù)器(DB0~DB6)值 |
| | |
| | 從數(shù)據(jù)寄存器讀取數(shù)據(jù) |
3.2.3液晶顯示部分與STC89C52的接口
如圖3.5所示。用STC89C52的P0口作為數(shù)據(jù)線,用P1.2、P1.1、P1.0分別作為LCD的EN、R/W、RS。其中EN是下降沿觸發(fā)的片選信號,R/W是讀寫信號,RS是寄存器選擇信號本模塊設(shè)計要點如下:顯示模塊初始化:首先清屏,再設(shè)置接口數(shù)據(jù)位為8位,顯示行數(shù)為1行,字型為5×7點陣,然后設(shè)置為整體顯示,取消光標(biāo)和字體閃爍,最后設(shè)置為正向增量方式且不移位[10]。向LCD的顯示緩沖區(qū)中送字符,程序中采用2個字符數(shù)組,一個顯示字符,另一個顯示電壓數(shù)據(jù),要顯示的字符或數(shù)據(jù)被送到相應(yīng)的數(shù)組中,完成后再統(tǒng)一顯示.首先取一個要顯示的字符或數(shù)據(jù)送到LCD的顯示緩沖區(qū),程序延時2.5ms,判斷是否夠顯示的個數(shù),不夠則地址加一取下一個要顯示的字符或數(shù)據(jù)。
圖3.5 LCD1602與STC89C52的引腳連接圖
3.3信號采集電路設(shè)計
此部分電路的功能是由傳感器將脈搏信號轉(zhuǎn)換為電信號,一般為幾十毫伏,必須加以放大,以達到整形電路所需的電壓,一般為幾伏。放大后的信號波形是不規(guī)則的脈沖信號,因此必須加以濾波整形,整形電路的輸出電壓應(yīng)滿足計數(shù)器的要求。選擇電路:所選放大整形電路框圖如圖3.8所示。
圖3.8 放大整形電路框圖
3.4.1傳感器簡介
傳感器采用了紅外光電轉(zhuǎn)換器,作用是通過紅外光照射人的手指的血脈流動情況,把脈搏跳動轉(zhuǎn)換為電信號,其原理電路如圖3.9所示。
圖3.9 傳感器信號調(diào)節(jié)原理電路
如圖3.9中,紅外管VD采用ST188。用+5V電源供電,R1取150Ω,R2取33kΩ,當(dāng)人把手指放在發(fā)光二極管和光電二極管之間的時候,光電二極管接收到的信號會隨人脈搏強度的變化而變化[11]。
3.4.2濾波電路
圖3.10 放大濾波電路
圖3.10為脈搏計的放大濾波信號,由于脈搏信號輸出的信號十分微弱,一般在uV級別,除此外輸出的信號一般會伴隨很大的噪聲干擾,因此在這里用LM358搭建起一個放大和濾波電路。
3.4.3放大整形電路
經(jīng)過放大濾波后的脈搏信號仍是不規(guī)則的脈沖信號,且有低頻干擾,仍不滿足計數(shù)器的要求,必須采用整形電路,這里選用了滯回電壓比較器,如圖3.11所示,其目的是為了提高抗干擾能力。集成運放采用了LM358,除此外LM358還接上了一個LED用作指示脈搏跳動的狀態(tài)。
圖3.11波形整形電路
第四章 系統(tǒng)軟件設(shè)計
4.1系統(tǒng)軟件總體設(shè)計
圖4.1系統(tǒng)流程圖
主程序流程圖如圖4.1所示,單片機上電后先進行初始化,清楚一些參數(shù)的初值,然后等待用戶按下對應(yīng)的按鍵并進入對應(yīng)的功能,當(dāng)用戶按下測量按鍵的時候流程如圖4.1(c)所示,單片機通過定時15s測量人體的脈搏次數(shù)流程如圖4.1(b)所示,然后再換算出對應(yīng)的真實的脈搏次數(shù)再在液晶屏幕上顯示流程如圖4.1(a)所示,當(dāng)用戶按下設(shè)置脈搏范圍設(shè)定按鍵后,單片機根據(jù)用戶按下的按鍵進行增加或減少范圍。
首先先調(diào)用液晶自定義的字庫,設(shè)置好DDRAM地址后在第一行顯示,根據(jù)程序中的數(shù)據(jù)設(shè)置顯示數(shù)據(jù)的首地址并設(shè)置循環(huán)量,在循環(huán)過程中不斷的取字符代碼直到終止,第二行的顯示過程同一行的顯示過程一樣,兩行顯示完畢后便結(jié)束子程序,如圖4.2所示[15]。
圖4.2 LCD1602初始化子函數(shù)流程圖
4.2程序設(shè)計原理
軟件任務(wù)分析和硬件電路設(shè)計結(jié)合進行,哪些功能由硬件完成,哪些任務(wù)由軟件完成,在硬件電路設(shè)計基本定型后,也就基本上決定下來了。
軟件任務(wù)分析環(huán)節(jié)是為軟件設(shè)計做一個總體規(guī)劃。從軟件的功能來看可分為兩大類:一類是執(zhí)行軟件,它能完成各種實質(zhì)性的功能,如測量,計算,顯示,打印,輸出控制和通信等,另一類是監(jiān)控軟件,它是專門用來協(xié)調(diào)各執(zhí)行模塊和操作者的關(guān)系,在系統(tǒng)軟件中充當(dāng)組織調(diào)度角色的軟件。這兩類軟件的設(shè)計方法各有特色,執(zhí)行軟件的設(shè)計偏重算法效率,與硬件關(guān)系密切,千變?nèi)f化。
軟件任務(wù)分析時,應(yīng)將各執(zhí)行模塊一一列出,并為每一個執(zhí)行模塊進行功能定義和接口定義(輸入輸出定義)。在各執(zhí)行模塊進行定義時,將要牽扯到的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型問題也一并規(guī)劃好。
各執(zhí)行模塊規(guī)劃好后,就可以監(jiān)控程序了。首先根據(jù)系統(tǒng)功能和鍵盤設(shè)置選擇一種最適合的監(jiān)控程序結(jié)構(gòu)。相對來講,執(zhí)行模塊任務(wù)明確單純,比較容易編程,而監(jiān)控程序較易出問題。這如同當(dāng)一名操作工人比較容易,而當(dāng)一個廠長就比較難了。
軟件任務(wù)分析的另一個內(nèi)容是如何安排監(jiān)控軟件和各執(zhí)行模塊。整個系統(tǒng)軟件可分為后臺程序(背景程序)和前臺程序。后臺程序指主程序及其調(diào)用的子程序,這類程序?qū)崟r性要求不是太高,延誤幾十ms甚至幾百ms也沒關(guān)系,故通常將監(jiān)控程序(鍵盤解釋程序),顯示程序和打印程序等與操作者打交道的程序放在后臺程序中執(zhí)行;而前臺程序安排一些實時性要求較高的內(nèi)容,如定時系統(tǒng)和外部中斷(如掉電中斷)。也可以將全部程序均安排在前臺,后臺程序為“使系統(tǒng)進入睡眠狀態(tài)”,以利于系統(tǒng)節(jié)電和抗干擾。
第五章 系統(tǒng)調(diào)試
5.1軟件調(diào)試
基于單片機的脈搏計系統(tǒng)是多功能的數(shù)字型設(shè)計,,所以對于它的程序也較為復(fù)雜,所以在編寫程序和調(diào)試時出現(xiàn)了相對較多的問題。最后經(jīng)過多次的模塊子程序的修改,一步一步的完成,最終解決了軟件。在軟件的調(diào)試過程中主要遇到的問題如下:
問題1:燒入程序后,LCD液晶顯示閃動,而且亮度不均勻。
解決:首先對調(diào)用的延時進行逐漸修改,可以解決顯示閃動問題。其次,由于本作品使作動態(tài)掃描方式顯示的數(shù)字,動態(tài)掃描很快,人的肉眼是無法看出,但是調(diào)用的顯示程序時,如果不在反回時屏蔽掉最后的附值,則會出現(xiàn)很亮的現(xiàn)象,所以在顯示的后面加了屏蔽子令,最后解決了此問題。
問題2:當(dāng)用戶按下按鍵的時候,單片機讀取的數(shù)值跟設(shè)定的數(shù)值不對。
解決:重新檢查矩陣鍵盤電路的連接,重新建立一個新的對應(yīng)關(guān)系。
5.2硬件調(diào)試
基于單片機的脈搏計系統(tǒng)的電路較大,對于焊接方面更是不可輕視,龐大的電路系統(tǒng)中只要出于一處的錯誤,則會對檢測造成很大的不便,而且電路的交線較多,對于各種鋒利的引腳要注意處理,否則會刺破帶有包皮的導(dǎo)線,則會對電路造成短路現(xiàn)象[14]。
在本脈搏計的設(shè)計調(diào)試中遇到了很多的問題。回想這些問題只要認(rèn)真多思考都是可以避免的,以下為主要的問題:
問題1:最開始的時候以為單片機IO口直接可以驅(qū)動蜂鳴器發(fā)聲,后來調(diào)試的時候久久不能出聲音(見附錄C)。
解決:經(jīng)過查找相關(guān)資料,知道揚聲器需要三極管來驅(qū)動,后來把三極管放大器加上系統(tǒng)便可以正常工作。
問題2:開始的時候由于沒想到脈搏信號十分微弱大概在uV級別,因此沒有放大足夠的倍數(shù),單片機最后沒有檢測到脈搏的信號(見附錄C)。
解決:經(jīng)過查找相關(guān)資料,確定脈搏信號的幅值范圍后,增加放大器的放大倍數(shù)就解決問題。
5.3調(diào)試結(jié)果
1.放大倍數(shù)的增加
傳感器的輸出端經(jīng)示波器觀察有幅度很小的正弦波,但經(jīng)整形輸出后檢測到的脈沖還是很弱,在確定電路沒有問題的情況下,加強信號的放大倍數(shù),調(diào)整電阻R23和R27的阻值。
2.時鐘的調(diào)試
根據(jù)晶體振蕩頻率計算出內(nèi)部定時器的基本參數(shù),通過運行一段時間可通過秒表來校正后,看時間誤差的量,以這個量為依據(jù)改變程序中的內(nèi)部定時器基本參數(shù),就可使時鐘調(diào)準(zhǔn)確。
3.開機后無顯示
首先檢查交流電源部分,有無交流,若無則可能保險管或變壓器燒壞,如有繼續(xù)查直流有無,如無則電源已燒壞,可更換解決。
4.顯示正常但經(jīng)適當(dāng)運動后測量,脈搏次數(shù)沒有增加
可能是前置放大級有問題,可采用更換的辦法判斷并排除。
5.進人測量狀態(tài), 但測量值不穩(wěn)定
主要是光電傳感器受到電磁波等干擾,其次是損壞或有虛焊。
6.開機后顯示不正常或按鍵失靈
可查手指擺放的位置或按鍵電路,若無故障則是硬件損壞。
經(jīng)過一系列的問題查找后系統(tǒng)最終能正常工作,并完成所有的功能。
5.4誤差分析
表5.1誤差分析表
注:實際的脈搏次數(shù)以聽診器測出的脈搏次數(shù)為參考值。
表3.1列出了測量值,但存在誤差,由于傳感器和其他器件本身并非理想線性,實測數(shù)據(jù)進行了線性補償。
由均方差公式得:
=0.59
誤差分析:經(jīng)校準(zhǔn),非線性補償后,誤差以基本達到要求。
結(jié) 論
通過這次畢業(yè)設(shè)計,我學(xué)到了不少課本上沒有的知識,也鍛煉了自己的動手能力,將以前學(xué)過的零散的知識串到一起。經(jīng)過我長時間的設(shè)計及調(diào)試,本系統(tǒng)基本能實現(xiàn)基于單片機的脈搏計的所有功能。不足之處有:1.硬件的穩(wěn)定性有待進一步提高2.系統(tǒng)人性化還不足。
我的綜合設(shè)計主要涉及硬件和軟件兩方面的內(nèi)容,通過這些我的硬件和軟件開發(fā)能力都獲得了提高。首先硬件方面,基本了解了電子產(chǎn)品的開發(fā)流程和所要做的工作。基本掌握了Protel99SE原理圖的方法,并設(shè)計了一個單片機最小系統(tǒng)。通過開發(fā)板的設(shè)計和硬件搭建的過程,使我對51系單片機的接口有了更深層次的理解,熟悉了一些單片機常用的外圍電路引腳和連接方法,如LCD液晶,鍵盤等。并且我學(xué)會了分析問題解決問題的能力,加深了對所學(xué)理論知識的理解和運用。我的動手能力得到了很大的提高,創(chuàng)新意識得到了鍛煉。
致 謝
在這次課程設(shè)計的過程中,我的指導(dǎo)老師11111老師給予了我很大的幫助,提供了相關(guān)的資料,對我的課程設(shè)計作品給予了指導(dǎo)和支持。使我順利圓滿的完成了此次課稱設(shè)計設(shè)計。在此,向1111老師表示衷心的感謝!同時,也要感謝學(xué)院提供制板等設(shè)施,使我的設(shè)計得以順利完成。
古人云:預(yù)則立,不預(yù)則廢。祖先曾經(jīng)教導(dǎo)我們:一年之計在于春,一日之計在于晨。作為即將走向社會的我們又何嘗不是如此?一個沒有規(guī)劃的人生,就像一場沒有球門的足球賽,滿場亂踢;一個沒有規(guī)劃的人生,就像一葉在茫茫大海上漫無目標(biāo)的小舟,隨波飄蕩。在我們即將走向社會的時候,我們必須對自己的職業(yè)生涯進行規(guī)劃。羅素曾說:選擇職業(yè)就是選擇你自己的將來。因此我們要針對社會需要,結(jié)合自身的情況及早做好相應(yīng)準(zhǔn)備,為我們走向社會打下堅實的基礎(chǔ)。俗話說:磨刀不誤砍柴功。為適應(yīng)社會需要,促進自我發(fā)展,我們除了學(xué)好本專業(yè)外,還應(yīng)輔修相關(guān)專業(yè)知識,積極參加社會實踐活動,培養(yǎng)工作能力,努力提高綜合素質(zhì),同時努力培養(yǎng)特長,形成自身競爭優(yōu)勢。
最后,再次感謝學(xué)院給了我們機會,以及電子信息與電氣工程學(xué)院的各位老師和許多的朋友、同學(xué)在各個方面給予了我很多的幫助和支持,讓我堅持到了最后,謝謝你們!
單片機源程序如下:
- #include <reg52.h> //調(diào)用單片機頭文件
- #define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
- #define uint unsigned int //無符號整型 宏定義 變量范圍0~65535
- #include <intrins.h>
-
- sbit dq = P1^5; //18b20 IO口的定義
- sbit beep = P1^4; //蜂鳴器IO口定義
-
- bit flag_300ms ;
-
-
-
- uchar code table_num[]="0123456789abcdefg";
-
- sbit rs=P1^0; //寄存器選擇信號 H:數(shù)據(jù)寄存器 L:指令寄存器
- sbit rw=P1^1; //寄存器選擇信號 H:數(shù)據(jù)寄存器 L:指令寄存器
- sbit e =P1^2; //片選信號 下降沿觸發(fā)
-
- unsigned char i=0,timecount=0,displayOK=0,rate=0,aa=0;
- unsigned int time[6]={0};
-
-
- /***********************1ms延時函數(shù)*****************************/
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<110;j++);
- }
-
-
- /********************************************************************
- * 名稱 : delay_uint()
- * 功能 : 小延時。
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void delay_uint(uint q)
- {
- while(q--);
- }
-
- /********************************************************************
- * 名稱 : write_com(uchar com)
- * 功能 : 1602命令函數(shù)
- * 輸入 : 輸入的命令值
- * 輸出 : 無
- ***********************************************************************/
- void write_com(uchar com)
- {
- e=0;
- rs=0;
- rw=0;
- P0=com;
- delay_uint(25);
- e=1;
- delay_uint(100);
- e=0;
- }
-
- /********************************************************************
- * 名稱 : write_data(uchar dat)
- * 功能 : 1602寫數(shù)據(jù)函數(shù)
- * 輸入 : 需要寫入1602的數(shù)據(jù)
- * 輸出 : 無
- ***********************************************************************/
- void write_data(uchar dat)
- {
- e=0;
- rs=1;
- rw=1;
- P0=dat;
- delay_uint(25);
- e=1;
- delay_uint(100);
- e=0;
- }
-
- /********************************************************************
- * 名稱 : write_string(uchar hang,uchar add,uchar *p)
- * 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調(diào)用該函數(shù)如下
- write_string(1,5,"ab cd ef;")
- * 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
- * 輸出 : 無
- ***********************************************************************/
- void write_string(uchar hang,uchar add,uchar *p)
- {
- if(hang==1)
- write_com(0x80+add);
- else
- write_com(0x80+0x40+add);
- while(1)
- {
- if(*p == '\0') break;
- write_data(*p);
- p++;
- }
- }
-
- /***********************lcd1602上顯示特定的字符************************/
- void write_zifu(uchar hang,uchar add,uchar date)
- {
- if(hang==1)
- write_com(0x80+add);
- else
- write_com(0x80+0x40+add);
- write_data(date);
- }
-
- /***********************lcd1602上顯示兩位十進制數(shù)************************/
- void write_sfm3(uchar hang,uchar add,uint date)
- {
- if(hang==1)
- write_com(0x80+add);
- else
- write_com(0x80+0x40+add);
- write_data(0x30+date/100%10);
- write_data(0x30+date/10%10);
- write_data(0x30+date%10);
- }
-
- /***********************lcd1602初始化設(shè)置************************/
- void init_1602()
- {
- write_com(0x38); //
- write_com(0x0c);
- write_com(0x06);
- delay_uint(1000);
- write_string(1,0," Heart Rate ");
- write_string(2,0," 000/min ");
- }
-
- /*************定時器0初始化程序***************/
- void time_init()
- {
- EA = 1; //開總中斷
- TMOD = 0X01; //定時器0、定時器1工作方式1
- ET0 = 1; //開定時器0中斷
- TR0 = 1; //允許定時器0定時
- }
-
-
- /***********外部中斷0初始化程序****************/
- void init_int0() //外部中斷0初始化程序
- {
- EX0=1; //允許外部中斷0中斷
- EA=1; //開總中斷
- IT0 = 1; //外部中斷0負(fù)跳變中斷
- }
-
- /****************主函數(shù)***************/
- void main()
- {
- init_1602(); //1602初始化
- time_init(); //初始化定時器
- init_int0(); //外部中斷0初始化程序
- while(1)
- {
- if(displayOK==0)//如果顯示關(guān)
- {
- rate = 0;
- }
- else//如果顯示開
- {
- rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
- }
- write_sfm3(2,5,rate);
-
- delay_1ms(300);
- }
- }
-
- void int0() interrupt 0
- {
- EX0=0;//暫時關(guān)外部中斷
- if(timecount<8) //當(dāng)連續(xù)兩次檢測時間間隔小于8*50ms=400ms不處理
- {
- TR0=1;//開定時器
- }
- else
- {
- time[i]=timecount*50+TH0*0.256+TL0/1000;//算出間隔時間
- TH0 = 0x3c;
- TL0 = 0xb0; // 50ms 12M
- timecount=0;//50ms計數(shù)清零
- i++;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
論文.doc
(578.5 KB, 下載次數(shù): 45)
2018-7-4 17:48 上傳
點擊文件名下載附件