久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6935|回復(fù): 4
收起左側(cè)

基于STM32F103的心率傳感器源代碼

[復(fù)制鏈接]
ID:301268 發(fā)表于 2019-5-10 18:26 | 顯示全部樓層 |閱讀模式
基于STM32F103的心率傳感器相關(guān)程序

單片機(jī)源程序如下:
  1. #include "led.h"
  2. #include "lcd.h"
  3. #include "key.h"
  4. #include "adc.h"         
  5. #include "timer.h"
  6. #include "common.h"
  7. #include "timer.h"
  8. #include "led.h"
  9. #include "beep.h"


  10. u8 q,i=0;
  11. u8 ave[50]={0};
  12. float ave_heart_rate=0;
  13. u8 sum(u8 m)
  14. {
  15.         ave[2]=ave[1];
  16.         ave[1]=ave[0];
  17.         ave[0]=m;
  18.         return ave[0]+ave[1]+ave[2];
  19. }
  20. //****************************************************************************
  21. //* 名    稱: u8 8Average(u8 ch,u8 times)
  22. //* 功    能:取times次,然后平均
  23. //* 入口參數(shù):ch: 采集每次i的值
  24. //*           times:獲取次數(shù)
  25. //* 返回參數(shù):通道ch的times次轉(zhuǎn)換結(jié)果平均值
  26. //* 說    明:      
  27. //****************************************************************************/
  28. u16 Average(u8 ch,u8 times)
  29. {
  30.         if(ave[2] == 0)
  31.         {
  32.                 if (ave[1] == 0)
  33.                 {return ch/1;}
  34.                 else
  35.                 {return ch/2;}
  36.         }
  37.                 return ch/3;
  38. }          
  39. /****************************************************************************
  40. * 名    稱: TIM2_Init(u16 auto_data,u16 fractional)
  41. * 功    能:定時(shí)器2初始化
  42. * 入口參數(shù):auto_data: 自動(dòng)重裝值
  43. *           fractional: 時(shí)鐘預(yù)分頻數(shù)
  44. * 返回參數(shù):無
  45. * 說    明:定時(shí)器溢出時(shí)間計(jì)算方法:Tout=((auto_data+1)*(fractional+1))/Ft(us)  Ft定時(shí)器時(shí)鐘     
  46. ****************************************************************************/
  47. void TIM2_Init(u16 auto_data,u16 fractional)
  48. {
  49.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  50.         NVIC_InitTypeDef NVIC_InitStructure;

  51.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //時(shí)鐘使能
  52.        
  53.         //定時(shí)器TIM2初始化
  54.         TIM_TimeBaseStructure.TIM_Period = auto_data; //設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值       
  55.         TIM_TimeBaseStructure.TIM_Prescaler = fractional; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值
  56.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  57.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  58.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據(jù)指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位

  59.         TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //使能指定的TIM2中斷,允許更新中斷

  60.         //中斷優(yōu)先級(jí)NVIC設(shè)置
  61.         NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM2中斷
  62.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //先占優(yōu)先級(jí)2級(jí)
  63.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //從優(yōu)先級(jí)3級(jí)
  64.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  65.         NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器

  66.         TIM_Cmd(TIM2, ENABLE);  //使能TIMx                                         
  67. }
  68. //定時(shí)器2中斷服務(wù)程序
  69. void TIM2_IRQHandler(void)   //TIM2中斷
  70. {
  71.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  //檢查TIM3更新中斷發(fā)生與否
  72.                 {               
  73.                         q++;                  //沒經(jīng)過1s,記一次數(shù)
  74.                         while(q == 60)        //每一分鐘重復(fù)一次
  75.                   {
  76.                                 LCD_DisplayNum(120,80,i*2/3,3,16,0);
  77.                         //BEEP=!BEEP;
  78.                                 ave_heart_rate=Average(sum(i*2/3),3);       //取3次心率的平均值

  79.                                 LCD_DisplayNum(150,110,ave_heart_rate,3,16,0);
  80.                                 LED1=!LED1;
  81.                                 q=0;
  82.                                 i=0;
  83.                         }
  84.                 }
  85.                 TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );    //清除TIMx更新中斷標(biāo)志
  86. }

  87. int main(void)
  88. {
  89.         u8 w=0,k=0;
  90.         int n=0,x=0;
  91.         float mov=0;
  92.         float qua;
  93.         u16 adc_data;
  94.         float temp;
  95.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級(jí)分組2
  96.         delay_init();       //初始化延時(shí)函數(shù)
  97.         LED_Init();                                        //初始化LED
  98.         LCD_Init();         //初始化LCD接口
  99.         TIM2_Init(10000,7199); //定時(shí)器2時(shí)鐘72M,分頻系數(shù)7200,72M/7200=10K 所以計(jì)數(shù)10000次為1000ms,函數(shù)內(nèi)部定時(shí)1min
  100.         ADC1_Init();        //初始化ADC
  101.         KEY_Init();       //按鍵初始化
  102.         LCD_Display_Dir(1);   //橫屏

  103.         while(1)
  104.         {
  105.                
  106.                 if(n==0)
  107.                 {
  108.                         BRUSH_COLOR=BLUE;//設(shè)置字體為藍(lán)色
  109.                         LCD_DisplayString(30,20,16,"heart_rate_VOL:");             
  110.                         //LCD_DisplayString(30,150,16,"ADC1_CH1_VOL:0.000V");         
  111.                         LCD_DisplayString(45,50,16,".");                       //先在固定位置顯示小數(shù)點(diǎn)  
  112.                         LCD_DisplayString(30,80,16,"heart_rate:");
  113.                         LCD_DisplayString(30,110,16,"AVE.heart rate:");
  114.                        
  115.                         adc_data=Get_Adc_Average(ADC_Channel_1,10);//獲取通道1的轉(zhuǎn)換值,10次取平均
  116.                         temp=(float)adc_data*(3.3/4096);            //獲取計(jì)算后的帶小數(shù)的實(shí)際電壓值,比如5.1141
  117.                         if(temp>=1.7)
  118.                         {        i++;
  119.                         }
  120.                         adc_data=temp;                              //賦值整數(shù)部分給adc_data變量,因?yàn)閍dc_data為u16整形
  121.                         LCD_DisplayNum(35,50,adc_data,1,16,0);    //顯示電壓值的整數(shù)部分,5.1141的話,這里就是顯示5
  122.                         temp-=adc_data;                             //把已經(jīng)顯示的整數(shù)部分去掉,留下小數(shù)部分,比如5.1141-5=0.1141
  123.                         temp*=1000;                                 //小數(shù)部分乘以1000,例如:0.1141就轉(zhuǎn)換為114.1,相當(dāng)于保留三位小數(shù)。
  124.                         LCD_DisplayNum(55,50,temp,3,16,0X80);     //顯示小數(shù)部分(前面轉(zhuǎn)換為了整形顯示),這里顯示的就是114.
  125.                         delay_ms(50);       
  126.                         key_scan(0);       
  127. //                        if(keydown_data==KEY0_DATA)   //key0按下后馬上執(zhí)行相應(yīng)代碼
  128. //                        {
  129. //                                w++;
  130. //                                LCD_DisplayString(30,150,16,"Movement:");        //移動(dòng)次數(shù)輸入個(gè)位
  131. //                                mov=10*k+w;
  132. //                                LCD_DisplayNum(110,150,mov,4,16,0);
  133. //                        }
  134. //                        if(keydown_data==KEY1_DATA)     //key1按下后馬上執(zhí)行相應(yīng)代碼
  135. //                        {
  136. //                                k++;
  137. //                                LCD_DisplayString(30,150,16,"Movement:");        //移動(dòng)次數(shù)輸入十位
  138. //                                mov=10*k+w;
  139. //                                LCD_DisplayNum(110,150,mov,4,16,0);
  140. //                        }
  141.                         if(keydown_data==KEY2_DATA)  
  142.                         {
  143.                                 LCD_DisplayString(30,200,16,"Sleep Quality:     %");
  144.                                 if(ave_heart_rate<=150&&ave_heart_rate>=50)        //心率在50~150之間時(shí)
  145.                                 qua=(float)(((1-mov/140)/2+(-0.006*ave_heart_rate+1.1)/2)*100);
  146.                                 if(ave_heart_rate>150)                          //心率大于150
  147.                                         qua=(float)(((1-mov/140)/2+(0.2)/2)*100);
  148.                                 LCD_DisplayNum(150,200,qua,4,16,0);
  149.                         }
  150.                                 delay_ms(50);
  151.                                 if(keydown_data==KEY3_DATA)
  152.                         {
  153.                                 n++;
  154.                         }
  155.                 }
  156.                 if(n==1)
  157.                 {
  158.                         LCD_Clear(WHITE);//清屏
  159.                         n++;
  160.                 }
  161.                 if(n==2)
  162.                 {
  163.                 adc_data=Get_Adc_Average(ADC_Channel_1,10);
  164.                         //獲取通道1的轉(zhuǎn)換值,10次取平均
  165.                 temp=50*(float)adc_data*(3.3/4096);           
  166.                         //獲取計(jì)算后的帶小數(shù)的實(shí)際電壓值,比如5.1141
  167.                 LCD_Color_DrawPoint(x,temp,RED);
  168.                 x++;
  169.                         if(x==320)
  170.                         {
  171.                                 LCD_Clear(WHITE);//清屏
  172.                                 x=0;
  173.                         }
  174.                 }
  175.         }
  176. }
復(fù)制代碼

所有資料51hei提供下載:
程序.7z (530.45 KB, 下載次數(shù): 190)
回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2019-5-11 03:56 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

ID:189285 發(fā)表于 2019-5-11 11:24 | 顯示全部樓層
這個(gè)東西好
回復(fù)

使用道具 舉報(bào)

ID:248814 發(fā)表于 2019-11-14 16:43 | 顯示全部樓層
好東西,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:644582 發(fā)表于 2019-11-18 22:26 | 顯示全部樓層
求分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本在线免费看最新的电影 | 欧美1区2区| 精品欧美一区二区中文字幕视频 | 视频一区二区中文字幕日韩 | 亚洲视频免费 | 国产精品一区二区三区久久 | 成人久久久| 国产精品电影网 | 极品一区| 午夜看看 | 美女视频网站久久 | 成人在线精品视频 | 天天久久 | 韩日精品在线观看 | 一级黄色毛片免费 | 久久国际精品 | 国产一区二区电影网 | 亚洲 精品 综合 精品 自拍 | 日本福利在线观看 | 成人一区二区三区在线观看 | 国产一级在线 | 午夜精品一区二区三区免费视频 | 欧美日韩高清一区二区三区 | 亚洲精品国产精品国自产在线 | 成人不卡视频 | 国产精品久久视频 | 日韩欧美一区二区三区四区 | 香蕉婷婷 | 91精品国产91久久综合桃花 | 亚洲一区成人 | 久久久久久久久久久久久9999 | 亚洲精品永久免费 | 日本在线中文 | 特级毛片爽www免费版 | www久| 特黄色一级毛片 | 无码日韩精品一区二区免费 | caoporn免费在线视频 | 天天爱av| 爽爽免费视频 | 日韩在线中文 |