1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3576|回復(fù): 0
收起左側(cè)

基于單片機(jī)的脈搏測(cè)量?jī)x設(shè)計(jì)論文下載

[復(fù)制鏈接]
ID:365036 發(fā)表于 2018-7-4 17:49 | 顯示全部樓層 |閱讀模式
實(shí)訓(xùn)報(bào)告
題    目:基于單片機(jī)的脈搏測(cè)量?jī)x設(shè)計(jì)   
Design of Pulse Measuring Instrument Based on Single Chip            
學(xué)    院:電氣與動(dòng)力工程學(xué)院

目錄
摘要
Abstract
引言
第一章 概述
1.1 選題的背景和意義
1.2 脈搏測(cè)量?jī)x的發(fā)展與應(yīng)用
第二章 總體方案的論證與設(shè)計(jì)
2.1主控模塊的選型和論證
2.2顯示模塊的選型和論證
2.3傳感器的選型和論證
2.4系統(tǒng)整體設(shè)計(jì)概述
第三章 系統(tǒng)硬件電路設(shè)計(jì)
3.1主控模塊
3.1.1 STC89C52單片機(jī)主要特性
3.1.2 STC89C52單片機(jī)的中斷系統(tǒng)
3.1.3單片機(jī)最小系統(tǒng)設(shè)計(jì)
3.2 LCD液晶顯示器簡(jiǎn)介
3.2.1液晶原理介紹
3.2.2液晶模塊簡(jiǎn)介
3.2.3液晶顯示部分與STC89C52的接口
3.3信號(hào)采集電路設(shè)計(jì)
3.3.1傳感器簡(jiǎn)介
3.3.2濾波電路
3.3.3放大整形電路
第四章 系統(tǒng)軟件設(shè)計(jì)
4.1系統(tǒng)軟件總體設(shè)計(jì)
4.2程序設(shè)計(jì)原理
第五章 系統(tǒng)調(diào)試
5.1軟件調(diào)試
5.2硬件調(diào)試
5.3調(diào)試結(jié)果
5.4誤差分析
結(jié)論
致謝
參考文獻(xiàn)
附錄

基于單片機(jī)的脈搏測(cè)量?jī)x設(shè)計(jì)

摘要脈搏測(cè)量?jī)x在我們的日常生活中已經(jīng)得到了非常廣泛的應(yīng)用,通過(guò)觀測(cè)脈搏信號(hào),可以對(duì)人體的健康進(jìn)行檢查,通常被用于保健中心和醫(yī)院。為了提高脈搏測(cè)量?jī)x的簡(jiǎn)便性和精確度,本課題設(shè)計(jì)了一種基于51單片機(jī)的脈搏測(cè)量?jī)x。系統(tǒng)以STC89C52單片機(jī)為核心,以光電傳感器利用單片機(jī)系統(tǒng)內(nèi)部定時(shí)器來(lái)計(jì)算時(shí)間,由光電傳感器感應(yīng)產(chǎn)生信號(hào),單片機(jī)通過(guò)對(duì)信號(hào)累加得到脈搏跳動(dòng)次數(shù),時(shí)間由定時(shí)器定時(shí)而得。系統(tǒng)運(yùn)行中可以通過(guò)觀察指示燈閃爍,若均勻閃爍說(shuō)明測(cè)量值準(zhǔn)確。系統(tǒng)停止運(yùn)行時(shí),能夠顯示總的脈搏次數(shù)和時(shí)間。經(jīng)測(cè)試,系統(tǒng)工作正常,達(dá)到設(shè)計(jì)要求。

本設(shè)計(jì)利用紅外光電傳感器產(chǎn)生脈沖信號(hào),經(jīng)過(guò)放大整形后,輸入單片機(jī)內(nèi)進(jìn)行相應(yīng)的控制,從而測(cè)量出一分鐘內(nèi)的脈搏跳動(dòng)次數(shù),快捷方便。系統(tǒng)可以供用戶測(cè)量當(dāng)時(shí)的脈搏次數(shù),同時(shí)還可以設(shè)定上限次數(shù)和下限次數(shù),當(dāng)測(cè)量的范圍超過(guò)設(shè)定的范圍則驅(qū)動(dòng)蜂鳴器報(bào)警提醒,除此外用戶還可以設(shè)定每天鬧鐘提醒測(cè)量,時(shí)間可以自行設(shè)定,結(jié)果最終可以把采集到的脈搏信號(hào)顯示在LCD1602上。

引 言

脈搏測(cè)量在有脈搏時(shí)遮擋光線,無(wú)脈搏時(shí)透光強(qiáng),所采用的傳感器是紅外接收二極管和紅外發(fā)射二極管。通過(guò)觀測(cè)脈搏信號(hào),可以對(duì)人體的健康進(jìn)行檢查,通常被用于保健中心和醫(yī)院。系統(tǒng)可以供用戶測(cè)量當(dāng)時(shí)的脈搏次數(shù),同時(shí)還可以設(shè)定上限次數(shù)和下限次數(shù),當(dāng)測(cè)量的范圍超過(guò)設(shè)定的范圍則驅(qū)動(dòng)蜂鳴器報(bào)警提醒,除此外用戶還可以設(shè)定每天鬧鐘提醒測(cè)量,時(shí)間可以自行設(shè)定[1]。

從脈搏波中提取人體的生理病理信息作為臨床診斷和治療的依據(jù),歷來(lái)都受到中外醫(yī)學(xué)界的重視。系統(tǒng)以STC89C52單片機(jī)為核心,以光電傳感器利用單片機(jī)系統(tǒng)內(nèi)部定時(shí)器來(lái)計(jì)算時(shí)間,由光電傳感器感應(yīng)產(chǎn)生信號(hào),單片機(jī)通過(guò)對(duì)信號(hào)累加得到脈搏跳動(dòng)次數(shù),時(shí)間由定時(shí)器定時(shí)而得。系統(tǒng)運(yùn)行中可以通過(guò)觀察指示燈閃爍,若均勻閃爍說(shuō)明測(cè)量值準(zhǔn)確。幾乎世界上所有的民族都用過(guò)“摸脈”作為診斷疾病的手段。脈搏波所呈現(xiàn)出的形態(tài)(波形)、強(qiáng)度(波幅)、速率(波速)和節(jié)律(周期)等方面的綜合信息,在很大程度上反映出人體心血管系統(tǒng)中許多生理病理的血流特征,但人體的生物信號(hào)多屬于強(qiáng)噪聲背景下的低頻的弱信號(hào), 脈搏波信號(hào)更是低頻微弱的非電生理信號(hào), 必需經(jīng)過(guò)放大和后級(jí)濾波以滿足采集的要求。


第一章 概述

1.1 選題的背景和意義

脈搏攜帶有豐富的人體健康狀況的信息,自公元三世紀(jì)我國(guó)最早的脈學(xué)專(zhuān)著《脈經(jīng)》問(wèn)世以來(lái),脈學(xué)理論得到不斷的發(fā)展和提高。在中醫(yī)四診(望、聞、問(wèn)、切)中,脈診占有非常重要的位置。脈診是我國(guó)傳統(tǒng)醫(yī)學(xué)中最具特色的一項(xiàng)診斷方法,其歷史悠久,內(nèi)容豐富,是中醫(yī)“整體觀念”、“辨證論證”的基本精神的體現(xiàn)與應(yīng)用。脈診作為“綠色無(wú)創(chuàng)”診斷的手段和方法,得到了中外人士的關(guān)注。但由于中醫(yī)是靠手指獲取脈搏信息,雖然脈診具有簡(jiǎn)便、無(wú)創(chuàng)、無(wú)痛的特點(diǎn)易為患者接受,然而在長(zhǎng)期的醫(yī)療實(shí)踐中也暴露出一些缺陷。首先,切脈單憑醫(yī)生手指感覺(jué)辨別脈象的特征,受到感覺(jué)、經(jīng)驗(yàn)和表述的限制,并且難免存在許多主觀臆斷因素,影響了對(duì)脈象判斷的規(guī)范化;其次,這種用手指切脈的技巧很難掌握;再則,感知的脈象無(wú)法記錄和保存影響了對(duì)脈象機(jī)理的研究。脈診的這種定性化和主觀性,大大影響了其精度與可行性,成為中醫(yī)脈診應(yīng)用、發(fā)展和交流中的制約因素。為了將傳統(tǒng)的中醫(yī)藥學(xué)發(fā)揚(yáng)光大,促進(jìn)脈診的應(yīng)用和發(fā)展,必須與現(xiàn)代科技相結(jié)合,實(shí)現(xiàn)更科學(xué)、客觀的診斷[1]。

醫(yī)院的護(hù)士每天都要給住院的病人把脈記錄病人每分鐘脈搏數(shù),方法是用手按在病人腕部的動(dòng)脈上,根據(jù)脈搏的跳動(dòng)進(jìn)行計(jì)數(shù)。為了節(jié)省時(shí)間,一般不會(huì)作1分鐘的測(cè)量,通常是測(cè)量10秒鐘時(shí)間內(nèi)心跳的數(shù),再把結(jié)果乘以6即得到每分鐘的心跳數(shù),即使這樣做還是比較費(fèi)時(shí),而且精度也不高。為了提高脈搏測(cè)量的精確與速度,多種脈搏測(cè)量?jī)x被運(yùn)用到醫(yī)學(xué)上來(lái),從而開(kāi)辟了一條全新的醫(yī)學(xué)診斷方法。

早在1860年Vierordt 創(chuàng)建了第一臺(tái)杠桿式脈搏描記儀,國(guó)內(nèi)20世紀(jì)50年代初朱顏將脈搏儀引用到中醫(yī)脈診的客觀化研究方面。此后隨著機(jī)械及電子技術(shù)的發(fā)展,國(guó)內(nèi)外在研制中醫(yī)脈象儀方面進(jìn)展很快,尤其是70年代中期,國(guó)內(nèi)天津、上海、江西等地相繼成立了跨學(xué)科的脈象研究協(xié)作組,多學(xué)科共同合作促使中醫(yī)脈象研究工作進(jìn)入了一個(gè)新的境界。脈象探頭式樣很多,有單部、三部、單點(diǎn)、多點(diǎn)、剛性接觸式、軟性接觸式、氣壓式、硅杯式、液態(tài)汞、液態(tài)水、子母式等組成,脈象探頭的主要原件有應(yīng)變片、壓電晶體、單晶硅、光敏元件、PVDF壓電薄膜等,其中以單部單點(diǎn)應(yīng)變片式為最廣泛,不過(guò)近年來(lái)正在向三部多點(diǎn)式方向設(shè)計(jì)[2]。

目前脈搏測(cè)量?jī)x在多個(gè)領(lǐng)域被廣泛應(yīng)用,除了應(yīng)用于醫(yī)學(xué)領(lǐng)域,如無(wú)創(chuàng)心血管功能檢測(cè)、妊高癥檢測(cè)、中醫(yī)脈象、脈率檢測(cè)等等,商業(yè)應(yīng)用也不斷拓展,如運(yùn)動(dòng)、健身器材中的心率測(cè)試都用到了技術(shù)先進(jìn)的脈搏測(cè)量?jī)x。

1.2 脈搏測(cè)量?jī)x的發(fā)展與應(yīng)用

隨著科學(xué)技術(shù)的發(fā)展,脈搏測(cè)量技術(shù)也越來(lái)越先進(jìn),對(duì)脈搏的測(cè)量精度也越來(lái)越高,國(guó)內(nèi)外先后研制了不同類(lèi)型的脈搏測(cè)量?jī)x,而其中關(guān)鍵是對(duì)脈搏傳感器的研究。起初用于體育測(cè)量的脈搏測(cè)試集中在對(duì)接觸式傳感器的研究,利用此類(lèi)傳感器所研制的指脈、耳脈等測(cè)量?jī)x各有其優(yōu)缺點(diǎn)。指脈測(cè)量比較方便、簡(jiǎn)單,但因?yàn)槭种干系暮瓜佥^多,指夾常年使用,污染可能會(huì)使測(cè)量靈敏度下降:耳脈測(cè)量比較干凈,傳感器使用環(huán)境污染少,容易維護(hù)。但因耳脈較弱,尤其是當(dāng)季節(jié)變化時(shí),所測(cè)信號(hào)受環(huán)境溫度影響明顯,造成測(cè)量結(jié)果不準(zhǔn)確。過(guò)去在醫(yī)院臨床監(jiān)護(hù)和日常中老年保健中出現(xiàn)的日常監(jiān)護(hù)儀器,如便攜式電子血壓計(jì),可以完成脈搏的測(cè)量,但是這種便攜式電子血壓計(jì)利用微型氣泵加壓橡膠氣囊,每次測(cè)量都需要一個(gè)加壓和減壓的過(guò)程,存在體積龐大、加減壓過(guò)程會(huì)有不適、脈搏檢測(cè)的精確度低等缺點(diǎn)。

近年來(lái)國(guó)內(nèi)外致力于開(kāi)發(fā)無(wú)創(chuàng)非接觸式的傳感器,這類(lèi)傳感器的重要特征是測(cè)量的探測(cè)部分不侵入機(jī)體,不造成機(jī)體創(chuàng)傷,能夠自動(dòng)消除儀表自身系統(tǒng)的誤差,測(cè)量精度高,通常在體外,尤其是在體表間接測(cè)量人體的生理和生化參數(shù)。

其中光電式脈搏傳感器是根據(jù)光電容積法制成的脈搏傳感器,通過(guò)對(duì)手指末端透光度的監(jiān)測(cè),間接檢測(cè)出脈搏信號(hào)。具有結(jié)構(gòu)簡(jiǎn)單、無(wú)損傷、精度高、可重復(fù)使用等優(yōu)點(diǎn)。通過(guò)光電式脈搏傳感器所研制的脈搏測(cè)量?jī)x已經(jīng)應(yīng)用到臨床醫(yī)學(xué)等各個(gè)方面并收到了理想效果。

人體心室周期性的收縮和舒張導(dǎo)致主動(dòng)脈的收縮和舒張,是血流壓力以波的形式從主動(dòng)脈根部開(kāi)始沿著整個(gè)動(dòng)脈系統(tǒng)傳播,這種波成為脈搏波。從脈搏波中提取人體的心理病理信息作為臨床診斷和治療的依據(jù),歷來(lái)都受到中外醫(yī)學(xué)界的重視。脈搏波所呈現(xiàn)出的形態(tài)(波形)、強(qiáng)度(波幅)、速率(波速)和節(jié)律(周期)等方面的綜合信息,在很大程度上反映出人體心血管系統(tǒng)中許多生理病理的血流特征,因此對(duì)脈搏波采集和處理具有很高的醫(yī)學(xué)價(jià)值和應(yīng)用前景。但人體的生物信號(hào)多屬于強(qiáng)噪聲背景下的低頻的弱信號(hào), 脈搏波信號(hào)更是低頻微弱的非電生理信號(hào),因此必需經(jīng)過(guò)放大和后級(jí)濾波以滿足采集的要求。


第二章 總體方案的論證與設(shè)計(jì)

2.1主控模塊的選型和論證

方案一:

采用MSP430系列單片機(jī),該單片機(jī)是TI公司1996年開(kāi)始推向市場(chǎng)的一種16位超低功耗的混合信號(hào)處理器。其內(nèi)部集成了很多模擬電路、數(shù)字電路和微處理器,提供強(qiáng)大的功能。不過(guò)該芯片昂貴不適合一般的設(shè)計(jì)開(kāi)發(fā)[3]。

方案二

采用51系列的單片機(jī),該單片機(jī)是一個(gè)高可靠性,超低價(jià),無(wú)法解密,高性能的8位單片機(jī),32個(gè)IO口,且STC系列的單片機(jī)可以在線編程、調(diào)試,方便地實(shí)現(xiàn)程序的下載與整機(jī)的調(diào)試。

因此選用方案二中的51系列單片機(jī)作為主控芯片。

2.2顯示模塊的選型和論證

方案一:

采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對(duì)于顯示文字比較合適,如采用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對(duì)較高,所以不用此種作為顯示。

方案二:

采用LED數(shù)碼管動(dòng)態(tài)掃描,LED數(shù)碼管價(jià)格雖適中,對(duì)于顯示數(shù)字也最合適,而且采用動(dòng)態(tài)掃描法與單片機(jī)連接時(shí),占用單片機(jī)口線少。但是由于數(shù)碼管動(dòng)態(tài)掃描需要借助74LS164移位寄存器進(jìn)行移位,該芯片在電路調(diào)試時(shí)往往有很多障礙,所以不采用LED數(shù)碼管作為顯示。

方案三:

采用LCD液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量文字,圖形,顯示多樣,清晰可見(jiàn),對(duì)于本設(shè)計(jì)而言一個(gè)LCD1602的液晶屏即可,價(jià)格也還能接受,需要的借口線較多,但會(huì)給調(diào)試帶來(lái)諸多方便。

所以本設(shè)計(jì)中方案三中的LCD1602液顯示屏作為顯示模塊。

2.3傳感器的選型和論證

方案一:

采用壓電傳感器用來(lái)提取人的脈搏信號(hào),壓電傳感器是利用某些電介質(zhì)受力后產(chǎn)生的壓電效應(yīng)制成的傳感器。所謂壓電效應(yīng)是指某些電介質(zhì)在受到某一方向的外力作用而發(fā)生形變(包括彎曲和伸縮形變)時(shí),由于內(nèi)部電荷的極化現(xiàn)象,會(huì)在其表面產(chǎn)生電荷的現(xiàn)象。通過(guò)此現(xiàn)象可以提取出人的脈搏信號(hào)。

方案二:

采用光電傳感器提取人體脈搏信號(hào),授予手指組織可以分成皮膚、肌肉、骨骼等非血液組織和血液組織,其中非血液組織的光吸收量是恒定的,而在血液中,靜脈血的搏動(dòng)相對(duì)動(dòng)脈血是十分微弱的,可以忽略,因此可以認(rèn)為光透過(guò)手指后的變化僅由動(dòng)脈血的充盈而引起,那么在恒定波長(zhǎng)的光源的照射下,通過(guò)檢測(cè)透過(guò)手指的光強(qiáng)將可以間接測(cè)量到人體的脈搏信號(hào)[4]。

由于光電傳感器較壓電傳感器容易在一般的地方可以買(mǎi)得到,因此這里選用光電傳感器來(lái)提取人體脈搏信號(hào)。

2.5系統(tǒng)整體設(shè)計(jì)概述


系統(tǒng)總體設(shè)計(jì)由STC89C52、按鍵、LCD1602、光電傳感器、時(shí)鐘模塊、運(yùn)放等構(gòu)成,如圖2.1所示,系統(tǒng)設(shè)有四個(gè)按鍵,可以設(shè)置上下限脈搏數(shù),當(dāng)超過(guò)范圍的時(shí)候單片機(jī)會(huì)驅(qū)動(dòng)蜂鳴器發(fā)響,脈搏測(cè)量的時(shí)候需要人把手輕輕的按在光電傳感器上面,由于人脈搏跳動(dòng)的時(shí)候,血液的透光性不一樣會(huì)導(dǎo)致接收器那邊接收的信號(hào)強(qiáng)弱不一樣,間接的把人脈搏信號(hào)傳回,通過(guò)運(yùn)放對(duì)其進(jìn)行放大、整形后連接到單片機(jī)的IO口,單片機(jī)利用外部中斷對(duì)其進(jìn)行計(jì)數(shù),最終換算成人一分鐘脈搏的跳動(dòng)次數(shù),最終顯示在液晶屏上。


第三章 系統(tǒng)硬件電路設(shè)計(jì)

3.1主控模塊

主控模塊模塊在整個(gè)系統(tǒng)中起著統(tǒng)籌的作用,需要檢測(cè)鍵盤(pán)等各種參數(shù),同時(shí)驅(qū)動(dòng)液晶顯示相關(guān)參數(shù),在這里我們選用了51系列單片機(jī)中的STC89C52單片機(jī)作為系統(tǒng)的主控芯片。

51系列單片機(jī)最初是由Intel 公司開(kāi)發(fā)設(shè)計(jì)的,但后來(lái)Intel 公司把51 核的設(shè)計(jì)方案賣(mài)給了幾家大的電子設(shè)計(jì)生產(chǎn)商,譬如SST、Philip、Atmel 等大公司。因此市面上出現(xiàn)了各式各樣的均以51 為內(nèi)核的單片機(jī)[6]。這些各大電子生產(chǎn)商推出的單片機(jī)都兼容51 指令、并在51 的基礎(chǔ)上擴(kuò)展一些功能而內(nèi)部結(jié)構(gòu)是與51一致的。

STC89C52有40個(gè)引腳,4個(gè)8位并行I/O口,1個(gè)全雙工異步串行口,同時(shí)內(nèi)含5個(gè)中斷源,2個(gè)優(yōu)先級(jí),2個(gè)16位定時(shí)/計(jì)數(shù)器。STC89C52的存儲(chǔ)器系統(tǒng)由4K的程序存儲(chǔ)器(掩膜ROM),和128B的數(shù)據(jù)存儲(chǔ)器(RAM)組成。

STC89C52單片機(jī)的基本組成框圖見(jiàn)圖3.1所示。
圖3.1 STC89C52單片機(jī)結(jié)構(gòu)圖

3.1.3單片機(jī)最小系統(tǒng)設(shè)計(jì)

圖3.3 單片機(jī)最小系統(tǒng)電路圖

              圖3.3為單片機(jī)最小系統(tǒng)電路圖,單片機(jī)最小系統(tǒng)有單片機(jī)、時(shí)鐘電路、復(fù)位電路組成,時(shí)鐘電路選用了12MHZ的晶振提供時(shí)鐘,作用為給單片機(jī)提供一個(gè)時(shí)間基準(zhǔn),其中執(zhí)行一條基本指令需要的時(shí)間為一個(gè)機(jī)器周期,單片機(jī)的復(fù)位電路,按下復(fù)位按鍵之后可以使單片機(jī)進(jìn)入剛上電的起始狀態(tài)。圖中10K排阻為P0口的上拉電阻,由于P0口跟其他IO結(jié)構(gòu)不一樣為漏極開(kāi)路的結(jié)構(gòu),因此要加上拉電阻才能正常使用。

3.2 LCD液晶顯示器簡(jiǎn)介

由于本設(shè)計(jì)中要求顯示界面顯示一些參數(shù),因此這里選用了LCD1602作為界面顯示,可以把一些相關(guān)的參數(shù)進(jìn)行顯示。

3.2.1 液晶原理介紹

液晶顯示器(LCD)英文全稱為L(zhǎng)iquid Crystal Display,它一種是采用了液晶控制透光度技術(shù)來(lái)實(shí)現(xiàn)色彩的顯示器。和CRT顯示器相比,LCD的優(yōu)點(diǎn)是很明顯的。由于通過(guò)控制是否透光來(lái)控制亮和暗,當(dāng)色彩不變時(shí),液晶也保持不變,這樣就無(wú)須考慮刷新率的問(wèn)題。

顯示接口用來(lái)顯示系統(tǒng)的狀態(tài),命令或采集的電壓數(shù)據(jù)。本系統(tǒng)顯示部分用的是LCD液晶模塊,采用一個(gè)16×2的字符型液晶顯示模塊。

點(diǎn)陣圖形式液晶由 M 行×N 列個(gè)顯示單元組成,假設(shè) LCD 顯示屏有64行,每行有 128列,每 8列對(duì)應(yīng) 1 個(gè)字節(jié)的 8 個(gè)位,即每行由 16 字節(jié),共 16×8=128個(gè)點(diǎn)組成,屏上 64×16 個(gè)顯示單元和顯示 RAM 區(qū) 1024 個(gè)字節(jié)相對(duì)應(yīng),每一字節(jié)的內(nèi)容和屏上相應(yīng)位置的亮暗對(duì)應(yīng)。一個(gè)字符由 6×8 或 8×8點(diǎn)陣組成,即要找到和屏上某幾個(gè)位置對(duì)應(yīng)的顯示 RAM區(qū)的 8 個(gè)字節(jié),并且要使每個(gè)字節(jié)的不同的位為‘1’,其它的為‘0’,為‘1’的點(diǎn)亮,為‘0’的點(diǎn)暗,這樣一來(lái)就組成某個(gè)字符。但對(duì)于內(nèi)帶字符發(fā)生器的控制器來(lái)說(shuō),顯示字符就比較簡(jiǎn)單了,可讓控制器工作在文本方式,根據(jù)在LCD 上開(kāi)始顯示的行列號(hào)及每行的列數(shù)找出顯示 RAM對(duì)應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對(duì)應(yīng)的代碼即可。

3.2.2液晶模塊簡(jiǎn)介

LCD1602液晶模塊采用HD44780控制器,hd44780具有簡(jiǎn)單而功能較強(qiáng)的指令集,可以實(shí)現(xiàn)字符移動(dòng),閃爍等功能,LM016L與單片機(jī)MCU通訊可采用8位或4位并行傳輸兩種方式,hd44780控制器由兩個(gè)8位寄存器,指令寄存器(IR)和數(shù)據(jù)寄存器(DR)忙標(biāo)志(BF),顯示數(shù)RAM(DDRAM),字符發(fā)生器ROMA(CGOROM)字符發(fā)生器RAM(CGRAM),地址計(jì)數(shù)器RAM(AC)。IR用于寄存指令碼,只能寫(xiě)入不能讀出,DR用于寄存數(shù)據(jù),數(shù)據(jù)由內(nèi)部操作自動(dòng)寫(xiě)入DDRAM和CGRAM,或者暫存從DDRAM和CGRAM讀出的數(shù)據(jù),BF為1時(shí),液晶模塊處于內(nèi)部模式,不響應(yīng)外部操作指令和接受數(shù)據(jù),DDTAM用來(lái)存儲(chǔ)顯示的字符,能存儲(chǔ)80個(gè)字符碼,CGROM由8位字符碼生成5*7點(diǎn)陣字符160中和5*10點(diǎn)陣字符32種.8位字符編碼和字符的對(duì)應(yīng)關(guān)系, CGRAM是為用戶編寫(xiě)特殊字符留用的,它的容量?jī)H64字節(jié),可以自定義8個(gè)5*7點(diǎn)陣字符或者4個(gè)5*10點(diǎn)陣字符,AC可以存儲(chǔ)DDRAM和CGRAM的地址,如果地址碼隨指令寫(xiě)入IR,則IR自動(dòng)把地址碼裝入AC,同時(shí)選擇DDRAM或CGRAM,LCD1602液晶模塊的引腳圖如圖3.4所示。

圖3.4 LCD1602引腳圖

液晶寄存器選擇控制如表3.1。

表3.1寄存器選擇控制
RS
R/W
操作說(shuō)明
0
0
寫(xiě)入指令寄存器(清除屏等)
0
1
讀busy flag(DB7),以及讀取位址計(jì)數(shù)器(DB0~DB6)值
1
0
寫(xiě)入數(shù)據(jù)寄存器(顯示各字型等)
1
1
從數(shù)據(jù)寄存器讀取數(shù)據(jù)

3.2.3液晶顯示部分與STC89C52的接口

如圖3.5所示。用STC89C52的P0口作為數(shù)據(jù)線,用P1.2、P1.1、P1.0分別作為L(zhǎng)CD的EN、R/W、RS。其中EN是下降沿觸發(fā)的片選信號(hào),R/W是讀寫(xiě)信號(hào),RS是寄存器選擇信號(hào)本模塊設(shè)計(jì)要點(diǎn)如下:顯示模塊初始化:首先清屏,再設(shè)置接口數(shù)據(jù)位為8位,顯示行數(shù)為1行,字型為5×7點(diǎn)陣,然后設(shè)置為整體顯示,取消光標(biāo)和字體閃爍,最后設(shè)置為正向增量方式且不移位[10]。向LCD的顯示緩沖區(qū)中送字符,程序中采用2個(gè)字符數(shù)組,一個(gè)顯示字符,另一個(gè)顯示電壓數(shù)據(jù),要顯示的字符或數(shù)據(jù)被送到相應(yīng)的數(shù)組中,完成后再統(tǒng)一顯示.首先取一個(gè)要顯示的字符或數(shù)據(jù)送到LCD的顯示緩沖區(qū),程序延時(shí)2.5ms,判斷是否夠顯示的個(gè)數(shù),不夠則地址加一取下一個(gè)要顯示的字符或數(shù)據(jù)。

圖3.5 LCD1602與STC89C52的引腳連接圖
3.3信號(hào)采集電路設(shè)計(jì)

此部分電路的功能是由傳感器將脈搏信號(hào)轉(zhuǎn)換為電信號(hào),一般為幾十毫伏,必須加以放大,以達(dá)到整形電路所需的電壓,一般為幾伏。放大后的信號(hào)波形是不規(guī)則的脈沖信號(hào),因此必須加以濾波整形,整形電路的輸出電壓應(yīng)滿足計(jì)數(shù)器的要求。選擇電路:所選放大整形電路框圖如圖3.8所示。

圖3.8 放大整形電路框圖

3.4.1傳感器簡(jiǎn)介

傳感器采用了紅外光電轉(zhuǎn)換器,作用是通過(guò)紅外光照射人的手指的血脈流動(dòng)情況,把脈搏跳動(dòng)轉(zhuǎn)換為電信號(hào),其原理電路如圖3.9所示。

圖3.9 傳感器信號(hào)調(diào)節(jié)原理電路            

如圖3.9中,紅外管VD采用ST188。用+5V電源供電,R1取150Ω,R2取33kΩ,當(dāng)人把手指放在發(fā)光二極管和光電二極管之間的時(shí)候,光電二極管接收到的信號(hào)會(huì)隨人脈搏強(qiáng)度的變化而變化[11]。

3.4.2濾波電路

圖3.10 放大濾波電路

圖3.10為脈搏計(jì)的放大濾波信號(hào),由于脈搏信號(hào)輸出的信號(hào)十分微弱,一般在uV級(jí)別,除此外輸出的信號(hào)一般會(huì)伴隨很大的噪聲干擾,因此在這里用LM358搭建起一個(gè)放大和濾波電路。

3.4.3放大整形電路

經(jīng)過(guò)放大濾波后的脈搏信號(hào)仍是不規(guī)則的脈沖信號(hào),且有低頻干擾,仍不滿足計(jì)數(shù)器的要求,必須采用整形電路,這里選用了滯回電壓比較器,如圖3.11所示,其目的是為了提高抗干擾能力。集成運(yùn)放采用了LM358,除此外LM358還接上了一個(gè)LED用作指示脈搏跳動(dòng)的狀態(tài)。

              
圖3.11波形整形電路

第四章 系統(tǒng)軟件設(shè)計(jì)

4.1系統(tǒng)軟件總體設(shè)計(jì)
圖4.1系統(tǒng)流程圖

主程序流程圖如圖4.1所示,單片機(jī)上電后先進(jìn)行初始化,清楚一些參數(shù)的初值,然后等待用戶按下對(duì)應(yīng)的按鍵并進(jìn)入對(duì)應(yīng)的功能,當(dāng)用戶按下測(cè)量按鍵的時(shí)候流程如圖4.1(c)所示,單片機(jī)通過(guò)定時(shí)15s測(cè)量人體的脈搏次數(shù)流程如圖4.1(b)所示,然后再換算出對(duì)應(yīng)的真實(shí)的脈搏次數(shù)再在液晶屏幕上顯示流程如圖4.1(a)所示,當(dāng)用戶按下設(shè)置脈搏范圍設(shè)定按鍵后,單片機(jī)根據(jù)用戶按下的按鍵進(jìn)行增加或減少范圍。

首先先調(diào)用液晶自定義的字庫(kù),設(shè)置好DDRAM地址后在第一行顯示,根據(jù)程序中的數(shù)據(jù)設(shè)置顯示數(shù)據(jù)的首地址并設(shè)置循環(huán)量,在循環(huán)過(guò)程中不斷的取字符代碼直到終止,第二行的顯示過(guò)程同一行的顯示過(guò)程一樣,兩行顯示完畢后便結(jié)束子程序,如圖4.2所示[15]。

圖4.2 LCD1602初始化子函數(shù)流程圖
4.2程序設(shè)計(jì)原理            

軟件任務(wù)分析和硬件電路設(shè)計(jì)結(jié)合進(jìn)行,哪些功能由硬件完成,哪些任務(wù)由軟件完成,在硬件電路設(shè)計(jì)基本定型后,也就基本上決定下來(lái)了。

軟件任務(wù)分析環(huán)節(jié)是為軟件設(shè)計(jì)做一個(gè)總體規(guī)劃。從軟件的功能來(lái)看可分為兩大類(lèi):一類(lèi)是執(zhí)行軟件,它能完成各種實(shí)質(zhì)性的功能,如測(cè)量,計(jì)算,顯示,打印,輸出控制和通信等,另一類(lèi)是監(jiān)控軟件,它是專(zhuān)門(mén)用來(lái)協(xié)調(diào)各執(zhí)行模塊和操作者的關(guān)系,在系統(tǒng)軟件中充當(dāng)組織調(diào)度角色的軟件。這兩類(lèi)軟件的設(shè)計(jì)方法各有特色,執(zhí)行軟件的設(shè)計(jì)偏重算法效率,與硬件關(guān)系密切,千變?nèi)f化。

軟件任務(wù)分析時(shí),應(yīng)將各執(zhí)行模塊一一列出,并為每一個(gè)執(zhí)行模塊進(jìn)行功能定義和接口定義(輸入輸出定義)。在各執(zhí)行模塊進(jìn)行定義時(shí),將要牽扯到的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類(lèi)型問(wèn)題也一并規(guī)劃好。

各執(zhí)行模塊規(guī)劃好后,就可以監(jiān)控程序了。首先根據(jù)系統(tǒng)功能和鍵盤(pán)設(shè)置選擇一種最適合的監(jiān)控程序結(jié)構(gòu)。相對(duì)來(lái)講,執(zhí)行模塊任務(wù)明確單純,比較容易編程,而監(jiān)控程序較易出問(wèn)題。這如同當(dāng)一名操作工人比較容易,而當(dāng)一個(gè)廠長(zhǎng)就比較難了。

軟件任務(wù)分析的另一個(gè)內(nèi)容是如何安排監(jiān)控軟件和各執(zhí)行模塊。整個(gè)系統(tǒng)軟件可分為后臺(tái)程序(背景程序)和前臺(tái)程序。后臺(tái)程序指主程序及其調(diào)用的子程序,這類(lèi)程序?qū)?shí)時(shí)性要求不是太高,延誤幾十ms甚至幾百ms也沒(méi)關(guān)系,故通常將監(jiān)控程序(鍵盤(pán)解釋程序),顯示程序和打印程序等與操作者打交道的程序放在后臺(tái)程序中執(zhí)行;而前臺(tái)程序安排一些實(shí)時(shí)性要求較高的內(nèi)容,如定時(shí)系統(tǒng)和外部中斷(如掉電中斷)。也可以將全部程序均安排在前臺(tái),后臺(tái)程序?yàn)椤笆瓜到y(tǒng)進(jìn)入睡眠狀態(tài)”,以利于系統(tǒng)節(jié)電和抗干擾。


第五章 系統(tǒng)調(diào)試

5.1軟件調(diào)試

基于單片機(jī)的脈搏計(jì)系統(tǒng)是多功能的數(shù)字型設(shè)計(jì),,所以對(duì)于它的程序也較為復(fù)雜,所以在編寫(xiě)程序和調(diào)試時(shí)出現(xiàn)了相對(duì)較多的問(wèn)題。最后經(jīng)過(guò)多次的模塊子程序的修改,一步一步的完成,最終解決了軟件。在軟件的調(diào)試過(guò)程中主要遇到的問(wèn)題如下:

問(wèn)題1:燒入程序后,LCD液晶顯示閃動(dòng),而且亮度不均勻。

解決:首先對(duì)調(diào)用的延時(shí)進(jìn)行逐漸修改,可以解決顯示閃動(dòng)問(wèn)題。其次,由于本作品使作動(dòng)態(tài)掃描方式顯示的數(shù)字,動(dòng)態(tài)掃描很快,人的肉眼是無(wú)法看出,但是調(diào)用的顯示程序時(shí),如果不在反回時(shí)屏蔽掉最后的附值,則會(huì)出現(xiàn)很亮的現(xiàn)象,所以在顯示的后面加了屏蔽子令,最后解決了此問(wèn)題。

問(wèn)題2:當(dāng)用戶按下按鍵的時(shí)候,單片機(jī)讀取的數(shù)值跟設(shè)定的數(shù)值不對(duì)。

解決:重新檢查矩陣鍵盤(pán)電路的連接,重新建立一個(gè)新的對(duì)應(yīng)關(guān)系。

5.2硬件調(diào)試

基于單片機(jī)的脈搏計(jì)系統(tǒng)的電路較大,對(duì)于焊接方面更是不可輕視,龐大的電路系統(tǒng)中只要出于一處的錯(cuò)誤,則會(huì)對(duì)檢測(cè)造成很大的不便,而且電路的交線較多,對(duì)于各種鋒利的引腳要注意處理,否則會(huì)刺破帶有包皮的導(dǎo)線,則會(huì)對(duì)電路造成短路現(xiàn)象[14]。

在本脈搏計(jì)的設(shè)計(jì)調(diào)試中遇到了很多的問(wèn)題。回想這些問(wèn)題只要認(rèn)真多思考都是可以避免的,以下為主要的問(wèn)題:

問(wèn)題1:最開(kāi)始的時(shí)候以為單片機(jī)IO口直接可以驅(qū)動(dòng)蜂鳴器發(fā)聲,后來(lái)調(diào)試的時(shí)候久久不能出聲音(見(jiàn)附錄C)。

解決:經(jīng)過(guò)查找相關(guān)資料,知道揚(yáng)聲器需要三極管來(lái)驅(qū)動(dòng),后來(lái)把三極管放大器加上系統(tǒng)便可以正常工作。

問(wèn)題2:開(kāi)始的時(shí)候由于沒(méi)想到脈搏信號(hào)十分微弱大概在uV級(jí)別,因此沒(méi)有放大足夠的倍數(shù),單片機(jī)最后沒(méi)有檢測(cè)到脈搏的信號(hào)(見(jiàn)附錄C)。

解決:經(jīng)過(guò)查找相關(guān)資料,確定脈搏信號(hào)的幅值范圍后,增加放大器的放大倍數(shù)就解決問(wèn)題。

5.3調(diào)試結(jié)果

1.放大倍數(shù)的增加

   傳感器的輸出端經(jīng)示波器觀察有幅度很小的正弦波,但經(jīng)整形輸出后檢測(cè)到的脈沖還是很弱,在確定電路沒(méi)有問(wèn)題的情況下,加強(qiáng)信號(hào)的放大倍數(shù),調(diào)整電阻R23和R27的阻值。

2.時(shí)鐘的調(diào)試

根據(jù)晶體振蕩頻率計(jì)算出內(nèi)部定時(shí)器的基本參數(shù),通過(guò)運(yùn)行一段時(shí)間可通過(guò)秒表來(lái)校正后,看時(shí)間誤差的量,以這個(gè)量為依據(jù)改變程序中的內(nèi)部定時(shí)器基本參數(shù),就可使時(shí)鐘調(diào)準(zhǔn)確。

3.開(kāi)機(jī)后無(wú)顯示

首先檢查交流電源部分,有無(wú)交流,若無(wú)則可能保險(xiǎn)管或變壓器燒壞,如有繼續(xù)查直流有無(wú),如無(wú)則電源已燒壞,可更換解決。

4.顯示正常但經(jīng)適當(dāng)運(yùn)動(dòng)后測(cè)量,脈搏次數(shù)沒(méi)有增加

可能是前置放大級(jí)有問(wèn)題,可采用更換的辦法判斷并排除。

5.進(jìn)人測(cè)量狀態(tài), 但測(cè)量值不穩(wěn)定

主要是光電傳感器受到電磁波等干擾,其次是損壞或有虛焊。

6.開(kāi)機(jī)后顯示不正常或按鍵失靈

可查手指擺放的位置或按鍵電路,若無(wú)故障則是硬件損壞。

經(jīng)過(guò)一系列的問(wèn)題查找后系統(tǒng)最終能正常工作,并完成所有的功能。

5.4誤差分析
表5.1誤差分析表
實(shí)際的脈搏次數(shù)
測(cè)量得出脈搏次數(shù)1
測(cè)量得出脈搏次數(shù)2
測(cè)量得出脈搏次數(shù)3
測(cè)量得出脈搏次數(shù)4
測(cè)量得出脈搏次數(shù)5
65
64
64
63
65
63
72
70
71
69
69
70
76
76
75
75
74
73
81
80
80
79
81
80
85
83
83
85
82
84

注:實(shí)際的脈搏次數(shù)以聽(tīng)診器測(cè)出的脈搏次數(shù)為參考值。

表3.1列出了測(cè)量值,但存在誤差,由于傳感器和其他器件本身并非理想線性,實(shí)測(cè)數(shù)據(jù)進(jìn)行了線性補(bǔ)償。

由均方差公式得:

=0.59

誤差分析:經(jīng)校準(zhǔn),非線性補(bǔ)償后,誤差以基本達(dá)到要求。


結(jié)  論

通過(guò)這次畢業(yè)設(shè)計(jì),我學(xué)到了不少課本上沒(méi)有的知識(shí),也鍛煉了自己的動(dòng)手能力,將以前學(xué)過(guò)的零散的知識(shí)串到一起。經(jīng)過(guò)我長(zhǎng)時(shí)間的設(shè)計(jì)及調(diào)試,本系統(tǒng)基本能實(shí)現(xiàn)基于單片機(jī)的脈搏計(jì)的所有功能。不足之處有:1.硬件的穩(wěn)定性有待進(jìn)一步提高2.系統(tǒng)人性化還不足。

我的綜合設(shè)計(jì)主要涉及硬件和軟件兩方面的內(nèi)容,通過(guò)這些我的硬件和軟件開(kāi)發(fā)能力都獲得了提高。首先硬件方面,基本了解了電子產(chǎn)品的開(kāi)發(fā)流程和所要做的工作。基本掌握了Protel99SE原理圖的方法,并設(shè)計(jì)了一個(gè)單片機(jī)最小系統(tǒng)。通過(guò)開(kāi)發(fā)板的設(shè)計(jì)和硬件搭建的過(guò)程,使我對(duì)51系單片機(jī)的接口有了更深層次的理解,熟悉了一些單片機(jī)常用的外圍電路引腳和連接方法,如LCD液晶,鍵盤(pán)等。并且我學(xué)會(huì)了分析問(wèn)題解決問(wèn)題的能力,加深了對(duì)所學(xué)理論知識(shí)的理解和運(yùn)用。我的動(dòng)手能力得到了很大的提高,創(chuàng)新意識(shí)得到了鍛煉。


致  謝

在這次課程設(shè)計(jì)的過(guò)程中,我的指導(dǎo)老師11111老師給予了我很大的幫助,提供了相關(guān)的資料,對(duì)我的課程設(shè)計(jì)作品給予了指導(dǎo)和支持。使我順利圓滿的完成了此次課稱設(shè)計(jì)設(shè)計(jì)。在此,向1111老師表示衷心的感謝!同時(shí),也要感謝學(xué)院提供制板等設(shè)施,使我的設(shè)計(jì)得以順利完成。

古人云:預(yù)則立,不預(yù)則廢。祖先曾經(jīng)教導(dǎo)我們:一年之計(jì)在于春,一日之計(jì)在于晨。作為即將走向社會(huì)的我們又何嘗不是如此?一個(gè)沒(méi)有規(guī)劃的人生,就像一場(chǎng)沒(méi)有球門(mén)的足球賽,滿場(chǎng)亂踢;一個(gè)沒(méi)有規(guī)劃的人生,就像一葉在茫茫大海上漫無(wú)目標(biāo)的小舟,隨波飄蕩。在我們即將走向社會(huì)的時(shí)候,我們必須對(duì)自己的職業(yè)生涯進(jìn)行規(guī)劃。羅素曾說(shuō):選擇職業(yè)就是選擇你自己的將來(lái)。因此我們要針對(duì)社會(huì)需要,結(jié)合自身的情況及早做好相應(yīng)準(zhǔn)備,為我們走向社會(huì)打下堅(jiān)實(shí)的基礎(chǔ)。俗話說(shuō):磨刀不誤砍柴功。為適應(yīng)社會(huì)需要,促進(jìn)自我發(fā)展,我們除了學(xué)好本專(zhuān)業(yè)外,還應(yīng)輔修相關(guān)專(zhuān)業(yè)知識(shí),積極參加社會(huì)實(shí)踐活動(dòng),培養(yǎng)工作能力,努力提高綜合素質(zhì),同時(shí)努力培養(yǎng)特長(zhǎng),形成自身競(jìng)爭(zhēng)優(yōu)勢(shì)。

最后,再次感謝學(xué)院給了我們機(jī)會(huì),以及電子信息與電氣工程學(xué)院的各位老師和許多的朋友、同學(xué)在各個(gè)方面給予了我很多的幫助和支持,讓我堅(jiān)持到了最后,謝謝你們!


單片機(jī)源程序如下:


  1. #include <reg52.h>                       //調(diào)用單片機(jī)頭文件
  2. #define uchar unsigned char  //無(wú)符號(hào)字符型 宏定義              變量范圍0~255
  3. #define uint  unsigned int              //無(wú)符號(hào)整型 宏定義              變量范圍0~65535
  4. #include <intrins.h>

  5. sbit dq   = P1^5;              //18b20 IO口的定義
  6. sbit beep = P1^4;   //蜂鳴器IO口定義

  7. bit flag_300ms ;



  8. uchar code table_num[]="0123456789abcdefg";

  9. sbit rs=P1^0;              //寄存器選擇信號(hào) H:數(shù)據(jù)寄存器                L:指令寄存器
  10. sbit rw=P1^1;              //寄存器選擇信號(hào) H:數(shù)據(jù)寄存器                L:指令寄存器
  11. sbit e =P1^2;              //片選信號(hào)   下降沿觸發(fā)

  12. unsigned char i=0,timecount=0,displayOK=0,rate=0,aa=0;
  13. unsigned int time[6]={0};


  14. /***********************1ms延時(shí)函數(shù)*****************************/
  15. void delay_1ms(uint q)
  16. {
  17.               uint i,j;
  18.               for(i=0;i<q;i++)
  19.                             for(j=0;j<110;j++);
  20. }


  21. /********************************************************************
  22. * 名稱 : delay_uint()
  23. * 功能 : 小延時(shí)。
  24. * 輸入 : 無(wú)
  25. * 輸出 : 無(wú)
  26. ***********************************************************************/
  27. void delay_uint(uint q)
  28. {
  29.               while(q--);
  30. }

  31. /********************************************************************
  32. * 名稱 : write_com(uchar com)
  33. * 功能 : 1602命令函數(shù)
  34. * 輸入 : 輸入的命令值
  35. * 輸出 : 無(wú)
  36. ***********************************************************************/
  37. void write_com(uchar com)
  38. {
  39.               e=0;
  40.               rs=0;
  41.               rw=0;
  42.               P0=com;
  43.               delay_uint(25);
  44.               e=1;
  45.               delay_uint(100);
  46.               e=0;
  47. }

  48. /********************************************************************
  49. * 名稱 : write_data(uchar dat)
  50. * 功能 : 1602寫(xiě)數(shù)據(jù)函數(shù)
  51. * 輸入 : 需要寫(xiě)入1602的數(shù)據(jù)
  52. * 輸出 : 無(wú)
  53. ***********************************************************************/
  54. void write_data(uchar dat)
  55. {
  56.               e=0;
  57.               rs=1;
  58.               rw=1;
  59.               P0=dat;
  60.               delay_uint(25);
  61.               e=1;
  62.               delay_uint(100);
  63.               e=0;            
  64. }

  65. /********************************************************************
  66. * 名稱 : write_string(uchar hang,uchar add,uchar *p)
  67. * 功能 : 改變液晶中某位的值,如果要讓第一行,第五個(gè)字符開(kāi)始顯示"ab cd ef" ,調(diào)用該函數(shù)如下
  68.                             write_string(1,5,"ab cd ef;")
  69. * 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
  70. * 輸出 : 無(wú)
  71. ***********************************************************************/
  72. void write_string(uchar hang,uchar add,uchar *p)
  73. {
  74.               if(hang==1)  
  75.                             write_com(0x80+add);
  76.               else
  77.                             write_com(0x80+0x40+add);
  78.               while(1)
  79.               {
  80.                             if(*p == '\0')  break;
  81.                             write_data(*p);
  82.                             p++;
  83.               }            
  84. }

  85. /***********************lcd1602上顯示特定的字符************************/
  86. void write_zifu(uchar hang,uchar add,uchar date)
  87. {
  88.               if(hang==1)  
  89.                             write_com(0x80+add);
  90.               else
  91.                             write_com(0x80+0x40+add);
  92.               write_data(date);            
  93. }

  94. /***********************lcd1602上顯示兩位十進(jìn)制數(shù)************************/
  95. void write_sfm3(uchar hang,uchar add,uint date)
  96. {
  97.               if(hang==1)  
  98.                             write_com(0x80+add);
  99.               else
  100.                             write_com(0x80+0x40+add);
  101.               write_data(0x30+date/100%10);
  102.               write_data(0x30+date/10%10);
  103.               write_data(0x30+date%10);            
  104. }

  105. /***********************lcd1602初始化設(shè)置************************/
  106. void init_1602()
  107. {
  108.               write_com(0x38);              //
  109.               write_com(0x0c);
  110.               write_com(0x06);
  111.               delay_uint(1000);
  112.               write_string(1,0,"   Heart Rate     ");            
  113.               write_string(2,0,"     000/min       ");
  114. }

  115. /*************定時(shí)器0初始化程序***************/
  116. void time_init()               
  117. {
  118.               EA   = 1;                              //開(kāi)總中斷
  119.               TMOD = 0X01;                //定時(shí)器0、定時(shí)器1工作方式1
  120.               ET0  = 1;                              //開(kāi)定時(shí)器0中斷
  121.               TR0  = 1;                              //允許定時(shí)器0定時(shí)
  122. }


  123. /***********外部中斷0初始化程序****************/
  124. void init_int0()                //外部中斷0初始化程序
  125. {
  126.               EX0=1;                                            //允許外部中斷0中斷
  127.               EA=1;                                            //開(kāi)總中斷
  128.               IT0 = 1;                               //外部中斷0負(fù)跳變中斷
  129. }

  130. /****************主函數(shù)***************/
  131. void main()
  132. {            
  133.               init_1602();                    //1602初始化
  134.               time_init();                    //初始化定時(shí)器
  135.               init_int0();                //外部中斷0初始化程序
  136.               while(1)
  137.               {                                         
  138.                             if(displayOK==0)//如果顯示關(guān)
  139.                             {
  140.                                           rate = 0;
  141.                             }
  142.                             else//如果顯示開(kāi)
  143.                             {
  144.                                           rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
  145.                             }
  146.                             write_sfm3(2,5,rate);

  147.                             delay_1ms(300);
  148.               }
  149. }

  150. void int0() interrupt 0
  151. {
  152.                             EX0=0;//暫時(shí)關(guān)外部中斷
  153.                             if(timecount<8)   //當(dāng)連續(xù)兩次檢測(cè)時(shí)間間隔小于8*50ms=400ms不處理
  154.                             {
  155.                                                         TR0=1;//開(kāi)定時(shí)器
  156.                             }
  157.                             else
  158.                             {
  159.                                           time[i]=timecount*50+TH0*0.256+TL0/1000;//算出間隔時(shí)間
  160.                                           TH0 = 0x3c;
  161.                                           TL0 = 0xb0;     // 50ms              12M
  162.                                           timecount=0;//50ms計(jì)數(shù)清零
  163.                                           i++;
  164. ……………………

  165. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
論文.doc (578.5 KB, 下載次數(shù): 45)


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表