基于89S51單片機簡單絕對能夠實現的脈搏次數檢測器_第1頁
基于89S51單片機簡單絕對能夠實現的脈搏次數檢測器_第2頁
基于89S51單片機簡單絕對能夠實現的脈搏次數檢測器_第3頁
基于89S51單片機簡單絕對能夠實現的脈搏次數檢測器_第4頁
基于89S51單片機簡單絕對能夠實現的脈搏次數檢測器_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、醫(yī)學電子儀器設計報告書脈搏檢測器設計與制作摘要: 脈搏波所呈現出來的形態(tài)、強度、速率和節(jié)律等方面的綜合信息,能反映出人體心血管系統(tǒng)中許多生理疾病的血流特征。本系統(tǒng)采用at89s52單片機為核心而制作的一種實用型脈搏測量儀。采用紅外發(fā)射和接收二極管作為傳感器對人體的脈搏心率警醒數據采集。得到的信號經過整形和放大后送入at89s52單片機進行處理。單片機將采集到的脈搏心率在lcd液晶顯示器上實時顯示出來,同時還設置了脈搏測量儀的上下限報警電路。本文首先描述本設計的整體思路,然后介紹各個部分設計中的細節(jié)問題,最后提出一些完善本設計的改進意見。關鍵字:脈搏計 單片機 at89s52 人體脈搏信號 實時

2、顯示目錄1.系統(tǒng)方案選擇與論證31.1任務31.2要求31.3系統(tǒng)基本方案31.3.1各部分電路的方案選擇及論證41.3.2系統(tǒng)各模塊的最終方案52.系統(tǒng)硬件設計62.1信號采集整形部分設計62.2 矩陣鍵盤的設計72.3液晶顯電路83系統(tǒng)軟件設計83.1系統(tǒng)主程序的設計83.2脈搏波動頻率測量子程序的設計93.3鍵盤掃描子程序124.調試與分析135.收獲與體會13附錄1(硬件電路原理圖):14附錄2(主要程序):141.系統(tǒng)方案選擇與論證1.1任務設計并制作一個脈搏檢測器1.2要求(1)、通過脈搏傳感器采樣脈搏信號,設計脈搏波檢測電路,通過示波器顯示出來(2)、將整形后的脈沖波送入單片機,

3、采用單片機構成脈搏檢測儀,要求實時顯示脈率變化,脈率超限時用蜂鳴器報警,報警范圍可以通過鍵盤設定。1.3系統(tǒng)基本方案根據題目的要求系統(tǒng)模塊可以基本劃分為:脈搏傳感器部分、信號放大整形電路部分、單片機處理電路部分及顯示電路部分。為實現各模塊的功能,分別做了幾種不同的設計方案病進行了論證1.3.1各部分電路的方案選擇及論證(1)脈搏傳感器部分傳感器又稱為換能器、變換器等。脈搏傳感器是脈搏檢測系統(tǒng)中重要的組成部分,其基本功能是將切脈壓力和橈動脈搏動壓力這樣一些物理量(非電量)轉換成為便于測量的電量。脈搏傳感器的精度、靈敏度、抗干擾能力及安裝方式決定了脈搏測量精度,因此其選型對整個設計具有決定性的作用

4、。目前,脈搏信號的測量方式主要有:1、光電脈搏波傳感器。血管不受壓力時,血流均勻,反射光也比較均勻,故傳感器無脈搏信號輸出;當血管受壓血液不流動時,傳感器也無輸出信號;只有當血管受到擠壓,血管中的血液斷續(xù)流動時,反射光也隨之變化,這時傳感器輸出脈搏信號,達到了測量脈搏的作用。這種傳感器的特點是結構簡單、可靠性高、抗干擾能力強,主要用于測量脈搏的跳動次數。人體不同部位的脈搏波波形存在差異,光電脈搏波傳感器不適合用于提取不同部位的脈搏波信號。 2、力傳感器測量。其測量原理是,將測力傳感器的受力端壓在人體橈動脈處,模仿人的指頭。這種方式通常采用壓阻式傳感器,它具有抗干擾能力強的特點,但由于動脈血管產

5、生的力很小,故量程小,抗沖擊力不強。3、脈搏信號還表現為皮膚振動,因此可以用加速度傳感器進行檢測,其特點是結構簡單、體積小、波形測量精度較高。本設計中,采用第一種脈搏傳感器,即廣電脈搏波傳感器。(2)信號放大整形電路部分脈搏傳感器出來的電壓信號較弱,一般在毫伏級,需要對其進行放大。所以,設計信號放大電路,將脈搏傳感器出來的信號進行放大,使之成為一個幅值適當的信號,便于后續(xù)電路的處理。由于本設計對于脈搏波的整形要求比較低,只需要將每個脈搏波整形成為一個標準的方波,送入單片機中進行計數,即可。所以這部分電路采用了比較簡單的方法,只需用6個反向器對從傳感器得到的信號進行放大和整形就可以的了。(3)單

6、片機選擇本設計作為一個簡單脈搏測量儀,最后需給出脈搏波動頻率。以單片機作為信息處理中心,通過對單片機進行編程,完成信號輸入檢測、信息分析處理及信息顯示。1、avr單片機avr單片機是atmel公司生產的單片機。高速度(50ns)、低功耗,硬件應用harward結構,具有預取指令功能,使得指令可以在一個時鐘周期內執(zhí)行,而msc-51要12個時鐘周期執(zhí)行一條指令。avr單片機如lpc2131等。2、凌陽單片機凌陽是臺灣凌陽公司推出的單片機,具有高速度、低價、可靠、實用、體積小、功耗低和簡單易學等特點,如spce061等。3、51單片機51單片機是intel公司生產的。它具有結構簡單,價格便宜,易于

7、開發(fā)的特點。通用型,有總線擴展,有較強的位處理功能,有全雙工異步串行通信口。但是其功能相對較少,訪問外部數據有瓶頸,作電壓范圍窄。本設計中,單片機只需要對脈搏信號的波動頻率進行測量、計算和顯示,對單片機的要求不是很高。而對51單片機,本人比較熟悉,所以,本設計中選擇51單片機作為信息處理中心。在51系列單片機中,at89系列單片機是美國atmel公司推出的一種新型高性能低價位、低電壓低功耗的8位cmos微型計算機。at89s52就是其中一款,它可以完全滿足本設計的設計要求,而且,at89s52的價格較低。(4)鍵盤與顯示部分根據題目要求,設計出來的系統(tǒng)是可以設定報警的范圍的。對鍵盤和顯示部分采

8、用以下方案:采用液晶顯示屏和通用矩陣鍵盤。液晶顯示屏(lcd)具有功耗小、輕薄短小無輻射危險,平面直角顯示以及影象穩(wěn)定不閃爍,可視面積大,畫面效果好,抗干擾能力強,并可靈活的現實多種狀態(tài)。根據以上論述,51單片機資源豐富,根據需要,我們選用方案一。1.3.2系統(tǒng)各模塊的最終方案根據以上分析,結合器件和設備等因素,確定如下方案: 1. 采用at89s52單片機作為控制器,分別對輸入、顯示、信號的處理控制。2. 傳感器部分采用光電脈搏傳感器,該器件結構簡單、可靠性高、抗干擾能力強 3. 信號的處理采用六個反向器對其進行放大和整形4. 顯示用lcd液晶顯示實時脈搏數和報警上下限數值。脈搏傳感器信號放

9、大電路鍵盤輸入單片機處理電路顯示電路報警電路系統(tǒng)的基本框圖如下圖所示。2.系統(tǒng)硬件設計2.1信號采集整形部分設計本部分由傳感器部分和整形電路部分組成。傳感器由紅外線發(fā)射二極管和接收而以機關組成,測量原理如下:由于手指放在光的傳遞路徑中,血管中血液的飽和度的變化將引起光的傳遞強度變化,此變化和心跳的節(jié)拍相對應,因此紅外接收二極管的電流也跟著心跳的節(jié)拍改變,使得紅外接收二極管輸出與心跳節(jié)拍相對應的脈沖信號。該脈沖信號經過u7u5,r3r5,c1、c2等組成的低通放大器放大,u4、r6、r7、c3組成的放大器進一步放大后,送給由u3、u2、rv1、r8等組成的施密特觸發(fā)器整形后輸出,作為單片機的外部

10、中斷信號。電路中的可變電阻rv1用來調整施密特觸發(fā)器的靈敏度,rv1越小,該觸發(fā)器就會越靈敏。2.2 矩陣鍵盤的設計由于控制鍵位較多,方便程序設計,硬件安全可靠,我們設計44矩陣鍵盤,與單片機p1口相連,電路如圖2.2所示。圖2.2 矩陣鍵盤電路2.3液晶顯電路我們用單片機p0口作為1602的數據傳輸口,p2.0為數據命令選擇端、p2.1讀寫、p2.2使能端。硬件電路如圖2.3所示。圖2.3 液晶硬件電路圖3系統(tǒng)軟件設計3.1系統(tǒng)主程序的設計系統(tǒng)主程序控制單片機系統(tǒng)按預定的操作方式運行,是單片機系統(tǒng)程序的框架。系統(tǒng)主程序流程圖如圖:開始系統(tǒng)初始化np3.2是否為上升沿?y脈搏波動頻率測量子程序

11、lcd顯示圖系統(tǒng)主程序流程圖上電后,首先進行整機初始化處理。主程序的初始化模塊主要完成儀器硬件、軟件的初態(tài)設置,單片機內專用寄存器的設定,單片機工作方式及各端口的工作狀態(tài)的規(guī)定。整機初始化結束后,檢測p3.2口的狀態(tài),如果檢測到上升沿,則進入脈搏波動頻率測量子程序,測得脈搏波動頻率之后,送到lcd顯示單元進行顯示。3.2脈搏波動頻率測量子程序的設計本設計中對脈搏頻率的測量采用周期測量法。可將單片機內定時/計數器t0定為16位定時器,對內部機器周期計數,即方式控制字為#01h。定時器的開關由程序根據p3.2口上的狀態(tài)進行控制,檢測到上升沿時開t0計數,當緊接著的另一個上升沿被檢測到時關t0計數。

12、t0中的計數值為nx,則被測脈搏信號周期tx=nxts(對于12mhz晶振,ts=1s),每分鐘跳動次數fx=60/tx??紤]到脈搏的頻率很低,大約為1hz左右,而16 位定時/計數器的最高計數值為65535,這樣定時/計數器將發(fā)生溢出,且最后脈搏波動頻率的計算涉及到雙字節(jié)除法,編程較復雜。為此,采用定時器中斷方式,即在一個脈搏周期內,隔一段時間t1,t1即為中斷周期,且t165535,就將th0,tl0清零。設 n為每分鐘脈搏跳動次數,t為脈搏跳動周期,則n=60/t本設計中,設定顯示的每分鐘脈搏跳動次數誤差不超過1次,則dn=60t2dt若t=2,dn=604dt=15dt則定時器周期t不

13、超過1/15秒。若t=1,dn=60dt則定時器周期t不超過1/60秒。取t=1,即定時器周期t不超過1/60秒。設中斷周期為t1,中斷次數為n,則:n=60t1n為方便計算,?。?t1=2m。由于定時器周期t不超過1/60秒,即t160,故取m=7。即中斷周期為127=1128s=7812us,此時,th0=1eh,tl0=84h。每分鐘脈搏跳動次數n=6027n,為方便計算,取n=3028n。脈搏波動頻率測量子程序流程圖如下圖所示。0r3ecth0,78tl0tr0置1,開始計數n是否th0=0,tl0=0?ytr0置1,開始計數 n加1np3.2是否為上跳沿?ytr0置0,定時器停止工作

14、計算1分鐘內的脈搏數結束脈搏頻率測量中斷服務程序流程圖3.3鍵盤掃描子程序設置上下限脈搏次數開始鍵盤掃描功能鍵是否按下?是主函數否鍵盤子程序流程圖4.調試與分析經過一番的努力和奮斗后,終于在限定的時間中把程序和硬件部分都完全做出來了。但是做出來了并不代表能夠使用,每一個作品都需要上千次的調試。第一次調試的時候,接通電源,lcd液晶顯示屏燈亮了,但是并沒有字體顯示。原因:液晶顯示屏的對比度調得太高了,以至于全部的字體都無法顯示,經過調整滑動變阻器的阻值大小,終于能夠清晰的顯示出來了。第二次調試,程序的顯示不正常,經常發(fā)生程序跑飛的情況。原因:單片機主機部分電路復位電容沒有接好,以至于出現這樣的問

15、題。經過后來重新把電容焊好后,就沒有再出現這樣的情況了。5.收獲與體會本次實驗由我和隊員共同完成,在這個過程中使我受益匪淺。在確定各模塊電路的過程中,不但訓練了我們查找資料的能力,更是一次很好考驗我們用所學的模擬電子技術基礎和數字電子技術基礎等相關知識來判斷電路正確與否的機會。通過此次課程設計的鍛煉,自己的動手能力有了很大的提高,查找問題、解決問題的能力也有了相應的進步。當然,這次試驗也讓我看到了我們的很多缺陷。首先就是在畫原理圖的時候沒有看清反向器的管腳,以致差點出現做出了一塊無用的電路板的情況。還有就是在確定方案之前,沒有在實驗板上認真搭建電路,事前摸清放大模塊的工作情況。總的來說,本次設

16、計有苦也有甜。 設計思路是最重要的,只要你的設計思路是成功的,那你的設計已經成功了一半,因此我們應該在設計前做好充分的準備。同時在實踐的過程中,一定不能半途而廢,或者是中途改設計思路。因為這樣不僅會浪費大量的時間與精力,還會讓你自己沒有了一往直前的勇氣。因此,在做這些設計的時候一定需要耐心和勇氣去克服在中途遇到的困難和阻力。同時熟練地掌握課本上的知識,這對試驗中出現的問題進行分析解決也是相當重要的。 這次設計留給我們印象最深的是要設計一個成功的電路,必須要有耐心,更要有堅持的毅力。附錄1(硬件電路原理圖):附錄2(主要程序):主程序:unsigned char key_value; /存放鍵盤

17、返回unsigned char key_flag=0;/定義有鍵按下的標志unsigned char i,j,t,m,dispbuf10=m,a,i,b,o,:,0,0,0,0;unsigned int n,mb,w,f;void display_times();#include reg52.h#include lcd.c#include hardware.c#include user1.h#include key.csbit p3_0=p30;void main() ea=0;sys_init();lcd_initial();delay_20ms(10);lcd_write(0,0x01);

18、 /清屏lcd_print(5,0,welcome!);delay_20ms(10);lcd_print(0,0,maiboceliang);lcd_print(0,1,e control!);delay_20ms(10);lcd_write(0,0x01); /清屏lcd_print(0,0,lstc);lcd_print(0,1,by lwl&mzl);delay_20ms(10);lcd_write(0,0x01); /清屏 lcd_print(0,0,xuanze fanwei:);lcd_print(0,1,morenwei:50120);while(1) unsigned int

19、w=0; key_value=kbscan(); if(key_flag=1) key_command(key_value); w=1; if(w=1) break; lcd_write(0,0x01); /清屏 delay_20ms(10);displayhl();lcd_print(0,1,testing.);delay_20ms(20); lcd_write(0,0x01); /清屏displayhl(); tmod=0x01;/定時器t0工作于方式1th0=0xec;tl0=0x78;/t0定時時間為5msie=0x83; /開中斷it0=1; /外部中斷0為邊沿觸發(fā)方式tr0=1;

20、/開定時器t0for(;) /脈搏指示燈控制if(p3_0=0)delay_20ms(50);p3_0=1; /useralarm(); external0() interrupt 0/外部中斷服務程序 p3_0=0; /點亮指示燈if(n=0)mb=0;elsemb=12000/n; /計算每分鐘脈搏數f=mb; dispbuf8=mb%10+0x30;/取個位數mb=mb/10;dispbuf7=mb%10+0x30;/取十位數dispbuf6=mb/10+0x30;/取百位數 lcd_print(3,1,dispbuf);n=0;timer0() interrupt 1/定時中斷服務程序

21、th0=0xec;tl0=0x78;n+;if(n=2000)/10秒鐘測不到心率,n復位n=0;鍵盤掃描程序:#include #include unsigned char key_value;unsigned char key_flag; char code tab44=.,1,4,7,/7,8,9, e up 0,2,5,8,/4,5,6, d down f,3,6,9,/1,2,3 , c set b,c,d,e; /0到f的16個鍵植/a .,0,f +/- ,b okvoid delay(unsigned char a)unsigned char i;while(a-)for(i=

22、100;i0;i-);unsigned char kbscan() /鍵盤掃描 unsigned char hang,lie,key;key_flag=0;p1=0x0f;if(p1!=0x0f) delay(10);if(p1!=0x0f)key_flag=1;p1=0x0f;switch(p1&0x0f)case 0x0e:lie=0;break;case 0x0d:lie=1;break;case 0x0b:lie=2;break;case 0x07:lie=3;break;p1=0xf0;switch(p1&0xf0)case 0xe0:hang=0;break;case 0xd0:h

23、ang=1;break;case 0xb0:hang=2;break;case 0x70:hang=3;break;p1=0x0f;while(p1!=0x0f);key=tabhanglie;return (key);else return(key_value);void setmaibo(void) unsigned char i;lcd_write(0,1);gotoxy(0,0);print(h_maibo:);for(i=0;i3;i+)key_flag=0;while(key_flag=0)key_value=kbscan();while(1) if(key_value!=b&ke

24、y_value!=c&key_value!=d&key_value!=e&key_value!=f&key_value!=.) break; else key_value=kbscan(); get_hti=key_value; lcd_write(1,key_value+0x30); gotoxy(0,1);print(l_maibo:);for(i=0;i2;i+)key_flag=0;while(key_flag=0)key_value=kbscan();while(1) if(key_value!=b&key_value!=c&key_value!=d&key_value!=e&key

25、_value!=f&key_value!=.) break; else key_value=kbscan(); get_lti=key_value; lcd_write(1,key_value+0x30); while(1) key_value=kbscan();if(key_value=c) break; mh=get_ht0*100+get_ht1*10+get_ht2;ml=get_lt0*10+get_lt1;lcd_write(0,0x01); gotoxy(0,0);print(set sucess!);delay_20ms(50);lcd_write(0,0x01);void k

26、ey_command(unsigned char key_value) switch (key_value) case c:setmaibo();break; default:break; 液晶顯示程序:#include /port definitions*sbit lcdrs= p20;sbit lcdrw= p21;sbit lcden = p22;sfr dbport = 0x80;/p0=0x80,p1=0x90,p2=0xa0,p3=0xb0.數據端口void lcd_delay(unsigned char t) unsigned char i,j;for(i=0;it;i+)for

27、(j=0;j100;j+);/內部等待函數*void lcd_wait(void)/讀忙狀態(tài)lcdrs=0;lcdrw=1;_nop_(); lcden=1;_nop_(); lcden=0; /向lcd寫入命令或數據*#define lcd_command0 / command#define lcd_data1 / data#define lcd_clear_screen0x01 / 清屏#define lcd_homing 0x02 / 光標返回原點void lcd_write(bit style, unsigned char input) /寫數據1/命令0lcden=0; lcdrs=

28、style;lcdrw=0;_nop_();dbport=input;_nop_();lcden=1;_nop_(); lcd_delay(10);lcden=0;_nop_();lcd_wait();/設置顯示模式*#define lcd_show0x04 /顯示開#define lcd_hide0x00 /顯示關 #define lcd_cursor0x02 /顯示光標#define lcd_no_cursor0x00 /無光標 #define lcd_flash0x01 /光標閃動#define lcd_no_flash0x00 /光標不閃動void lcd_setdisplay(uns

29、igned char displaymode)lcd_write(lcd_command,0x08|displaymode);/設置輸入模式*#define lcd_ac_up0x02#define lcd_ac_down0x00 / default#define lcd_move0x01 / 畫面可平移#define lcd_no_move0x00 /defaultvoid lcd_setinput(unsigned char inputmode) lcd_write(lcd_command,0x04|inputmode);/初始化lcd*void lcd_initial(void) /初始化lcdlcd_write(0,0x38); lcd_write(0,0x38);/8位數據端口,2行顯示,5*7點陣lcd_delay(300);lcd_setdisplay(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論