當前位置:首頁 » 編程語言 » c語言心跳代碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言心跳代碼

發布時間: 2022-06-08 02:41:42

❶ 脈搏計數器的程序(用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=P3&t; //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(;DelayTime>0;DelayTime--)
{
for(i=0;i<250;i++)
;
}
}

❷ 誰有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(Pressure<100){
for(i=0;i<8;i++){
delay(1000);}
if (Pressure<100){
beep = 0;}}
if(BPM<60|BPM>100){
for(i=0;i<9;i++){
delay(1000);}
if(BPM<60|BPM>100){
beep = 0;}
for(i = 0;i<16;i++) //依次執行寫入操作
{
putchar(ucStr1[i]);
}
for(i = 0;i<16;i++) //依次執行寫入操作
{
putchar(ucStr2[i]);
}
for(i=0;i<3;i++)
{
putchar(DisBuff[i]);}
for(i = 0;i<16;i++) //依次執行寫入操作
{
putchar(ucStr3[i]);
}
for(i = 0;i<16;i++) //依次執行寫入操作
{
putchar(ucStr4[i]);
}
for(i=0;i<4;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=result<<8; //將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=T0MS>>8;
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=T0MS2>>8;
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_MASK<<channel; //選擇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=result<<8;
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=T0MS>>8; //重裝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(BPM>200)BPM=200; //限制BPM最高顯示值
if(BPM<30)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<bits/stdc++.h>
using namespace std;
int main(void)
{
int i,a[4],ans;
string t[4];
t[0]="1,2,3,4,5,6,7";
t[1]="1,3,5,7";
t[2]="2,3,6,7";
t[3]="4,5,6,7";
cout<<"讀心術猜數"<<endl;
cout<<"請你從下面7個數中,選一個並記在心裡。"<<endl;
cout<<t[0]<<endl;
system("pause");
for(i=1;i<=3;i++)
{
system("cls");
cout<<i<<"問:下面的數中有嗎?0:沒有,1:有"<<endl;
cout<<t[i]<<endl;
do
{
cin>>a[i];
}while(a[i]<0||a[i]>1);
}
ans=4*a[3]+2*a[2]+a[1];
system("cls");
cout<<"你心中想的數是:";
cout<<ans<<endl;
return 0;
}

❹ C語言編寫閃爍的紅心的程序

1、首先第一步要用在一個項目的spalsh界面,進入應用後彈出這個界面,閃爍完畢後跳入主界面,比純粹的設置背景圖片的splash好看炫酷很多。


❺ 求linux c語言的心跳包程序

首先,心跳包一般是30秒或者1分鍾一次才正常,3秒一次太頻繁,耗損資源,降低效率,心跳包其實就是你自己定義一條數據send給伺服器,伺服器recv到這條數據做下判斷就行了,如果1分鍾沒收到這條數據,就斷開此客戶端的socket連接,返回socket值,根據返回的值確定此客戶端掉線了.

❻ 用c語言寫一個程序,要求實現心跳計數,甚至輸出階躍波形

搞笑,這個跟你的硬體有關系,怎麼能寫,理論還沒有搞通,回家好好看書吧,不要想著在這投機取巧

❼ 心跳包。如何發送TCP空幀的心跳包,它的格式是什麼最好用c語言實現,因為我是在ARM上實現tcp協議

一位元組對齊
struct heartbeat_req{
short reqNum;
}
struct heartbeat_rcv{
short reqNum;
}
你所有的包都有一個公用的報文頭吧,報文頭裡面定義一個欄位記錄請求類型,一個欄位記錄數據部分長度,要空幀的心跳包就發一個沒數據部分的報文頭,請求類型欄位填心跳包類型,數據部分長度填0就行了

❽ C語言基本代碼,求詳細解釋,越詳細越好。

解釋如下:

#include"stdio.h"//頭文件

#include"math.h"//數學庫函數

double pcos(double a);//聲明子函數

main()//主函數

{

double x,y;//定義x,y這兩個雙精度數據

printf("please input one number:");

//輸出please input one number:

scanf("%lf",&x);//出入一個數據並賦值給x

y=pcos(x);//把x傳入pcos函數,返回值賦值給y

printf("cos of %lf is %lf ",x,y);//輸出cos of x is y

}

double pcos(double a)//定義子函數名,形式參數

{

double b;//定義雙精度數據b

b=cos(a);//計算cos(a),並賦值給b

return b;//返回b的值

}

(8)c語言心跳代碼擴展閱讀:

注釋就是對代碼的解釋和說明,其目的是讓人們能夠更加輕松地了解代碼。注釋是編寫程序時,寫程序的人給一個語句、程序段、函數等的解釋或提示,能提高程序代碼的可讀性。

注釋就是對代碼的解釋和說明。目的是為了讓別人和自己很容易看懂。為了讓別人一看就知道這段代碼是做什麼用的。

正確的程序注釋一般包括序言性注釋和功能性注釋。序言性注釋的主要內容包括模塊的介面、數據的描述和模塊的功能。模塊的功能性注釋的主要內容包括程序段的功能、語句的功能和數據的狀態。

❾ c語言問題:求大神幫忙看一眼這個程序哪裡有問題

這個問題關鍵在於計算閏年的個數,閏年比普通年份多了一天,所以最後天數直接加上閏年數就行了。(注意在循環時控制條件不用算當年是否為閏年,因為當年還沒開始)以下是具體代碼:

#include<stdio.h>
#include<stdlib.h>

main()
{
inti,by,ty,r=0;
longunsignedmin;
printf("Inputyourbirthyear:");
scanf("%d",&by);
printf("Inputthisyear:");
scanf("%d",&ty);
for(i=by;i<ty;i++){
if(i%400==0||i%100!=0&&i%4==0)
r++;
}
min=((ty-by)*365+r)*24*60;
printf("Theheartbeatsinyourlife:%lu",min*75);
system("pause");
}

❿ c語言編程,一個應用程序如何判斷另外一個被監控的應用程序的存活與否若用心跳實現,如何設置心跳機制

APP-2每1分鍾發一個心跳包給APP-1。APP-1如果超過1分鍾沒收到,可以累計記錄x++,收到心跳包x清零。當x=2時,可以發送一個ack包給APP-2,如果APP-2還是沒有回應,即x=3時,可以確定APP-2down掉。x在1~3直接時是網路阻塞。具體操作時間還需要自行確定。