重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

c语言慢速测量心率函数 c语言测试cpu性能

谁有pulsesensor心率传感器 的c语言程序,带注释的。在线等挺急的

这个是主程序和部分代码由于字数限制所以你还是留个邮箱吧

公司主营业务:成都做网站、网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出防城免费做网站回馈大家。

void main(void)

{

unsigned char i;

sys_init();

beep = 1;

LCD12864_DisplayOneLine(0x80,ucStr1); //显示信息1

LCD12864_DisplayOneLine(0x90,ucStr2); //显示信息2

LCD12864_DisplayOneLine(0x88,ucStr3); //显示信息3

LCD12864_DisplayOneLine(0x98,ucStr4); //显示信息4

while(1)

{

sendDataToProcessing('S', Signal); // 发送并处理原始脉搏传感器数据

if (QS == true){ // 确定发现一个心跳

fadeRate = 255; // Set 'fadeRate' Variable to 255 to fade LED with pulse

sendDataToProcessing('B',BPM); // 发送一个'B'和心率

sendDataToProcessing('Q',IBI); // send time between beats with a 'Q' prefix

QS = false; // reset the Quantified Self flag for next time

LCD_disp_list_char(2,4,DisBuff);//在LCD12864上显示BPM

}

delay(138); // 延时 19.6ms

LCD_disp_list_char(4,4,DisBuff2);

//ledFadeToBeat();

if(Pressure100){

for(i=0;i8;i++){

delay(1000);}

if (Pressure100){

beep = 0;}}

if(BPM60|BPM100){

for(i=0;i9;i++){

delay(1000);}

if(BPM60|BPM100){

beep = 0;}

for(i = 0;i16;i++) //依次执行写入操作

{

putchar(ucStr1[i]);

}

for(i = 0;i16;i++) //依次执行写入操作

{

putchar(ucStr2[i]);

}

for(i=0;i3;i++)

{

putchar(DisBuff[i]);}

for(i = 0;i16;i++) //依次执行写入操作

{

putchar(ucStr3[i]);

}

for(i = 0;i16;i++) //依次执行写入操作

{

putchar(ucStr4[i]);

}

for(i=0;i4;i++)

{

putchar(DisBuff2[i]);}

}

}

//void ledFadeToBeat(){

// fadeRate -= 15; // set LED fade value

// fadeRate = constrain(fadeRate,0,255); // keep LED fade value from going into negative numbers!

// analogWrite(fadePin,fadeRate); // fade LED

// }

/******************************************************************************

函数名称:GetADCResult

函数功能:获取AD转换结果函数

入口参数:BYTE ch(通道选择)

返回值:result(A/D转换结果)

备注:无

*******************************************************************************/

unsigned int GetADCResult(BYTE ch)

{ unsigned int result; //AD转换结果result

ADC_CONTR=0xf8; //清除ADC控制寄存器ADC CONTR的CHS2、CHS1、CHS0(清除通道选择)

_nop_(); //设置ADC CONTR控制寄存器后,要加4个空操作延时才可以正确读到ADC CONTR寄存器的值

_nop_();

_nop_();

_nop_();

ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START; //开ADC电源,选择AD转换速率,并选择AD通道,开始AD转换

_nop_(); //设置ADC CONTR控制寄存器后,要加4个空操作延时才可以正确读到ADC CONTR寄存器的值

_nop_();

_nop_();

_nop_();

while (!(ADC_CONTR ADC_FLAG));//等待AD转换结束

ADC_CONTR = ~ADC_FLAG; //关闭ADC

result=ADC_RES; //将AD转换结果的高两位赋给result

result=result8; //将result循环左移8位

result+=ADC_RESL; //将AD转换结果的底8位加高两位共10位给result

return result; //返回10位AD转换结果

}

void sendDataToProcessing(char symbol, int dat ){

putchar(symbol); // symbol prefix tells Processing what type of data is coming

printf("%d\r\n",dat); // the data to send culminating in a carriage return

}

void UART_init(void)

{

TMOD = 0x20; //定时器工作在定时器1的方式2

PCON = 0x00; //不倍频

SCON = 0x50; //串口工作在方式1,并且启动串行接收

TH1 = 0xFd; //设置波特率 9600

TL1 = 0xFd;

TR1 = 1; //启动定时器1

}

char putchar(unsigned char dat)

{

TI=0;

SBUF=dat;

while(!TI);

TI=0;

return SBUF;

}

void _nop_ (void)

{}

void T0_init(void){

// Initializes Timer0 to throw an interrupt every 2mS.

TMOD |= 0x01; //16bit TIMER

TL0=T0MS;

TH0=T0MS8;

TR0=1; //start Timer 0

ET0=1; //enable Timer Interrupt

EA=1; // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED

}

void T1_init(void){

// Initializes Timer0 to throw an interrupt every 2mS.

TMOD |= 0x01; //16bit TIMER

TL1=T0MS2;

TH1=T0MS28;

TR1=1; //start Timer 0

ET1=1; //enable Timer Interrupt

EA=1; // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED

}

void ADC_init(unsigned char channel)

{

P1ASF=ADC_MASKchannel; //选择P1. channel作为A/D输入来用

ADC_RES=0; //清除ADC结果寄存器RES

ADC_RESL=0; //清除ADC结果寄存器RESL

AUXR1 |= 0x04; //调整ADC格式的结果

}

void Timer1_rountine(void) interrupt 1

{}

unsigned int analogRead(unsigned char channel)

{

unsigned int result;

while (!(ADC_CONTR ADC_FLAG));//Wait complete flag

ADC_CONTR =!ADC_FLAG; //clear ADC FLAG

result=ADC_RES;

result=result8;

result+=ADC_RESL;

// ADC_CONTR|=channel|ADC_POWER|ADC_SPEEDLL|ADC_START;

return result;

}

// Timer 0中断子程序,每2MS中断一次,读取AD值,计算心率值

void Timer0_rountine(void) interrupt 1

{

int N;

unsigned char i;

// keep a running total of the last 10 IBI values

unsigned int runningTotal = 0; // clear the runningTotal variable

EA=0; // 关定时器中断

TL0=T0MS;

TH0=T0MS8; //重装16位定时器初值

Pressure = (GetADCResult(PressurePin)); //****************

DisBuff2[3] = Pressure%10+48;//取个位数

DisBuff2[2] = Pressure%100/10+48; //取十位数

DisBuff2[1] = Pressure%1000/100+48; //百位数 ***************

DisBuff2[0] = Pressure/1000+48;//取千位数

Signal = GetADCResult(PulsePin); // 读脉搏传感器

sampleCounter += 2; // 使用这个值跟踪记录脉搏时间间隔在ms级

N = sampleCounter - lastBeatTime; // 减上个节拍的时间来避免噪声

// 找到脉搏波的波峰和波谷

if(Signal thresh N (IBI/5)*3){ // 如果脉搏传感器输出小于电源电压一半 并且 消除噪声时间小于 3/5个脉搏时间间隔

if (Signal Trough){ // 如果脉搏传感器输出小于波谷

Trough = Signal; // 跟踪脉搏波的最低点

}

}

if(Signal thresh Signal Peak){ // 如果输出大于电源电压一半并且大于波峰

Peak = Signal; // 将新值设为波峰

} // 跟踪脉搏波的波峰

if (N 250){ // 避免高频噪声

if ( (Signal thresh) (Pulse == false) (N (IBI/5)*3) ){

Pulse = true; // 当检测到一个脉搏时将脉搏标志设为真

blinkPin=0; // 点亮脉搏灯

IBI = sampleCounter - lastBeatTime; // 测量两个脉搏的时间in mS

lastBeatTime = sampleCounter; // 跟踪脉搏时间

if(secondBeat){ // 如果这是第二个脉搏

secondBeat = false; // 清除标识

for(i=0; i=9; i++){ // 全部的数据作为真实脉搏BMP

rate[i] = IBI;

}

}

if(firstBeat){ // 如果是第一个脉搏

firstBeat = false; // 清除标志

secondBeat = true; // 设置第二脉搏标志

EA=1; //开中断

return; // IBI 值是不可靠的所以抛弃

}

for(i=0; i=8; i++){ // 移动数据在rate数组中

rate[i] = rate[i+1]; // 顶替旧值

runningTotal += rate[i]; // 加上第九个新值

}

rate[9] = IBI; // 加最后的IBI到rate数组中

runningTotal += rate[9]; // 加上一个IBI到runningTotal

runningTotal /= 10; // 取平均值

BPM = 60000/runningTotal; // 一分钟可以检测到多少个心跳及 BPM!

if(BPM200)BPM=200; //限制BPM最高显示值

if(BPM30)BPM=30; //限制BPM最低显示值

DisBuff[2] = BPM%10+48;//取个位数

DisBuff[1] = BPM%100/10+48; //取十位数

DisBuff[0] = BPM/100+48; //百位数

if(DisBuff[0]==48)

DisBuff[0]=32;

QS = true; // 设置QS标志

// QS FLAG IS NOT CLEARED INSIDE THIS ISR

}

}

if (Signal thresh Pulse == true){ // 当电压归零节拍结束

blinkPin=1; // 熄灭脉搏灯

Pulse = false; // 重置脉搏标识我们可以重新测

amp = Peak - Trough; // 得到脉搏波的峰峰值

thresh = amp/2 + Trough; // 设置thresh位脉搏峰峰值的一半

Peak = thresh; // 为下一次测试重置波峰

Trough = thresh;

}

if (N 2500){ //如果超过2.5秒没有检测到一个脉搏

thresh = 512; // 重新设置波谷

Peak = 512; // 重新设置波峰

Trough = 512; // 重新设置间隔

lastBeatTime = sampleCounter; // 把最后的节拍时间更新

firstBeat = true; // 重新设置标志避免噪声

secondBeat = false; // 当我们得到心跳的时候

}

EA=1; // 开中断

}// end isr

脉搏计数器的程序(用C语言编写程序)

#include reg51.h

unsigned char i,j,t,m,DelayTime,DispBuf[3];

unsigned int n,mb;

unsigned char code

BitTab[3]={0xf7,0xef,0xdf};//位驱动码

unsigned char code

DispTab[10]={0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84};//字形码

sbit P3_0=P3^0;

void delay(DelayTime);

main() //主程序

{

TMOD=0x01; //定时器T0工作于方式1

TH0=0xec;

TL0=0x78; //T0定时时间为5ms

IE=0X83; //开中断

IT0=1; //外部中断0为边沿触发方式

TR0=1; //开定时器T0

for(;;) //脉搏指示灯控制

{

if(P3_0==0)

{

delay(200);

P3_0=1;

}

}

}

external0() interrupt 0//外部中断服务程序

{

P3_0=0; //点亮指示灯

if(n==0)

mb=0;

else

mb=12000/n; //计算每分钟脉搏数

DispBuf[2]=mb%10;//取个位数

mb=mb/10;

DispBuf[1]=mb%10;//取十位数

DispBuf[0]=mb/10;//取百位数

n=0;

}

Timer0() interrupt 1//定时中断服务程序

{

TH0=0xec;

TL0=0x78;

t=BitTab[j];//取位值

P3=P3|0x38;//P3.3-P3.5送1

P3=P3t; //P3.3-P3.5输出取出的位值

t=DispBuf[j];//取出待显示的数

t=DispTab[t];//取字形码

P1=t; //字型码由P3输出显示

j++; //j作为数码管的计数器,取值0-2,显示程序通过它确认显示哪个数码管

if(j==3)

j=0;

n++;

if(n==2000)//10秒钟测不到心率,n复位

n=0;

}

void delay(DelayTime)//延时子程序

{

for(;DelayTime0;DelayTime--)

{

for(i=0;i250;i++)

;

}

}

c语言问题:求大神帮忙看一眼这个程序哪里有问题

这个问题关键在于计算闰年的个数,闰年比普通年份多了一天,所以最后天数直接加上闰年数就行了。(注意在循环时控制条件不用算当年是否为闰年,因为当年还没开始)以下是具体代码:

#include stdio.h

#includestdlib.h

main()

{   

int i,by,ty,r=0;

long unsigned min;

printf("Input your birth year:");

scanf("%d",by);

printf("Input this year:");

scanf("%d",ty);

for(i=by;ity;i++){

if(i%400==0||i%100!=0i%4==0)

r++;

}

min=((ty-by)*365+r)*24*60;

printf("The heart beats in your life: %lu",min*75);

system("pause");

}

心跳代码c语言

心跳代码C语言:while(1) {

printf("心跳");

delay(1000);

}网名:心跳之旅

拓展:记录我的每一段心跳,踏上旅程去寻找美丽的未来。


当前标题:c语言慢速测量心率函数 c语言测试cpu性能
标题网址:http://cqcxhl.com/article/dddesed.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP