编号8

基于STM32单片机的智能手环设计(OLED显示)

功能描述:

由 STM32单片机+按键模拟计步+RTC时钟模块+DS18B20温度传感器模块+心率采集模块+串口模块+OLED显示模块+键盘模块
1、采用STM32F103单片机为主控制器
2、利用按键模拟实现计步,RTC内部时钟提供时钟信号,通过心率传感器采集心率信号测量心率,DS18B20温度传感器实现体温测量。
3、OLED显示体温、步数、日期时间、心率等信息, 
4、通过串口将心率、步数、体温、IBI等信息发送至串口显示
5、按键功能:三个按键用于调整日期、时间;具有一个清楚步数按键;具有一个切换信息显示按键。
6、步数清零功能:每天00:00会自动清除前一天的步数,也可通过按键清除。
7、仿真中心率传感器用波形发生器和按键两种方式模拟,可用开关切换。

注意:proteus8.11版本才能打开  心率测量误差±1

视频演示链接:

8、基于STM32单片机的智能手环设计(OLED显示)

仿真图:

主界面:

时间显示界面:

时间调整界面:

程序源码:

#include "delay.h"
#include "OLED_I2C.h"
#include "pulsesensor.h"
#include "ds18b20.h"
#include "timer.h"
#include "rtc.h"
#include "key.h"
#include "usart.h"  #include "stdio.h"
#include "stdlib.h"
#include <string.h>extern unsigned int cnt;unsigned char Dis_mode;        //显示状态标志 0:显示传感器数据  1:显示日期时间void Dis_Init(void)
{OLED_ShowCN(0,0,10);           //心率OLED_ShowCN(16,00,11);OLED_ShowStr(32,0,":---/min",2);OLED_ShowCN(0,2,12);          //步数OLED_ShowCN(16,2,13);OLED_ShowCN(0,4,14);           //体温OLED_ShowCN(16,4,15);
}
void Dis_Time(void)
{OLED_ShowCN(16*2,0,16);            //时间OLED_ShowCN(16*3,0,17);OLED_ShowCN(16*4,0,30);          //时间OLED_ShowCN(16*5,0,31);OLED_ShowCN(0,2,18);         //日期OLED_ShowCN(16,2,19);OLED_ShowCN(0,4,16);           //时间OLED_ShowCN(16,4,17);}
void RTC_Clock_Init(void);int main(void)
{   unsigned char buf[18];unsigned short int STEPS=0;                       //步数unsigned char Heart = 0;                        //心率值short temprature;                              //定义温度变量unsigned char key_value = 0;                    //按键返回值NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);  //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级OLED_Init();                                    //OLED初始化操作OLED_CLS();                                     //OLED清除屏幕   OLED_ShowCN(32,2,0);                            //欢迎使用OLED_ShowCN(32+16,2,1);OLED_ShowCN(32+32,2,2);OLED_ShowCN(32+32+16,2,3);KEY_Init();                                       //IO初始化DS18B20_Init();while(DS18B20_Init()!=0)                      //ds18b20初始化检测  {OLED_ShowStr(0,0,(u8 *)" DS18B20 Error! ",2);delay_ms(100);OLED_ShowStr(0,0,(u8 *)"                ",2);delay_ms(100);}USART1_Init(9600);TIM3_Int_Init(11,7350);                           //定时  按照正常计算发现数值偏大 这里作为微调使仿真中更加准确EXTIX_Init();                                   //外部中断初始化TIM2_Int_Init(199,7199);                      //10Khz的计数频率,计数到200为20ms RTC_Clock_Init();OLED_CLS();                                        //清屏 Dis_Init();        UsartPrintf(USART1,"*************************** 欢迎使用!******************\r\n");while(1){  key_value = KEY_Scan(0);            //按键单击switch(key_value){case 1:KEY_Set();   break;case 2:                           //清除步数STEPS = 0;break;case 4:OLED_CLS();                    //清屏    if(Dis_mode==0)             //如果上一次是显示心率、步数、体温 的 则显示时间{Dis_Time();Dis_mode = 1;}else                        //如果上一次不是显示心率、步数、体温 的 则心率、步数、体温{Dis_mode = 0;               Dis_Init();             //显示汉字信息}   break;case 5:                           //KEY5按下STEPS++;break;} if(flag_timer==1)                   //毫秒赋一次值 flag_timer是标志位{flag_timer = 0;                 //清除标志  等待下一次TIM_Cmd(TIM2, DISABLE);        //使能TIMx    TIM_Cmd(TIM3, DISABLE);         //使能TIMx    temprature = DS18B20_Get_Temp();    //读取温度TIM_Cmd(TIM2, ENABLE);        //使能TIMx        TIM_Cmd(TIM3, ENABLE);          //使能TIMx                }if(update_flag==1)                     //2S标志到 发送一次数据到手机APP{update_flag = 0;UsartPrintf(USART1,"步数:%5d步 心率:%3d/min 体温:%4.1f℃ IBI:%4dms\r\n",STEPS,Heart,(float)temprature/10,cnt); //串口发送出去}if(calendar.hour==0&&calendar.min==0&&(calendar.sec==0||calendar.sec==1||calendar.sec==2))     //凌晨00:00:00  清除步数{STEPS = 0;}switch(Dis_mode){case 0:                                          //显示传感器数据sprintf((char*)buf,":%5d",STEPS);          //显示步数OLED_ShowStr(16*2,2,buf,2);OLED_ShowCN(16*5,2,12);                        //汉字 步Heart = Pulsesensor_Read();                 //获取心率值   sprintf((char *)buf,(const char *)":%3d/min",Heart);OLED_ShowStr(16*2,0,buf,2);sprintf((char *)buf,(const char *)":%5.1f",(float)temprature/10);OLED_ShowStr(16*2,4,buf,2);sprintf((char *)buf,(const char *)"IBI:%4dms",cnt);OLED_ShowStr(0,6,buf,2);break;case 1:                                         //显示时间 日期等信息RTC_Display();                              //显示时钟break;}}
}

软件免费下载地址:

1、Proteus仿真软件
文件内容:Proteus7.8安装包、Proteus8.6安装包、Proteus.8.10安装包、Proteus Professional 8.11 SP0安装包

链接:https://pan.baidu.com/s/11LNUZ9BJXWvXf1C4dPc3_w 
提取码:2756

3、KEIL5 MDK软件(STM32开发软件)
链接:https://pan.baidu.com/s/1t3eY-3yRdTa7jZMlijq_jg

提取码:ab58

代码下载:

https://pan.baidu.com/s/1UsOJUPcWZJHoh6UiGPrnCA?pwd=6aos

基于STM32单片机的智能手环设计(OLED显示)(Proteus仿真+程序+报告)相关推荐

  1. 基于STM32单片机的直流电机PWM调速(Proteus仿真+程序)

    编号:9 基于STM32单片机的直流电机PWM调速 功能描述: 由 STM32单片机+液晶1602显示模块+键盘模块+L298N电机驱动模块+直流电机 1.采用STM32F103单片机为主控制器 2. ...

  2. 基于51单片机的智能鱼缸设计。 有原理图,程序,原文,可代做实物。 才用STC12C5A60S2,最新款国产51单片机

    基于51单片机的智能鱼缸设计. 有原理图,程序,原文,可代做实物. 才用STC12C5A60S2,最新款国产51单片机. 本系统设计的主要是基于单片机为核心,设计一款集温度检测.恒温控制.步进电机控制 ...

  3. 基于51单片机轮胎胎压监测系统-压力传感器(仿真+程序+报告)

    本设计: 基于51单片机轮胎胎压监测系统-压力传感器(仿真+程序+报告) Proteus仿真版本:proteus7.8 程序编译器:keil 4 编程语言:C语言 编号C0018 ----本设计分享下 ...

  4. 基于stm32单片机的智能鱼缸设计(实物+原理图+源码)

    资料编号:059     功能如下: 1.采用stm32单片机作为控制CPU,OLED显示万年历和温度 2.智能加热.加氧.加二氧化碳 3.采用智能自动开灯 具体功能请看下方演示视频 59-基于stm ...

  5. 基于单片机串口远程多路温湿度采集仿真-基于单片机ADC0809八路电压采集系统设计-基于单片机16x32点阵多模式显示仿真设计-基于单片机餐厅呼叫控制系统仿真设计-基于STM32单片机的智能水杯设计

    1220基于单片机ADC0809八路电压采集系统设计-毕设课设资料 数码管显示,测量八路电压表. #define addo (5.0/255.0) #define zero 0.005 //用于校准A ...

  6. 【毕业设计】基于51单片机的智能窗帘设计(原理图+原理图+仿真+论文)

    按键1:加(手动开启窗帘 按键2:减(手动关闭窗帘) 按键3:进入定时模式开启时间和光控阈值数值大小的开启 按键4:进入当前时间的设置(年.月.日.时.分的设置) 按键5:切换模式(在手动模式.定时模 ...

  7. 基于stm32单片机室内环境温湿度光照强度检测系统Proteus仿真

    资料编号:178    下面是仿真功能视频演示: 180-基于stm32单片机室内环境温湿度光照强度检测系统Proteus仿真 功能讲解: 采用stm32单片机最为控制CPU,DS1302时钟芯片,d ...

  8. 基于STM32单片机的智能书桌设计与实现

    研究结果表明,学生的读写姿势不正确率高达70%甚至85%以上[1].不良的读写姿势.不合适的光照条件会令学生不停地调整眼睛的睫状肌,容易降低睫状肌调节能力,进而导致近视[2].从长远看,不良的读写姿势 ...

  9. 【项目实战】基于STM32单片机的智能小车设计(有代码)

    [1]背景意义 近些年随着国民生活水平的提升,以小车为载体的轮式机器人进入了我们的生活,尤其是在一些布线复杂困难的安全生活区和需要监控的施工作业场合都必须依赖轮式机器人的视频监控技术.因此,基于嵌入式 ...

最新文章

  1. 《数学之美》第18章 闪光的不一定是金子--谈谈搜索引擎反作弊问题和搜索结果的权威性问题
  2. Solaris 上swap -s的解释
  3. 案例:验证用户名是否可用
  4. 【任务脚本】0616吐槽tb坑爹活动,预测看好jd活动,更新汇总战绩,DIY净水器预告...
  5. 写给粪坑里的钻石——烂公司里的好员工
  6. DFS迷宫递归所有路径 新手入门
  7. 自己开发的ABAP代码版本查看工具
  8. dbscan用 java代码_聚类算法之DBScan(Java实现)[转]
  9. 分解因数 递归_递归分解WAR文件
  10. Spring AOP事务管理(使用切面把事务管理起来)
  11. js的左右滑动触屏事件
  12. (四)孪生神经网络介绍及pytorch实现
  13. C#+ArcEngine中com对象的释放问题
  14. (尚硅谷)2022 版 MyBatis 教程笔记一
  15. 美信科技监控易:智慧高校一体化综合监控解决方案
  16. 云计算之paas架构解析
  17. HDAO去中心化社区自治平台,助力明星项目启航
  18. iOS中HTTPS证书验证浅析
  19. 计算机管理格式化硬盘,磁盘管理格式化硬盘出错的解决方法
  20. 前后缀匹配问题kmp

热门文章

  1. 你还在为高德地图找不到门牌号等详细地址而烦恼吗?你还在等什么——Python调用高德地图API实现经纬度换算、地图可视化
  2. Matplotlib:可视化颜色命名分类和映射颜色分类
  3. DARPA“人工智能探索”工作进展
  4. 用Spring Boot颠覆Java应用开发
  5. RA4M2开发(4)----读取ISL29035数据,并在OLED上显示,串口打印
  6. 057 Hive项目案例过程
  7. DPDK背景和优势,赶紧学起来运用吧
  8. linux系统怎么清理,linux系统怎么清理垃圾清理
  9. Vue3+springboot+mybatis-pius实现分页功能
  10. 《C++类基本知识和6个默认成员函数详细剖析》