久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于STM32F103的心率傳感器源代碼
[打印本頁]
作者:
jokergcl
時間:
2019-5-10 18:26
標題:
基于STM32F103的心率傳感器源代碼
基于STM32F103的心率傳感器相關程序
單片機源程序如下:
#include "led.h"
#include "lcd.h"
#include "key.h"
#include "adc.h"
#include "timer.h"
#include "common.h"
#include "timer.h"
#include "led.h"
#include "beep.h"
u8 q,i=0;
u8 ave[50]={0};
float ave_heart_rate=0;
u8 sum(u8 m)
{
ave[2]=ave[1];
ave[1]=ave[0];
ave[0]=m;
return ave[0]+ave[1]+ave[2];
}
//****************************************************************************
//* 名 稱: u8 8Average(u8 ch,u8 times)
//* 功 能:取times次,然后平均
//* 入口參數:ch: 采集每次i的值
//* times:獲取次數
//* 返回參數:通道ch的times次轉換結果平均值
//* 說 明:
//****************************************************************************/
u16 Average(u8 ch,u8 times)
{
if(ave[2] == 0)
{
if (ave[1] == 0)
{return ch/1;}
else
{return ch/2;}
}
return ch/3;
}
/****************************************************************************
* 名 稱: TIM2_Init(u16 auto_data,u16 fractional)
* 功 能:定時器2初始化
* 入口參數:auto_data: 自動重裝值
* fractional: 時鐘預分頻數
* 返回參數:無
* 說 明:定時器溢出時間計算方法:Tout=((auto_data+1)*(fractional+1))/Ft(us) Ft定時器時鐘
****************************************************************************/
void TIM2_Init(u16 auto_data,u16 fractional)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //時鐘使能
//定時器TIM2初始化
TIM_TimeBaseStructure.TIM_Period = auto_data; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler = fractional; //設置用來作為TIMx時鐘頻率除數的預分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據指定的參數初始化TIMx的時間基數單位
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //使能指定的TIM2中斷,允許更新中斷
//中斷優先級NVIC設置
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM2中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占優先級2級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //從優先級3級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
TIM_Cmd(TIM2, ENABLE); //使能TIMx
}
//定時器2中斷服務程序
void TIM2_IRQHandler(void) //TIM2中斷
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //檢查TIM3更新中斷發生與否
{
q++; //沒經過1s,記一次數
while(q == 60) //每一分鐘重復一次
{
LCD_DisplayNum(120,80,i*2/3,3,16,0);
//BEEP=!BEEP;
ave_heart_rate=Average(sum(i*2/3),3); //取3次心率的平均值
LCD_DisplayNum(150,110,ave_heart_rate,3,16,0);
LED1=!LED1;
q=0;
i=0;
}
}
TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //清除TIMx更新中斷標志
}
int main(void)
{
u8 w=0,k=0;
int n=0,x=0;
float mov=0;
float qua;
u16 adc_data;
float temp;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
delay_init(); //初始化延時函數
LED_Init(); //初始化LED
LCD_Init(); //初始化LCD接口
TIM2_Init(10000,7199); //定時器2時鐘72M,分頻系數7200,72M/7200=10K 所以計數10000次為1000ms,函數內部定時1min
ADC1_Init(); //初始化ADC
KEY_Init(); //按鍵初始化
LCD_Display_Dir(1); //橫屏
while(1)
{
if(n==0)
{
BRUSH_COLOR=BLUE;//設置字體為藍色
LCD_DisplayString(30,20,16,"heart_rate_VOL:");
//LCD_DisplayString(30,150,16,"ADC1_CH1_VOL:0.000V");
LCD_DisplayString(45,50,16,"."); //先在固定位置顯示小數點
LCD_DisplayString(30,80,16,"heart_rate:");
LCD_DisplayString(30,110,16,"AVE.heart rate:");
adc_data=Get_Adc_Average(ADC_Channel_1,10);//獲取通道1的轉換值,10次取平均
temp=(float)adc_data*(3.3/4096); //獲取計算后的帶小數的實際電壓值,比如5.1141
if(temp>=1.7)
{ i++;
}
adc_data=temp; //賦值整數部分給adc_data變量,因為adc_data為u16整形
LCD_DisplayNum(35,50,adc_data,1,16,0); //顯示電壓值的整數部分,5.1141的話,這里就是顯示5
temp-=adc_data; //把已經顯示的整數部分去掉,留下小數部分,比如5.1141-5=0.1141
temp*=1000; //小數部分乘以1000,例如:0.1141就轉換為114.1,相當于保留三位小數。
LCD_DisplayNum(55,50,temp,3,16,0X80); //顯示小數部分(前面轉換為了整形顯示),這里顯示的就是114.
delay_ms(50);
key_scan(0);
// if(keydown_data==KEY0_DATA) //key0按下后馬上執行相應代碼
// {
// w++;
// LCD_DisplayString(30,150,16,"Movement:"); //移動次數輸入個位
// mov=10*k+w;
// LCD_DisplayNum(110,150,mov,4,16,0);
// }
// if(keydown_data==KEY1_DATA) //key1按下后馬上執行相應代碼
// {
// k++;
// LCD_DisplayString(30,150,16,"Movement:"); //移動次數輸入十位
// mov=10*k+w;
// LCD_DisplayNum(110,150,mov,4,16,0);
// }
if(keydown_data==KEY2_DATA)
{
LCD_DisplayString(30,200,16,"Sleep Quality: %");
if(ave_heart_rate<=150&&ave_heart_rate>=50) //心率在50~150之間時
qua=(float)(((1-mov/140)/2+(-0.006*ave_heart_rate+1.1)/2)*100);
if(ave_heart_rate>150) //心率大于150
qua=(float)(((1-mov/140)/2+(0.2)/2)*100);
LCD_DisplayNum(150,200,qua,4,16,0);
}
delay_ms(50);
if(keydown_data==KEY3_DATA)
{
n++;
}
}
if(n==1)
{
LCD_Clear(WHITE);//清屏
n++;
}
if(n==2)
{
adc_data=Get_Adc_Average(ADC_Channel_1,10);
//獲取通道1的轉換值,10次取平均
temp=50*(float)adc_data*(3.3/4096);
//獲取計算后的帶小數的實際電壓值,比如5.1141
LCD_Color_DrawPoint(x,temp,RED);
x++;
if(x==320)
{
LCD_Clear(WHITE);//清屏
x=0;
}
}
}
}
復制代碼
所有資料51hei提供下載:
程序.7z
(530.45 KB, 下載次數: 190)
2019-5-11 03:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2019-5-11 03:56
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者:
22793088
時間:
2019-5-11 11:24
這個東西好
作者:
13574103468
時間:
2019-11-14 16:43
好東西,學習了
作者:
sycsycsyc
時間:
2019-11-18 22:26
求分享
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲男人天堂
|
秋霞在线一区
|
国产精品a久久久久
|
久久99成人
|
天天操 夜夜操
|
亚洲一区二区免费视频
|
jlzzjlzz国产精品久久
|
一级在线观看
|
91精品国产综合久久久动漫日韩
|
欧美成人精品一区二区男人看
|
久久久久久久91
|
国产精品久久久久久久久久久久久
|
网站国产
|
午夜精品三区
|
亚洲一区二区三区免费
|
国产粉嫩尤物极品99综合精品
|
韩日一区
|
在线欧美一区
|
在线欧美小视频
|
国产精品视频免费观看
|
中文字幕一区在线观看视频
|
亚洲综合久久久
|
在线婷婷
|
中文字幕一区二区三区精彩视频
|
久久久成人网
|
久久9久
|
一道本视频
|
成年人视频免费在线观看
|
国产精品国产三级国产aⅴ浪潮
|
国产综合视频
|
久久精品久久久久久
|
性高湖久久久久久久久3小时
|
成人精品一区二区
|
九九亚洲精品
|
精品欧美乱码久久久久久
|
999视频
|
久久亚洲精品久久国产一区二区
|
国产区在线观看
|
成人免费视频网站在线看
|
国产精品高潮呻吟久久
|
天天干天天谢
|