您的位置:首頁>設計>正文

單片機心率計設計(電路圖+原始程式碼)

功能

51單片機做的心率計設計, 能即時測量脈搏, 並通過led燈閃爍代表脈搏跳動, 有報警功能

模擬及電路圖

模擬

電路圖

部分程式

#include

#include // 包含標頭檔

#define uint unsigned int

#define uchar unsigned char

#define ulong unsigned long //巨集定義

#define LCD_DATA P0 //定義P0口為LCD_DATA

sbit LCD_RS =P2^5;

sbit LCD_RW =P2^6;

sbit LCD_E =P2^7; //定義LCD控制引腳

sbit Xintiao =P1^0 ; //脈搏檢測輸入端定義

sbit speaker =P2^4; //蜂鳴器引腳定義

void delay5ms(void); //誤差 0us

void LCD_WriteData(uchar LCD_1602_DATA); /********LCD1602資料寫入***********/

void LCD_WriteCom(uchar LCD_1602_COM); /********LCD1602命令寫入***********/

void lcd_1602_word(uchar Adress_Com,uchar Num_Adat,uchar *Adress_Data); /*1602字元顯示函數, 變數依次為字元顯示首位址, 顯示字元長度, 所顯示的字元*/

void InitLcd();//液晶初始化函數

void Tim_Init();

uchar Xintiao_Change=0; //

uint Xintiao_Jishu;

uchar stop;

uchar View_Data[3];

uchar View_L[3];

uchar View_H[3];

uchar Xintiao_H=100; //脈搏上限

uchar Xintiao_L=40; //脈搏下限

uchar Key_Change;

uchar Key_Value; //按鍵鍵值

uchar View_Con; //設置的位(0正常工作,

1設置上限, 2設置下限)

uchar View_Change;

void main() //主函數

{

InitLcd();

Tim_Init();

lcd_1602_word(0x80,16,"Heart Rate: "); //初始化顯示

TR0=1;

TR1=1; //打開計時器

while(1) //進入迴圈

{

if(Key_Change) //有按鍵按下並已經得出鍵值

{

Key_Change=0; //將按鍵使能變數清零, 等待下次按鍵按下

View_Change=1;

switch(Key_Value) //判斷鍵值

{

case 1: //設置鍵按下

{

View_Con++; //設置的位加

if(View_Con==3) //都設置好後將此變數清零

View_Con=0;

break; //跳出, 下同

}

case 2: //加鍵按下

{

if(View_Con==2) //判斷是設置上限

{

if(Xintiao_H<150) //上限數值小於150

Xintiao_H++; //上限+

}

if(View_Con==1) //如果是設置下限

{

if(Xintiao_L

Xintiao_L++; //下限值加

}

break;

}

case 3: //減鍵按下

{

if(View_Con==2) //設置上限

{

if(Xintiao_H>Xintiao_L+1)//上限資料大於下限+1(同樣上限值不能小於下限)

Xintiao_H--; //上限數據減

}

if(View_Con==1) //設置下限

{

if(Xintiao_L>30) //下限資料大於30時

Xintiao_L--; //下限數據減

}

break;

}

}

}

if(View_Change)//開始顯示變數

{

View_Change=0;//變數清零

if(stop==0) //心率正常時

{

if(View_Data[0]==0x30) //最高位元為0時不顯示

View_Data[0]=' ';

}

else //心率不正常(計數超過5000, 也就是兩次信號時間超過5s)不顯示資料

{

View_Data[0]=' ';

View_Data[1]=' ';

View_Data[2]=' ';

}

switch(View_Con)

{

case 0: //正常顯示

{

lcd_1602_word(0x80,16,"Heart Rate: ");//顯示一行資料

lcd_1602_word(0xc0,16," ");//顯示第二行資料

lcd_1602_word(0xcd,3,View_Data); //第二行顯示心率

break;

}

case 1: //設置下限時顯示

{

lcd_1602_word(0x80,16,"Heart Rate: ");//第一行顯示心率

lcd_1602_word(0x8d,3,View_Data);

View_L[0]=Xintiao_L/100+0x30; //將下限數據拆字

View_L[1]=Xintiao_L%100/10+0x30;

View_L[2]=Xintiao_L%10+0x30;

if(View_L[0]==0x30) //最高位為0時, 不顯示

View_L[0]=' ';

lcd_1602_word(0xC0,16,"Warning L : ");//第二行顯示下限資料

lcd_1602_word(0xCd,3,View_L);

break;

}

case 2: //設置上限時顯示(同上)

{

lcd_1602_word(0x80,16,"Heart Rate: ");

lcd_1602_word(0x8d,3,View_Data);

View_H[0]=Xintiao_H/100+0x30;

View_H[1]=Xintiao_H%100/10+0x30;

View_H[2]=Xintiao_H%10+0x30;

if(View_H[0]==0x30)

View_H[0]=' ';

lcd_1602_word(0xC0,16,"Warning H : ");

lcd_1602_word(0xCd,3,View_H);

break;

}

}

}

}

}

....................................................................................................

限於本文篇幅, 餘下代碼及高清圖請前往“51黑電子論壇“下載附件, 直達------------------------------------------------------------

//www.51hei.com/bbs/forum.php?mod=viewthread&tid=42461&extra=page%3D1%26filter%3Dlastpost%26orderby%3Dlastpost--------

Next Article
喜欢就按个赞吧!!!
点击关闭提示