【Proteus仿真】【STM32单片机】智能手环

news2024/11/16 13:27:09

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

系统运行后,OLED显示温度、心率、加速度极其阈值;
可按下K3键进入阈值设置模式,K1和K2调节对应阈值,K4确定;当检测体温、心率、加速度超出阈值范围,则蜂鸣器报警,同时将发送报警信息。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)

*/



//系统数据显示
void sys_data_show(void)
{
	u8 buf[5];
	while(1)
	{
		//正常模式
		if(sys_ctrl.mode==0)
		{
			//温度显示
			buf[0]=sys_ctrl.temp/100+0x30;
			buf[1]=sys_ctrl.temp%100/10+0x30;
			buf[2]='.';
			buf[3]=sys_ctrl.temp%100%10+0x30;
			buf[4]='\0';
			OLED_ShowString(3*8,2,buf,16);
			//心率显示
			OLED_ShowNum(3*8,4,sys_ctrl.heat,3,16);
			//加速度显示
			OLED_ShowNum(3*8,6,sys_ctrl.adxl,2,16);

			//温度阈值显示
			buf[0]=sys_ctrl.temph/100+0x30;
			buf[1]=sys_ctrl.temph%100/10+0x30;
			buf[2]='.';
			buf[3]=sys_ctrl.temph%100%10+0x30;
			buf[4]='\0';
			OLED_ShowString(10*8,2,buf,16);
			//心率阈值显示
			OLED_ShowNum(9*8,4,sys_ctrl.heatl,2,16);
			OLED_ShowNum(12*8,4,sys_ctrl.heath,3,16);
			//加速度阈值显示
			OLED_ShowNum(9*8,6,sys_ctrl.adxlh,2,16);
		}
			
		//阈值设定,数据位置闪烁
		switch(sys_ctrl.mode)
		{
			case 1://温度
				OLED_ShowString(10*8,2,"    ",16);
				delay_ms(1);
				buf[0]=sys_ctrl.temph/100+0x30;
				buf[1]=sys_ctrl.temph%100/10+0x30;
				buf[2]='.';
				buf[3]=sys_ctrl.temph%100%10+0x30;
				buf[4]='\0';
				OLED_ShowString(10*8,2,buf,16);
				break;
			case 2://心率下
				OLED_ShowString(9*8,4,"  ",16);
				delay_ms(1);
				OLED_ShowNum(9*8,4,sys_ctrl.heatl,2,16);
				break;
			case 3://心率上
				OLED_ShowString(12*8,4,"   ",16);
				delay_ms(1);
				OLED_ShowNum(12*8,4,sys_ctrl.heath,3,16);
				break;
			case 4://加速度
				OLED_ShowString(9*8,6,"  ",16);
				delay_ms(1);
				OLED_ShowNum(9*8,6,sys_ctrl.adxlh,2,16);
				break;
		}

		break;			
	}
}

//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	
	key=KEY_Scan(0);
	//模式设置
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>4)sys_ctrl.mode=1;
	}
	//阈值设置模式
	if(sys_ctrl.mode!=0)
	{
		//加
		if(key==KEY1_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://温度 
					sys_ctrl.temph++;
					if(sys_ctrl.temph>999)sys_ctrl.temph=0;
					break;
				case 2://心率下 
					sys_ctrl.heatl++;
					if(sys_ctrl.heatl>99)sys_ctrl.heatl=0;
					break;
				case 3://心率上 
					sys_ctrl.heath++;
					if(sys_ctrl.heath>999)sys_ctrl.heath=0;
					break;
				case 4://加速度
					sys_ctrl.adxlh++;
					if(sys_ctrl.adxlh>99)sys_ctrl.adxlh=0;
					break;
			}		
		}
		//在设置模式下,减
		else if(key==KEY2_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://温度 
					sys_ctrl.temph--;
					if(sys_ctrl.temph<0)sys_ctrl.temph=999;
					break;
				case 2://心率下 
					sys_ctrl.heatl--;
					if(sys_ctrl.heatl<0)sys_ctrl.heatl=99;
					break;
				case 3://心率上 
					sys_ctrl.heath--;
					if(sys_ctrl.heath<0)sys_ctrl.heath=999;
					break;
				case 4://加速度
					sys_ctrl.adxlh--;
					if(sys_ctrl.adxlh<0)sys_ctrl.adxlh=99;
					break;
			}		
		}
		//确定
		else if(key==KEY4_PRESS)
		{
			sys_ctrl.mode=0;		
		}
	}
}

//应用控制系统
void appdemo_show(void)
{
	u8 i=10;
	sys_parm_init();//系统参数初始化
	KEY_Init();
	BEEP_Init();
	DS18B20_Init();
	pcf8591_init();
	ADCx_Init();
	USART1_Init(9600);
	OLED_Init();//LCD1602初始化
	//读取温度数据,等待稳定
	while(i--)
	{
		//温度获取
		sys_ctrl.temp=DS18B20_GetTemperture();
		//角速度获取
		sys_ctrl.adxl=pcf8591_read_adcvalue(0);
		sys_ctrl.adxl=cal_map(sys_ctrl.adxl,0,255,0,99);
		delay_ms(100);		
	}
	sys_open_show();//系统初始界面显示

	while(1)
	{
		sys_data_get();//系统数据获取
		sys_data_show();//系统数据显示
		sys_data_set();//系统数据设置
		sys_fun_ctrl();//系统功能控制		
	}
}




三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通讯协议介绍CoAP 协议解析

目录 1 通讯协议 2 TCP/IP 网络模型 2.1 TCP协议 2.1.1 TCP 连接过程 2.1.2 TCP 断开连接 2.1.3 TCP协议特点 2.2 UDP协议 2.2.1 UDP 协议特点 3 应用层协议简介 3.1 HTTP 协议 3.2 CoAP 协议 3.3 MQTT 协议 4 CoAP 协议详解 4.1 REST 风格 4.2 CoAP 首部分析 4…

网店怎么进行有效推广?可以试试软文推广

商家在为自己的网店制定推广方案时&#xff0c;不管是从渠道、手段、客户群体哪个方面出发都会面临挑战。传统推广方式成本过高&#xff0c;而宣传效果不一定明显&#xff0c;我们可以试试利用软文推广&#xff0c;成本较低而且推广效果明显。接下来媒介盒子就告诉大家&#xf…

四川玖璨电子商务有限公司:短视频运营理解

短视频运营是一种通过策划、执行和管理短视频内容以达到品牌目标的一项工作。在如今面临信息爆炸的时代&#xff0c;短视频已经成为了吸引用户注意力的一种重要方式。作为一种新兴媒体形式&#xff0c;短视频拥有跨时空、生动有趣、内容丰富的特点&#xff0c;因此得到了越来越…

智能遥测终端机RTU的好处介绍

智能遥测终端机RTU是一种具有高度智能化复合功能的遥测装置&#xff0c;它通过数据采集、通信传输和自动控制等技术&#xff0c;实现对被监测系统的远程监控、数据分析、故障诊断和远程控制。它在工业自动化领域的广泛应用&#xff0c;给自动化程度的提高、成本的下降和生产效率…

Linux 内存泄漏检测的基本原理

一、mtrace分析内存泄露 mtrace&#xff08;memory trace&#xff09;&#xff0c;是 GNU Glibc 自带的内存问题检测工具&#xff0c;它可以用来协助定位内存泄露问题。 它的实现源码在glibc源码的malloc目录下&#xff0c;其基本设计原理为设计一个函数 void mtrace ()&…

开学季ipad手写笔哪款好?平价电容笔牌子排行

随着新学期的临近&#xff0c;随着Apple Pencil的火爆&#xff0c;出现了很多新款的平板电脑的电容笔&#xff0c;也开始在国内上市&#xff0c;有些是品质很高&#xff0c;有些是价位很实惠&#xff0c;而且大部分人都能接受。但是&#xff0c;也存在不少性价比很低的产品。本…

uniapp-video自定义视频封面

uniapp官方文档&#xff1a;video | uni-app官网uni-app,uniCloud,serverlesshttps://uniapp.dcloud.net.cn/uni-app-x/component/video.html#video 主要使用到的是poster属性&#xff0c;详细属性可点击上方api进行查看 <video id"myVideo" class"xwlogo&q…

Go基础语法:概述

概述 1 背景 产生原因 Go是Google开发的一种静态、强类型、编译型、并发型&#xff0c;并具有垃圾回收功能的类C编程语言。2009以开源项目的形式发布&#xff0c;2012年发布1.0稳定版本&#xff0c;距今已经十年了。 Go语言之父Pike提到&#xff1a;Go语言是以C为原型&…

Kubernetes源码阅读环境搭建

参考博文&#xff1a;Kubernetes 源码剖析-环境准备 安装Go语言 wget https://studygolang.com/dl/golang/go1.14.10.linux-amd64.tar.gz下载源代码 mkdir /goinstall创建一个存放go语言的编译器等组件存放的目录。 tar -zxf go1.14.10.linux-amd64.tar.gz -C /goinstall…

Vulhub靶场环境搭建

在Ubantu系统上搭建靶场环境 一、ubantu系统准备 1.更新安装列表 sudo apt-get update 2.安装docker.io sudo apt install docker.io 查看是否安装成功 docker -v 3.安装pip 检查pip是否安装 pip -V 安装pip apt install python3-pip 或者 apt install pip 再次检查pip…

Arcgis提取点数据经纬度

Arcgis提取点数据经纬度 现已打开tiff影像和采样点的shape文件。目标是提取采样点的经纬度信息然后导出。 打开数据管理工具-要素-添加XY坐标 在点的图层上右击打开属性表时&#xff0c;经纬度信息已经添加到属性表中。 在属性表的左上角中点击导出&#xff0c;导出为文本文…

SpringMVC之自定义注解

目录 一.什么是Java注解 1.简介 2.注解的分类 3.JDK元注解 二.自定义注解 1.自定义注解的分类 1.1.标记Annotation: 1.2.元数据Annotation: 2.如何使用自定义注解 3.案例演示 3.1 获取类、方法及属性上的注解值 3.2Inherited 的使用 3.3获取类属性上的注解属性值 3.…

模电课设:用Multisim设计和分析差分放大电路

1 课设内容 1&#xff09;设计一个差分放大器电路&#xff1b; 2&#xff09;用电流源替换发射极电阻&#xff0c;看看会发生什么&#xff1f; 3&#xff09;差分放大器电路特性之差模传输特性。 2 模型搭建 1&#xff09;设计一个差分放大器电路。 差分放大器电路是由对称…

day4_C++

day4_C 思维导图重载 思维导图 重载 #include <iostream> #include <cstring> using namespace std;class MyString { private:char *str;int size; public:MyString():size(10){str new char[size];strcpy(str,"");}MyString(const char *s){size st…

【案例】光电兼修的Alpha Cen,如何应对上升期的甜蜜烦恼?

Alpha Cen&#xff08;比邻星光&#xff09;是一家挺酷的公司&#xff0c;专注于超表面技术芯片研发。 所谓超表面芯片&#xff0c;就是通过控制类似下图的一个个独立纳米级别单元实现光操控。用微纳光学超表面技术能够平面化集成唯一还不在wafer上的光学器件&#xff0c;这意…

满载大模型技能干货的AI Day活动全新来袭

AI大模型时代&#xff0c;创造力才是第一生产力&#xff01; 满载大模型技能干货的AI Day主题活动全新来袭 丰富有趣的Workshop即将空降你的学校 帮助大家掌握前沿技能、拓展技术视野、迈进AIGC的大门 打造属于你的AI应用&#xff0c;满足不同阶段的学习实践需求 无论你是零基础…

面渣逆袭:微服务三十三问,两万字图文详解,速收藏

大家好&#xff0c;我是老三&#xff0c;面渣逆袭系列继续&#xff0c;这期给大家带来微服务相关的面试题。 概览 1.什么是微服务&#xff1f; 微服务&#xff08;Microservices&#xff09;是一种软件架构风格&#xff0c;将一个大型应用程序划分为一组小型、自治且松耦合的…

线程同步互斥锁

共用三个函数&#xff1a; mutex_lock() mutex_unlock() mutex_trylock() pthread_mutex_lock给安卓上层使用&#xff0c;mutex_lock给kernel使用&#xff0c;本质是一样的&#xff0c;都是IPC通信中的互斥锁&#xff0c;只不过安卓上层封装出pthread_mutex_lock。 pthr…

一篇文章带你了解立仪点激光位移传感器

激光位移传感器是利用激光技术进行测量的传感器。它由激光器、激光检测器和测量电路组成。激光传感器是新型测量仪表。能够精确非接触测量被测物体的位置、位移等变化。 可以测量位移、厚度、振动、距离、直径等精密的几何测量。激光有直线度好的优良特性&#xff0c;同样激光…

WOODWARD 5466-425 确保一致、无差错的配置和实施

WOODWARD 5466-425 确保一致、无差错的配置和实施 虽然许多大型制造公司已在其 IT 部门使用虚拟化多年&#xff0c;但 DeltaV Virtual Studio 专为过程控制系统而设计&#xff0c;具有自动化工程师直观且熟悉的工作流程和功能集。预构建的虚拟机模板可以轻松创建虚拟机&am…