赞
踩
电路构成:STM32F103C8T6单片机电路+时钟晶振电路+复位电路(上电自复位,手动复位)+LCD1602液晶显示屏电路+ADXL345计步检测传感器电路+DS18B20温度传感器电路+心率光电检测传感器+蓝牙模块+总电源供电电路;
功能介绍:
1.上电完成之后,通过重力角度检测,计算出整个行走的步数,通过步数的换算,得出行走的距离;
2.STM32驱动LCD1602液晶显示屏,实时动态显示步数的数据以及显示行走的距离,第二行数据显示步数,和走路的距离,;
3.DS18B20温度传感器可以检测温度的数据,将温度的数据显示在液晶显示屏上面;
4.心率光电检测传感器实时监测心率脉搏心跳数据,显示在液晶显示屏上面;
5.板载复位开关,重新清零,可以按下复位按键,重新开始计算步数和距离;
6.蓝牙模块可与手机相连接,并将数据上传至APP,实现手机实时监控;
#include "led.h" #include "delay.h" #include "sys.h" #include "usart.h" #include #include "timer.h" #include "key.h" #include "exti.h" #include "adxl345.h" #include "lcd1602.h" #include "ds18b20.h" unsigned char ReadAdxl345; /* 定时读取adxl345数据 */ unsigned char ErrorNum=0; /* 记录错误次数 */ unsigned char CheckNum=0; /* 检测次数 */ char dis0[16]; /* 液晶数组显示暂存 */ char dis1[35]; unsigned int xlTab[5]; /* 心率数组 */ unsigned char count=0; /* 心率滤波计数 */ unsigned int xinLater=0; /* 心率延时处理 */ unsigned int xinLv =0; /* 心率值 */ unsigned int BuShu=0; /* 步数 */ unsigned int Normal_num=0; /* 正常次数 */ unsigned int Error_num=0; /* 倾斜次数 */ unsigned int disBuShu = 0; /* 显示步数 */ float disJuLi = 0; /* 显示距离 */ float temperature; /* 温度 */ unsigned char readTemp = 0; /* 读取温度标志 */ int main(void) { delay_init(); /* 延时函数初始化 */ uart_init(9600); /* 串口初始化为9600 */ TIM3_Int_Init(49,7199); /* 50ms */ EXTIX_Init(); /* 初始化外部中断 */ LED_Init(); /* 初始化与LED连接的硬件接口 */ KEY_Init(); /* 初始化按键 */ Lcd_GPIO_init(); /* 初始化lcd引脚 */ Lcd_Init(); /* 初始化lcd屏幕 */ delay_ms(200); Init_ADXL345(); if(Single_Read_ADXL345(0X00)==0xe5) { delay_ms(5); } else { delay_ms(3); } while(1) { if(ReadAdxl345== 1) /* 定时读取adxl345数据 */ { ReadAdxl345= 0; ReadData_x(); /* 三轴检测函数 */ CheckNum++; if((temp_Y>450)||(temp_Y<-450)) /* 查看正常次数 */ { Normal_num++; /* 正常次数++ */ } else { Error_num++; /* 倾斜次数 */ } if((Error_num!=0)&&(Normal_num!=0)) /* 检测到步数 */ { BuShu++; /* 步数脉冲量++ */ Error_num=0; /* 清除一个周期检测 */ Normal_num=0; } } if(disFlag==1) /* 显示标志 */ { disFlag = 0; readTemp++; /* 定时计数 */ if(readTemp >= 8) /* 约800ms处理一次数据 温度 */ { readTemp =0; /* 重新计数 */ temperature=(float)DS18B20_Get_Temp()/10; /* 缩小10倍为实际值 */ } disBuShu = BuShu/2; /* 显示步数 */ disJuLi = disBuShu*0.45; /* 显示距离 */ sprintf(dis0,"X:%03d/min %4.1f C",xinLv,temperature); /* 打印 */ Lcd_Puts(0,0,(unsigned char *)dis0); /* 显示 */ Lcd_1Put(14,0,0xdf); /* 显示符号 */ sprintf(dis1,"BS:%03d JL:%4.1fm ",disBuShu,disJuLi); /* 打印 */ Lcd_Puts(0,1,(unsigned char *)dis1); /* 显示 */ } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。