|
1.功能原理
脈搏傳感器采樣脈搏信號(hào),采用STC89C51單片機(jī)作為控制器,脈搏傳感器輸出方波傳入單片機(jī),觸發(fā)單片機(jī)進(jìn)去外部中斷函數(shù),每接收一個(gè)脈沖波形,顯示屏就計(jì)數(shù)一次。如果脈搏次數(shù)超過(guò)設(shè)定值是,用蜂鳴器報(bào)警提示
640.jpg (31.52 KB, 下載次數(shù): 58)
下載附件
2019-3-24 11:52 上傳
2.硬件設(shè)計(jì)
(1)總體硬件框圖
641.jpg (25.39 KB, 下載次數(shù): 55)
下載附件
2019-3-24 11:52 上傳
(2)心率檢測(cè)電路原理
心率檢測(cè)電路是以紅外反射式傳感器ST188為檢測(cè)原件,并利用單片機(jī)系統(tǒng)內(nèi)部定時(shí)器來(lái)計(jì)算時(shí)間。
640.jpg (23.83 KB, 下載次數(shù): 56)
下載附件
2019-3-25 02:56 上傳
642.jpg (23.83 KB, 下載次數(shù): 42)
下載附件
2019-3-24 11:52 上傳
心率檢測(cè)處理電路 此電路采用兩級(jí)運(yùn)算放大電路,一級(jí)放大倍數(shù)為可調(diào),二級(jí)放大倍數(shù)固定為2。當(dāng)紅外反射式傳感器ST188感應(yīng)到一個(gè)完整的脈搏,便產(chǎn)生一個(gè)脈沖,單片機(jī)通過(guò)對(duì)脈沖累加得到脈搏心率跳動(dòng)次數(shù),并使用定時(shí)器計(jì)數(shù)脈搏的頻率。系統(tǒng)運(yùn)行中能顯示脈搏心率次數(shù)和時(shí)間,系統(tǒng)停止運(yùn)行時(shí),能夠顯示總的脈搏心率次數(shù)和時(shí)間。
(3)其他硬件電路
除了主要的心率檢測(cè)電路外,還包括單片機(jī)最小系統(tǒng)、LCD1602顯示屏電路、蜂鳴器報(bào)警電路。因?yàn)檫@幾個(gè)電路比較常用,就省略不介紹了。
3.程序設(shè)計(jì)
(1)LCD1602驅(qū)動(dòng)程序
sbit RS = P2^5;//Pin4
sbit RW = P2^6; //Pin5
sbit E = P2^7;//Pin6
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar data TimeNum[]=" ";
uchar data Test1[]=" ";
void DelayUs(unsigned char us)//delay us
{
unsigned char uscnt;
uscnt=us>>1;/* Crystal frequency in 12MHz*/
while(--uscnt);
}
/******************************************************************/
void DelayMs(unsigned char ms)//delay Ms
{
while(--ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
void WriteCommand(unsigned char c)
{
DelayMs(5);//short delay before operation
E=0;
RS=0;
RW=0;
_nop_();
E=1;
P1=c;
E=0;
}
/****************************************************************/
void WriteData(unsigned char c)
{
DelayMs(5); //short delay before operation
E=0;
RS=1;
RW=0;
_nop_();
E=1;
P1=c;
E=0;
RS=0;
}
/*********************************************************************/
void ShowChar(unsigned char pos,unsigned char c)
{
unsigned char p;
if (pos>=0x10)
p=pos+0xb0; //是第二行則命令代碼高4位為0xc
else
p=pos+0x80; //是第二行則命令代碼高4位為0x8
WriteCommand (p);//write command
WriteData (c); //write data
}
/*************************************************************************/
void ShowString (unsigned char line,char *ptr)
{
unsigned char l,i;
l=line<<4;
for (i=0;i<16;i++)
ShowChar (l++,*(ptr+i));//循環(huán)顯示16個(gè)字符
}
/*********************************************************************/
void InitLcd()
{
DelayMs(15);
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x06); //顯示光標(biāo)移動(dòng)位置
WriteCommand(0x0c); //顯示開(kāi)及光標(biāo)設(shè)置
WriteCommand(0x01); //顯示清屏
}
(2)脈搏檢測(cè)處理程序
unsigned int i,n,ci,dd[11],jj,j,k,tmp;
bit w=0;
uchar bh;
ulong time;
sbit spd = P2^0;
external0() interrupt 0//外部中斷服務(wù)程序
{
w=~w;
if(w==0)
{
EX0=0;
ET0=1;
TH0=0x0;
TL0=0x0;
n=0;
}
else
{
time=n*65536+TH0*256+TL0;
dd[jj]=30000000/time; //計(jì)算脈搏時(shí)間
jj++;
if(jj>10)
{
jj=0;
for(j=0;j<11;j++)
for(k=0;k<11-j;k++)
{
if(dd[k]>dd[k+1])
{
tmp=dd[k];
dd[k]=dd[k+1];
dd[k+1]=tmp;
}
}
if(dd[5]>50&&dd[5]<200)ci=((dd[4]+dd[5]+dd[6])/3)+11;
}
TH0=0x0;
TL0=0x0;
n=0;
}
}
void timer0(void) interrupt 1
{
n++;
}
(3)主函數(shù)
void main(void)
{
InitLcd();//
DelayMs(15);
IT0=1; //INT0下降沿中斷
EX0=1; //允許INT1中斷
TMOD=0x1;
TH0=0x0;
TL0=0x0;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(n>10)
{
n=0;
jj=0;
ci=0;
TimeNum[0]='N';
TimeNum[1]='O' ;
TimeNum[2]=' ' ;
TimeNum[3]='I' ;
TimeNum[4]='N' ;
TimeNum[5]='P' ;
TimeNum[6]='U' ;
TimeNum[7]='T' ;
TimeNum[8]=' ' ;
ShowString(0,TimeNum);
ShowString(1,Test1);
}
else
{
if(w==0&&EX0==0)
{
delay();
EX0=1;
}
TimeNum[0]=' ';
TimeNum[1]=' ' ;
TimeNum[2]=' ' ;
TimeNum[3]=' ' ;
TimeNum[4]=' ' ;
TimeNum[5]=' ' ;
if(ci/100>0)TimeNum[6]=ci/100+'0' ; else TimeNum[6]=' ' ;
if(ci/100==0&&ci%100/10>0)TimeNum[7]=ci%100/10+'0' ; else TimeNum[7]=' ' ;
TimeNum[8]=ci%10+'0' ;
ShowString(0,TimeNum);
ShowString(1,Test1);
if(ci>100)spd=0;else spd=1;
}
}
;
}
源碼+AD電路圖 下載:
心率脈搏儀.rar
(127.54 KB, 下載次數(shù): 265)
2019-3-24 11:53 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|