怎样去设计一种基于STM32单片机的智能手环脉搏心率计步器呢

发布者:TranquilVibes最新更新时间:2024-09-27 来源: elecfans关键字:STM32  单片机  智能手环 手机看文章 扫描二维码
随时随地手机看文章

一:功能

基于STM32单片机智能手环心率计步器体温显示设计

本设计由STM32F103C8T6单片机核心板电路+ADXL345传感器电路+心率传感器电路+温度传感器+lcd1602电路组成。

1、通过重力加速度传感器ADXL345检测人的状态,计算出走步数、走路距离和平均速度。

2、通过心率传感器实时检测心率,通过温度传感器检测温度。

3、lcd1602实时显示步数、距离和平均速度、心率以及温度值。


二:电路图

77f6f47a-4f39-11ed-a3b6-dac502259ad0.png

三:源代码


#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;

            }

[1] [2]
关键字:STM32  单片机  智能手环 引用地址:怎样去设计一种基于STM32单片机的智能手环脉搏心率计步器呢

上一篇:STM32G0系列多通道ADC的问题避坑速看!
下一篇:STM32软件运行过程,如何查看全局变量的实时数据?

推荐阅读最新更新时间:2024-11-12 11:33

数字单片机的技术发展
数字单片机的技术进步反映在内部结构、功率消耗、外部电压等级以及制造工艺上。在这几方面,较为典型地说明了数字单片机的水平。在目前,用户对单片机的需要越来越多,但是,要求也越来越高。下面分别就这四个方面说明单片机的技术进步状况。 1、 内部结构的进步 单片机在内部已集成了越来越多的部件,这些部件包括一般常用的电路,例如:定时器,比较器,A/D转换器,D /A转换器,串行通信接口,Watchdog电路,LCD控制器等。 有的单片机为了构成控制网络或形成局部网,内部含有局部网络控制模块CAN。例如,Infineon公司的C 505C,C515C,C167CR,C167CS-32FM,81C90;Motorola公司的68HC08AZ
[单片机]
基于PICFxx单片机控制的正弦波逆变电源
  逆变电源是一种采用电力电子技术进行电能变换的装置。随着电力电子技术的发展,逆变电源的应用越来越广泛,但应用系统对逆变电源的输出电压波形特性也随之提出了越来越高的要求,因为电源的输出波形质量直接关系到整个系统的安全和可靠性指标。   随着数字信号处理技术的发展,以SPWM控制方式设计的逆变电源越来越受到青睐。本文介绍的SPWM逆变电源就是采用PIC单片机来实现SPWM控制和正弦波方式输出,而且电路简单,性能安全可靠,灵活性强,同时可以降低谐波,提高效率。    1 SPWM逆变器结构   逆变电源的拓扑结构有多种形式,图l所示是SPWM逆变电源的基本结构,它主要由变压器中心抽头推挽式升压电路、逆变电路、滤波电路、驱动
[电源管理]
基于PICFxx<font color='red'>单片机</font>控制的正弦波逆变电源
采用PIC16C54的计数器
计数器在工业控制中有着广泛的应用。传统的数字计数器都是用中小规模数字集成电路构成的,不但电路复杂,成本高,功能修改也不易。用单片机制作的计数器可以克服传统数字电路计数器的局限,有着广阔的应用前景。 本文介绍的计数器采用Microchip公司的PIC16C54单片机。该型单片机为RISC结构,在4MHz的工作频率下,每一个指令周期为1 s,运行速度大大超过MCS-51系列,适用于对实时性要求较高的工业控制领域。 电路原理 附图为计数器的原理图。PIC16C54具有两个I/O口,RA口有4条I/O线,RB口有8条I/O线。本计数器中RA口设置为输入口,用于读取BCD拨盘开关(BCD1~BCD5)设定的计数值;RB口设置为输出口,用
[单片机]
采用PIC16C54的计数器
实用STM32的串口控制平台的实现
1. 前言 玩过Linux的朋友, 是不是对Linux无所不能的串口Shell命令控制台羡慕不已, 要是自己做的STM32F系列低档次的MCU也有这种控制交互能力, 会给调试/维护和配置省下多少麻烦事呀, 比如启动/关闭调试或自检模式, 打印调试信息, 配置系统参数, 传输文件等等, 也有相当多的朋友凭借自己出色的编程能力可以实现这些功能, 这里提出我的这个解决方案, 以作交流. 本平台(xc_shell)具备以下性能特点: 1) 大量主要代码, 和具体硬件无关, 移植性强,代码文件少. 2) 只有在处理用户的输入命令时, 才占用CPU资源, 且代码可裁剪到1KB SRAM和4KB Flash; 3) 用户可以非常灵活的添加按
[单片机]
实用<font color='red'>STM32</font>的串口控制平台的实现
STM32库函数详解----(通用输入/输出GPIO)
初始化和配置相关函数 1.void GPIO_DeInit (GPIO_TypeDef* GPIOx) 函数解释:gpio的反初始化函数,该函数的作用是把GPIO相关的寄存器配置成上电复位后的默认状态,在第一次初始化前或者不在使用某一接口后,可以调用该函数。 参数:GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。 2.void GPIO_Init (GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct) 函数解释:GPIO的初始化函数,该函数的作用是对io进行初始化。 参数:(1)GPIOx,GPIO的分组,如 GPI
[单片机]
STM32 USB NAND FLASH 模拟U盘
这次是做一个SD卡的USB读卡器的功能,我们就在上次NAND Flash模拟出的U盘的工程上修改了,这样的话只要修改一小部分了。 工程的绝大部分不需要修改,只要将fsmc_nand.c文件移除工程,添加上官方的关于SDIO的SD卡的驱动代码文件stm32_eval_sdio_sd.c,我讨厌出现eval,所以将该文件直接改为sdio_sdcard.c。同时,既然我们使用SDIO来驱动SD卡,所以在外设库文件组里要添加stm32_sdio.c文件,否则会出现很多未定错误。 我们接下去修改的就只有mass_mal.c这个文件了。更NAND Flash工程一样,我们改成简洁点: uint32_t Mass_Memory_Size ;
[单片机]
<font color='red'>STM32</font> USB NAND FLASH 模拟U盘
stm32 串口下载错误解决方法
由于我的J-LINK 坏了,新买的还没到,就用串口工具进行下载。 信息提示框提示下载内容不在0x08000000 与0x20000000范围内,即不在程序FLASH或SRAM上。而读器件信息,清除芯片就没问题,表示我的串口下载工具没有问题。我的IAR是新安装的,由于之前在进行.icf文件进行配置的时候使用的是相对寻址,所以也不存在文件夹目录变更后不能使用的问题。 不放心仍然打开IAR看了下.ICF文件的路径,确认没有问题。又在文件夹中打开,icf文件,确认了下载地址没有问题。编译下载还是提示相同的错误。我就在IAR中编辑选项查看ICF文件,看了一下没有改动保存。再次编译下载问题消失。 所以这个可能是IAR的bug吧,我用的
[单片机]
<font color='red'>stm32</font> 串口下载错误解决方法
STM32之五外部中断(下)
通过对外部中断理论的些许理解,这次我们利用两个按键key1和key2来控制led1和led2的亮灭,按key1进入key1的中断,控制对应的led亮灭,按key2进入key2的中断,控制相应的led的亮灭 同样,涉及到中断,我们要建立两个文件,exti.c及exti.h,首先来看看exti.c 用到中断,自然我们要用到stm32f10x_it.c函数,将中断响应函数放在里面,打开这个文件你会发现里面只是给出了部分中断函数,找来找去也没有我们需要的中断函数体,这时需要我们自己添加函数体,看下我添加的函数体: 但是这个函数名可不是随便起的,具体每个中断函数体的函数名怎么书写,我们可以打开startup_stm32f10x_hd.
[单片机]
<font color='red'>STM32</font>之五外部中断(下)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved