欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 基于51單片機(jī)的心率計(jì)程序設(shè)計(jì) [打印本頁(yè)]

作者: 很不回復(fù)    時(shí)間: 2019-6-10 21:14
標(biāo)題: 基于51單片機(jī)的心率計(jì)程序設(shè)計(jì)
一.原理圖

二.程序
#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ù),變量依次為字符顯示首地址,顯示字符長(zhǎng)度,所顯示的字符*/
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();  //操作前短暫延時(shí),保證信號(hào)穩(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();//操作前短暫延時(shí),保證信號(hào)穩(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); //顯示光標(biāo)移動(dòng)位置
LCD_WriteCom(0x0c); //顯示開及光標(biāo)設(shè)置
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--);
}
有什么問題私聊我。


作者: brewster    時(shí)間: 2019-6-11 19:46
那個(gè)心率是怎么采集的?
作者: 123AFWEFG    時(shí)間: 2020-11-29 15:28

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P1^0;                             //數(shù)據(jù)與命令選擇控制引腳
sbit rw=P1^1;                                 //讀與寫選擇控制引腳
sbit en=P1^2;                                 //使能擇控制引腳
sbit bf=P0^7;                                 //忙標(biāo)志位

sbit P32=P3^2;

unsigned char i=0,timecount=0,displayOK=0,rate=0,aa=0;
unsigned int time[6]={0};

/************ 延時(shí)函數(shù)  *****************/
void delay(uint z)
{
   while(z--);
}
/************ 忙檢測(cè)函數(shù)  *****************/
void jiance()
{
  P0=0xff;
  rs=0;rw=1;en=1;
  while(bf);                        //如果BF==1表示液晶在忙
  en=0;
}
/************ 寫命令函數(shù)  *****************/
void write_com(uchar com)
{
   jiance();
   P0=com;
   rs=0;rw=0;en=1;
   delay(2);
   en=0;
}
/************ 寫數(shù)據(jù)函數(shù)  *****************/
void write_dat(uchar dat)
{
   jiance();
   P0=dat;
   rs=1;rw=0;en=1;
   delay(2);
   en=0;
}
/************ 1602液晶初始化函數(shù)  *****************/
void init_lcd()
{
   write_com(0x38);           // 設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
   write_com(0x0c);           // 開顯示,不顯示光標(biāo)
   write_com(0x06);           // 地址加1,當(dāng)寫入數(shù)據(jù)的時(shí)候光標(biāo)右移
   write_com(0x01);           //清屏
}

/******************************************************************/
/*                   在指定位置寫字符                                 */
/******************************************************************/
void LCD_write_char(unsigned char x,unsigned char y,unsigned char Data)
{     
    if (y == 0)  
    write_com(0x80 + x);     
    else     
    write_com(0xC0 + x);            
    write_dat(Data);  
}
void DelayMs(unsigned int z)
{
   unsigned int x;
   for(;z>0;z--)
     for(x=110;x>0;x--);
}         
void main()
{
                P32=1;
                init_lcd();//lcd初始化
                TCON=0x01;//設(shè)置外部中斷0
                EX0=1;
                TMOD=0x01;//定時(shí)器0初始化
                TH0=(65536-50000)/256;//實(shí)測(cè)每50ms中斷的定時(shí)值
                TL0=(65536-50000)%256;
                ET0=1;//開定時(shí)器中斷
                //顯示基本文字
                LCD_write_char(3,0,'H');
                LCD_write_char(4,0,'e');
                LCD_write_char(5,0,'a');
                LCD_write_char(6,0,'r');
                LCD_write_char(7,0,'t');
                LCD_write_char(8,0,' ');
                LCD_write_char(9,0,'R');
                LCD_write_char(10,0,'a');
                LCD_write_char(11,0,'t');
                LCD_write_char(12,0,'e');

                LCD_write_char(8,1,'/');
                LCD_write_char(9,1,'m');
                LCD_write_char(10,1,'i');
                LCD_write_char(11,1,'n');
                TR0=0;//定時(shí)器停止
                EA=1;//開總中斷
                while(1)
                {
                                
                                if(displayOK==1)
                                {
                                                rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
                                                LCD_write_char(5,1,rate/100+48);
                                                LCD_write_char(6,1,(rate%100)/10+48);
                                                LCD_write_char(7,1,rate%10+48);
                                }
                                DelayMs(300);
                }
}

void ex0() interrupt 0
{
                EX0=0;//暫時(shí)關(guān)外部中斷
                if(timecount<8)   //當(dāng)連續(xù)兩次檢測(cè)時(shí)間間隔小于8*50ms=400ms不處理
                {
                                TR0=1;//開定時(shí)器
                }
                else
                {
                                time[i]=timecount*50+TH0*0.256+TL0/1000;//算出間隔時(shí)間
                                TL0=(65536-50000)%256;//重新設(shè)置定時(shí)器
                                TH0=(65536-50000)/256;
                                timecount=0;//50ms計(jì)數(shù)清零
                                i++;
                                if(i==6)//記錄到超過等于6次時(shí)間
                                {
                                                i=1;//計(jì)數(shù)從1開始
                                                displayOK=1;    //測(cè)得5次開始顯示
                                }        
                                
                }
                EX0=1;
}
void et0() interrupt 1
{
                TL0=(65536-50000)%256;
                TH0=(65536-50000)/256;
                        
                timecount++;//每50ms一次計(jì)數(shù)
                if(timecount>25)     //當(dāng)超過25*50ms=1.25s沒有檢測(cè)到信號(hào)停止顯示
                {
                                i=0;//數(shù)據(jù)個(gè)數(shù)清零
                                timecount=0;//50ms計(jì)數(shù)清零
                                displayOK=0;//顯示關(guān)
                                TR0=0;//定時(shí)器關(guān)
                                TH0=(65536-50000)/256;
                                TL0=(65536-50000)%256;
                }
}




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1