標題:
心率儀原理圖帶仿真及代碼源程序
[打印本頁]
作者:
artas
時間:
2017-6-19 09:34
標題:
心率儀原理圖帶仿真及代碼源程序
仿真圖
心率儀原理圖.png
(11.54 KB, 下載次數(shù): 59)
下載附件
2017-6-19 09:33 上傳
原理圖:
2.png
(65.21 KB, 下載次數(shù): 84)
下載附件
2017-6-19 09:33 上傳
單片機源程序:
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define LCD_DATA P0
sbit LCD_RS =P2^5;
sbit LCD_RW =P2^6;
sbit LCD_E =P2^7;
sbit Xintiao =P1^0 ;
sbit speaker =P2^4;
void delay5ms(void); //誤差 0us
void LCD_WriteData(uchar LCD_1602_DATA); /********LCD1602數(shù)據(jù)寫入***********/
void LCD_WriteCom(uchar LCD_1602_COM); /********LCD1602命令寫入***********/
void lcd_1602_word(uchar Adress_Com,uchar Num_Adat,uchar *Adress_Data); /*1602字符顯示函數(shù),變量依次為字符顯示首地址,顯示字符長度,所顯示的字符*/
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;
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)
Xintiao_H++;
}
if(View_Con==1)
{
if(Xintiao_L<Xintiao_H-1)
Xintiao_L++;
}
break;
}
case 3:
{
if(View_Con==2)
{
if(Xintiao_H>Xintiao_L+1)
Xintiao_H--;
}
if(View_Con==1)
{
if(Xintiao_L>30)
Xintiao_L--;
}
break;
}
}
}
if(View_Change)
{
View_Change=0;
if(stop==0)
{
if(View_Data[0]==0x30)
View_Data[0]=' ';
}
else
{
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)
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;
}
}
}
}
}
void Time1() interrupt 3
{
static uchar Key_Con,Xintiao_Con;
TH1=0xd8; //10ms
TL1=0xf0;
switch(Key_Con)
{
case 0:
{
if((P3&0x07)!=0x07)
{
Key_Con++;
}
break;
}
case 1:
{
if((P3&0x07)!=0x07)
{
Key_Con++;
switch(P3&0x07)
{
case 0x06:Key_Value=1;break;
case 0x05:Key_Value=2;break;
case 0x03:Key_Value=3;break;
}
}
else
{
Key_Con=0;
}
break;
}
case 2:
{
if((P3&0x07)==0x07)
{
Key_Change=1;
Key_Con=0;
}
break;
}
}
switch (Xintiao_Con)
{
case 0:
{
if(!Xintiao)
{
Xintiao_Con++;
}
break;
}
case 1:
{
if(!Xintiao)
{
Xintiao_Con++;
}
else
{
Xintiao_Con=0;
}
break;
}
case 2:
{
if(!Xintiao)
{
Xintiao_Con++;
}
else
{
Xintiao_Con=0;
}
break;
}
case 3:
{
if(!Xintiao)
{
Xintiao_Con++;
}
else
{
Xintiao_Con=0;
}
break;
}
case 4:
{
if(Xintiao)
{
if(Xintiao_Change==1)
{
View_Data[0]=(60000/Xintiao_Jishu)/100+0x30;
View_Data[1]=(60000/Xintiao_Jishu)%100/10+0x30;
View_Data[2]=(60000/Xintiao_Jishu)%10+0x30;
if(((60000/Xintiao_Jishu)>=Xintiao_H)||((60000/Xintiao_Jishu)<=Xintiao_L))
speaker=0;
else
speaker=1;
View_Change=1;
Xintiao_Jishu=0;
Xintiao_Change=0;
stop=0;
}
else
{
Xintiao_Jishu=0;
Xintiao_Change=1;
}
Xintiao_Con=0;
break;
}
}
}
}
void Time0() interrupt 1
{
TH0=0xfc; //1ms
TL0=0x18;
Xintiao_Jishu++;
if(Xintiao_Jishu==5000)
{
Xintiao_Jishu=0;
View_Change=1;
Xintiao_Change=0;
stop=1;
speaker=1;
}
}
void Tim_Init()
{
EA=1;
ET0=1;
ET1=1;
TMOD=0x11;
TH0=0xfc; //1ms
TL0=0x18;
TH1=0xd8; //10ms
TL1=0xf0;
}
void lcd_1602_word(uchar Adress_Com,uchar Num_Adat,uchar *Adress_Data)
{
uchar a=0;
uchar Data_Word;
LCD_WriteCom(Adress_Com);
for(a=0;a<Num_Adat;a++)
{
Data_Word=*Adress_Data;
LCD_WriteData(Data_Word);
Adress_Data++;
}
}
/***************1602函數(shù)*******************/
void LCD_WriteData(uchar LCD_1602_DATA) /********LCD1602數(shù)據(jù)寫入***********/
{
delay5ms(); //操作前短暫延時,保證信號穩(wěn)定
LCD_E=0;
LCD_RS=1;
LCD_RW=0;
_nop_();
LCD_E=1;
LCD_DATA=LCD_1602_DATA;
LCD_E=0;
LCD_RS=0;
}
/********LCD1602命令寫入***********/
void LCD_WriteCom(uchar LCD_1602_COM)
{
delay5ms();//操作前短暫延時,保證信號穩(wěn)定
LCD_E=0;
LCD_RS=0;
LCD_RW=0;
_nop_();
LCD_E=1;
LCD_DATA=LCD_1602_COM;
LCD_E=0;
LCD_RS=0;
}
void InitLcd()
{
delay5ms();
delay5ms();
LCD_WriteCom(0x38); //display mode
LCD_WriteCom(0x38); //display mode
LCD_WriteCom(0x38); //display mode
LCD_WriteCom(0x06); //顯示光標移動位置
LCD_WriteCom(0x0c); //顯示開及光標設置
LCD_WriteCom(0x01); //顯示清屏
delay5ms();
delay5ms();
}
void delay5ms(void) //誤差 0us
{
unsigned char a,b;
for(b=185;b>0;b--)
for(a=12;a>0;a--);
}
復制代碼
作者:
faridzled
時間:
2017-6-19 17:27
thanks for sharing
作者:
炎黃傳奇
時間:
2017-11-8 11:04
View_Data[1]=(60000/Xintiao_Jishu)%100/10+0x30;
if(Xintiao_Jishu==5000)這兩條語句具體表示什么含義,求樓主解析一下
作者:
ddwe
時間:
2017-11-9 13:34
謝謝!感謝分享。!
作者:
userstar
時間:
2017-11-9 14:24
謝謝!感謝分享。。
作者:
15938659710
時間:
2021-12-3 18:03
這個用的是MAX30102傳感器嗎???
作者:
cuijb
時間:
2023-12-18 10:45
真的只是個仿真圖片
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1